Guide
Sådan laver du et Minecraft-plugin i Kotlin
Opdateret 18. oktober 2026
Kotlin kører på JVM'en, så et Kotlin-plugin bruger den samme Paper- eller Spigot-API, den samme plugin.yml og den samme plugins/-mappe som et Java-plugin. Koden er kortere og null-sikker. Det eneste, Java-plugins ikke skal bekymre sig om, er Kotlins standardbibliotek: serveren leveres ikke med det, så pluginet skal selv have det med.
Start fra dette eksempel.
Generér dette med CodexeTrin for trin
1.Opret et Gradle-projekt med Kotlin DSL
En
build.gradle.ktsmed pluginetkotlin("jvm"), en Java-toolchain, der passer til din Minecraft-version (17, 21 eller 25), og PaperMC-repositoryet.2.Tilføj server-API'en
compileOnly("io.papermc.paper:paper-api:<version>"). Ligesom i Java leverer serveren den under kørsel, så den bundtes aldrig med.3.Skriv hovedklassen
class MyPlugin : JavaPlugin()medoverride fun onEnable(). Registrér kommandoer og listeners præcis som i Java.4.Få Kotlins standardbibliotek med
Bundt det ind i .jar-filen med Shadow-pluginet, eller lad serveren downloade det ved opstart via listen
librariesiplugin.yml. Uden en af dem fejler pluginet medNoClassDefFoundError: kotlin/....5.Skriv plugin.yml
Den samme fil som i et Java-plugin: name, version, main (Kotlin-klassen),
api-version, commands og permissions.6.Byg og test
./gradlew shadowJar(ellerbuild), kopiér .jar-filen frabuild/libs/til en testserver, og læs konsollen ved opstart.
Sådan får du Kotlin på serveren
- Shade det: Gradle-pluginet Shadow kopierer Kotlins standardbibliotek og andre runtime-biblioteker ind i din .jar. Det virker på alle versioner og er det mest almindelige valg.
- libraries i plugin.yml: fra Spigot 1.16.5 kan et plugin angive biblioteker fra Maven Central, som serveren downloader og indlæser for det. .jar-filen forbliver lille, men serveren skal have internetadgang ved første start.
- Biblioteker, du tilføjer: kotlinx-coroutines er et separat bibliotek, ikke en del af standardbiblioteket, og skal også bundtes med. Hvis du relokerer det til din egen pakke, undgår du konflikter med andre plugins, der bundter en anden version.
Coroutines og hovedtråden
Coroutines er en ren måde at indlæse data fra en database på uden at fryse serveren, men Bukkit-API'en (verdener, entities, inventories) skal stadig bruges fra hovedtråden. Lav det langsomme arbejde på en baggrunds-dispatcher, og skift så tilbage til servertråden med scheduleren, før du rører spillet. Knyt coroutine-scopet til pluginet, så det annulleres i onDisable().
Java eller Kotlin?
| Funktion | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Den samme Paper / Spigot-API |
| Byg | Maven eller Gradle | Gradle med build.gradle.kts |
| Ekstra ved kørsel | Ingen | Kotlins standardbibliotek, bundtet eller indlæst |
| Tutorials og eksempler | De fleste | Færre, men Java-eksempler kan oversættes direkte |
Med Codexe
Vælg Bukkit/Spigot/Paper (Kotlin). Codexe genererer et Gradle-projekt med build.gradle.kts, Paper-API'en, Shadow-pluginet til at bundte det, serveren ikke leverer, og coroutines bundtet og relokeret, når koden bruger dem. Det kompilerer pluginet, før det er Klar, og Kotlin-plugins kan prøves på en testserver og tjekkes af testspillere ligesom Java-plugins. Se Kotlin-plugingeneratoren.
"Et Paper 1.21.4-plugin i Kotlin kaldet Bounties: /bounty set <player> <amount> via Vault, dræberen får belønningen, /bounty top viser de 10 højeste, gemt i SQLite med coroutines til databaseadgang. Brug data classes og extension functions, og hold kaldene til Bukkit-API'en på hovedtråden."
Spørgsmål
Er et Kotlin-plugin langsommere end et Java-plugin?
Ingen mærkbar forskel: begge kompileres til JVM-bytecode. .jar-filen er større, når standardbiblioteket er bundtet med.
Kan jeg blande Java og Kotlin i ét plugin?
Ja, Gradle kompilerer begge i det samme projekt, og Kotlin-kode kalder Java-klasser direkte.
Hvorfor NoClassDefFoundError for Kotlin-klasser?
Kotlins standardbibliotek er ikke i .jar-filen eller er ikke indlæst. Byg med shadowJar, og installér den .jar, eller tilføj biblioteket til libraries i plugin.yml.
Lav et Kotlin-plugin
Denne prompt åbnes klar til at sende:
“Et Paper 1.21.4-plugin i Kotlin kaldet Bounties: /bounty set <player> <amount> med Vault-økonomien, dræberen får belønningen, /bounty top viser de 10 højeste, dusører gemt i SQLite med coroutines til databaseadgang, kald til Bukkit-API'en på hovedtråden, beskeder i config.yml.”
Generér dette med Codexe