Guide
Slik lager du et Minecraft-plugin i Kotlin
Oppdatert 18. oktober 2026
Kotlin kjører på JVM, så et Kotlin-plugin bruker det samme Paper- eller Spigot-API-et, den samme plugin.yml og den samme plugins/-mappen som et Java-plugin. Koden er kortere og null-sikker. Det eneste Java-plugins ikke trenger å tenke på, er Kotlins standardbibliotek: serveren leveres ikke med det, så pluginet må ha det med selv.
Start fra dette eksempelet.
Generer dette med CodexeSteg for steg
1.Opprett et Gradle-prosjekt med Kotlin DSL
En
build.gradle.ktsmed pluginetkotlin("jvm"), en Java-toolchain som passer Minecraft-versjonen din (17, 21 eller 25) og PaperMC-repositoryet.2.Legg til server-API-et
compileOnly("io.papermc.paper:paper-api:<version>"). Som i Java leverer serveren det under kjøring, så det pakkes aldri med.3.Skriv hovedklassen
class MyPlugin : JavaPlugin()medoverride fun onEnable(). Registrer kommandoer og lyttere akkurat som i Java.4.Ta med Kotlins standardbibliotek
Pakk det inn i .jar-filen med Shadow-pluginet, eller la serveren laste det ned ved oppstart via
libraries-listen iplugin.yml. Uten ett av dem feiler pluginet medNoClassDefFoundError: kotlin/....5.Skriv plugin.yml
Den samme filen som for et Java-plugin: navn, versjon, main (Kotlin-klassen),
api-version, kommandoer og tillatelser.6.Bygg og test
./gradlew shadowJar(ellerbuild), kopier .jar-filen frabuild/libs/til en testserver og les konsollen ved oppstart.
Slik får du Kotlin inn på serveren
- Shade det: Gradle-pluginet Shadow kopierer Kotlins standardbibliotek og andre kjøretidsbiblioteker inn i .jar-filen din. Det fungerer på alle versjoner og er det vanligste valget.
- libraries i plugin.yml: fra Spigot 1.16.5 kan et plugin liste opp biblioteker fra Maven Central som serveren laster ned og laster inn for det. .jar-filen forblir liten, men serveren trenger internettilgang ved første oppstart.
- Biblioteker du legger til: kotlinx-coroutines er et eget bibliotek, ikke en del av standardbiblioteket, og må også pakkes med. Å relokere det til din egen pakke unngår konflikter med andre plugins som pakker med en annen versjon.
Coroutines og hovedtråden
Coroutines er en ryddig måte å laste data fra en database på uten å fryse serveren, men Bukkit-API-et (verdener, entiteter, inventarer) må fortsatt brukes fra hovedtråden. Gjør det trege arbeidet på en bakgrunns-dispatcher, og bytt så tilbake til servertråden med scheduleren før du rører spillet. Knytt coroutine-scopet til pluginet, så det avbrytes i onDisable().
Java eller Kotlin?
| Funksjon | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Det samme Paper / Spigot-API-et |
| Bygg | Maven eller Gradle | Gradle med build.gradle.kts |
| Ekstra ved kjøring | Ingen | Kotlins standardbibliotek, pakket med eller lastet inn |
| Veiledninger og eksempler | De fleste | Færre, men Java-eksempler kan overføres direkte |
Med Codexe
Velg Bukkit/Spigot/Paper (Kotlin). Codexe genererer et Gradle-prosjekt med build.gradle.kts, Paper-API-et, Shadow-pluginet for å pakke med det serveren ikke leverer, og coroutines pakket med og relokert når koden bruker dem. Det kompilerer pluginet før det er Klar, og Kotlin-plugins kan prøves på en testserver og sjekkes av testspillere akkurat som Java-plugins. Se Kotlin-plugingeneratoren.
«Et Paper 1.21.4-plugin i Kotlin kalt Bounties: /bounty set <player> <amount> via Vault, drapsmannen får belønningen, /bounty top viser de 10 høyeste, lagret i SQLite med coroutines for databasetilgang. Bruk data classes og extension functions, hold kallene til Bukkit-API-et på hovedtråden.»
Spørsmål
Er et Kotlin-plugin tregere enn et Java-plugin?
Ingen merkbar forskjell: begge kompileres til JVM-bytekode. .jar-filen blir større når standardbiblioteket pakkes med.
Kan jeg blande Java og Kotlin i ett plugin?
Ja, Gradle kompilerer begge i det samme prosjektet, og Kotlin-kode kaller Java-klasser direkte.
Hvorfor NoClassDefFoundError for Kotlin-klasser?
Kotlins standardbibliotek er ikke i .jar-filen eller er ikke lastet inn. Bygg med shadowJar og installer den .jar-filen, eller legg biblioteket til i libraries i plugin.yml.
Lag et Kotlin-plugin
Denne prompten åpnes klar til å sendes:
“Et Paper 1.21.4-plugin i Kotlin kalt Bounties: /bounty set <player> <amount> med Vault-økonomien, drapsmannen får belønningen, /bounty top viser de 10 høyeste, dusører lagret i SQLite med coroutines for databasetilgang, kall til Bukkit-API-et på hovedtråden, meldinger i config.yml.”
Generer dette med Codexe