Handleiding
Een Minecraft-plugin maken in Kotlin
Bijgewerkt 18 oktober 2026
Kotlin draait op de JVM, dus een Kotlin-plugin gebruikt dezelfde Paper- of Spigot-API, dezelfde plugin.yml en dezelfde map plugins/ als een Java-plugin. De code is korter en null-veilig. Het enige waar Java-plugins zich geen zorgen over hoeven te maken, is de Kotlin-standaardbibliotheek: de server levert die niet mee, dus de plugin moet hem zelf meebrengen.
Begin met dit voorbeeld.
Genereer dit met CodexeStap voor stap
1.Maak een Gradle-project met Kotlin DSL
Een
build.gradle.ktsmet de pluginkotlin("jvm"), een Java-toolchain die bij je Minecraft-versie past (17, 21 of 25) en de PaperMC-repository.2.Voeg de server-API toe
compileOnly("io.papermc.paper:paper-api:<version>"). Net als bij Java levert de server die tijdens het draaien, dus hij wordt nooit meegebundeld.3.Schrijf de hoofdklasse
class MyPlugin : JavaPlugin()metoverride fun onEnable(). Registreer commando's en listeners precies zoals in Java.4.Breng de Kotlin-standaardbibliotheek mee
Bundel hem in de .jar met de Shadow-plugin, of laat de server hem bij het opstarten downloaden via de lijst
librariesinplugin.yml. Zonder een van beide faalt de plugin metNoClassDefFoundError: kotlin/....5.Schrijf plugin.yml
Hetzelfde bestand als bij een Java-plugin: naam, versie, main (de Kotlin-klasse),
api-version, commando's en permissies.6.Bouwen en testen
./gradlew shadowJar(ofbuild), kopieer de .jar uitbuild/libs/naar een testserver en lees de console bij het opstarten.
Kotlin op de server krijgen
- Shade hem: de Shadow-plugin voor Gradle kopieert de Kotlin-standaardbibliotheek en andere runtimebibliotheken in je .jar. Het werkt op elke versie en is de meest gekozen aanpak.
- libraries in plugin.yml: vanaf Spigot 1.16.5 kan een plugin bibliotheken van Maven Central opgeven die de server voor hem downloadt en laadt. De .jar blijft klein, maar de server heeft bij de eerste start internettoegang nodig.
- Bibliotheken die je toevoegt: kotlinx-coroutines is een aparte bibliotheek, geen onderdeel van de standaardbibliotheek, en moet ook worden meegebundeld. Door hem naar je eigen package te relocaten voorkom je conflicten met andere plugins die een andere versie bundelen.
Coroutines en de main thread
Coroutines zijn een nette manier om data uit een database te laden zonder dat de server bevriest, maar de Bukkit-API (werelden, entity's, inventories) moet nog steeds vanaf de main thread worden gebruikt. Doe het trage werk op een achtergronddispatcher en schakel dan met de scheduler terug naar de serverthread voordat je de game aanraakt. Koppel de coroutine scope aan de plugin, zodat hij in onDisable() wordt geannuleerd.
Java of Kotlin?
| Functie | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Dezelfde Paper / Spigot-API |
| Build | Maven of Gradle | Gradle met build.gradle.kts |
| Extra's tijdens het draaien | Geen | Kotlin-standaardbibliotheek, meegebundeld of geladen |
| Tutorials en voorbeelden | De meeste | Minder, maar Java-voorbeelden zijn direct om te zetten |
Met Codexe
Kies Bukkit/Spigot/Paper (Kotlin). Codexe genereert een Gradle-project met build.gradle.kts, de Paper-API, de Shadow-plugin om te bundelen wat de server niet levert, en coroutines meegebundeld en gerelocated als de code ze gebruikt. De plugin wordt gecompileerd voordat hij Klaar is, en Kotlin-plugins kun je net als Java-plugins op een testserver proberen en laten controleren door testspelers. Zie de Kotlin-plugingenerator.
"Een Paper 1.21.4-plugin in Kotlin genaamd Bounties: /bounty set <player> <amount> via Vault, de moordenaar krijgt de beloning, /bounty top toont de 10 hoogste, opgeslagen in SQLite met coroutines voor databasetoegang. Gebruik data classes en extension functions, houd de aanroepen van de Bukkit-API op de main thread."
Vragen
Is een Kotlin-plugin trager dan een Java-plugin?
Geen merkbaar verschil: beide compileren naar JVM-bytecode. De .jar is groter als de standaardbibliotheek wordt meegebundeld.
Kan ik Java en Kotlin in één plugin mengen?
Ja, Gradle compileert beide in hetzelfde project, en Kotlin-code roept Java-klassen direct aan.
Waarom een NoClassDefFoundError voor Kotlin-klassen?
De Kotlin-standaardbibliotheek zit niet in de .jar of wordt niet geladen. Bouw met shadowJar en installeer die .jar, of voeg de bibliotheek toe aan libraries in plugin.yml.
Maak een Kotlin-plugin
Deze prompt opent klaar om te versturen:
“Een Paper 1.21.4-plugin in Kotlin genaamd Bounties: /bounty set <player> <amount> met de Vault-economy, de moordenaar krijgt de beloning, /bounty top toont de 10 hoogste, premies opgeslagen in SQLite met coroutines voor databasetoegang, aanroepen van de Bukkit-API op de main thread, berichten in config.yml.”
Genereer dit met Codexe