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 Codexe

Steg for steg

  1. 1.Opprett et Gradle-prosjekt med Kotlin DSL

    En build.gradle.kts med pluginet kotlin("jvm"), en Java-toolchain som passer Minecraft-versjonen din (17, 21 eller 25) og PaperMC-repositoryet.

  2. 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. 3.Skriv hovedklassen

    class MyPlugin : JavaPlugin() med override fun onEnable(). Registrer kommandoer og lyttere akkurat som i Java.

  4. 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 i plugin.yml. Uten ett av dem feiler pluginet med NoClassDefFoundError: kotlin/....

  5. 5.Skriv plugin.yml

    Den samme filen som for et Java-plugin: navn, versjon, main (Kotlin-klassen), api-version, kommandoer og tillatelser.

  6. 6.Bygg og test

    ./gradlew shadowJar (eller build), kopier .jar-filen fra build/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?

FunksjonJavaKotlin
APIPaper / SpigotDet samme Paper / Spigot-API-et
ByggMaven eller GradleGradle med build.gradle.kts
Ekstra ved kjøringIngenKotlins standardbibliotek, pakket med eller lastet inn
Veiledninger og eksemplerDe flesteFæ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
Slik lager du et Minecraft-plugin i Kotlin (Paper) | Codexe