Guide
Så gör du ett Minecraft-plugin i Kotlin
Uppdaterad 18 oktober 2026
Kotlin körs på JVM, så ett Kotlin-plugin använder samma Paper- eller Spigot-API, samma plugin.yml och samma mapp plugins/ som ett Java-plugin. Koden är kortare och null-säker. Det enda som Java-plugin inte behöver bry sig om är Kotlins standardbibliotek: servern levereras inte med det, så pluginet måste ta med det själv.
Börja med det här exemplet.
Generera det här med CodexeSteg för steg
1.Skapa ett Gradle-projekt med Kotlin DSL
En
build.gradle.ktsmed pluginetkotlin("jvm"), en Java-toolchain som matchar din Minecraft-version (17, 21 eller 25) och PaperMC-repot.2.Lägg till server-API:et
compileOnly("io.papermc.paper:paper-api:<version>"). Precis som i Java tillhandahåller servern det vid körning, så det paketeras aldrig med.3.Skriv huvudklassen
class MyPlugin : JavaPlugin()medoverride fun onEnable(). Registrera kommandon och lyssnare precis som i Java.4.Ta med Kotlins standardbibliotek
Paketera in det i .jar-filen med Shadow-pluginet, eller låt servern ladda ner det vid start via listan
librariesiplugin.yml. Utan något av dem misslyckas pluginet medNoClassDefFoundError: kotlin/....5.Skriv plugin.yml
Samma fil som för ett Java-plugin: namn, version, main (Kotlin-klassen),
api-version, kommandon och behörigheter.6.Bygg och testa
./gradlew shadowJar(ellerbuild), kopiera .jar-filen frånbuild/libs/till en testserver och läs konsolen vid start.
Få in Kotlin på servern
- Shada det: Gradle-pluginet Shadow kopierar Kotlins standardbibliotek och andra körtidsbibliotek in i din .jar. Det fungerar på alla versioner och är det vanligaste valet.
- libraries i plugin.yml: från Spigot 1.16.5 kan ett plugin lista bibliotek från Maven Central som servern laddar ner och läser in åt det. .jar-filen förblir liten, men servern behöver internetåtkomst vid första start.
- Bibliotek du lägger till: kotlinx-coroutines är ett separat bibliotek, inte en del av standardbiblioteket, och måste också paketeras med. Att flytta det till ditt eget paket undviker krockar med andra plugin som paketerar en annan version.
Coroutines och huvudtråden
Coroutines är ett snyggt sätt att läsa data från en databas utan att frysa servern, men Bukkit-API:et (världar, entiteter, inventarier) måste fortfarande användas från huvudtråden. Gör det långsamma arbetet på en bakgrundsdispatcher och växla sedan tillbaka till servertråden med schemaläggaren innan du rör spelet. Knyt coroutine-scopet till pluginet, så att det avbryts i onDisable().
Java eller Kotlin?
| Funktion | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Samma Paper/Spigot-API |
| Bygg | Maven eller Gradle | Gradle med build.gradle.kts |
| Extra vid körning | Ingen | Kotlins standardbibliotek, paketerat eller inläst |
| Guider och exempel | De flesta | Färre, men Java-exempel går att översätta direkt |
Med Codexe
Välj Bukkit/Spigot/Paper (Kotlin). Codexe genererar ett Gradle-projekt med build.gradle.kts, Paper-API:et, Shadow-pluginet för att paketera det som servern inte tillhandahåller, och coroutines paketerade och flyttade när koden använder dem. Det kompilerar pluginet innan det blir Redo, och Kotlin-plugin kan provas på en testserver och kontrolleras av testspelare precis som Java-plugin. Se Kotlin-plugingeneratorn.
”Ett Paper 1.21.4-plugin i Kotlin som heter Bounties: /bounty set <player> <amount> via Vault, den som dödar får belöningen, /bounty top visar de 10 högsta, lagrat i SQLite med coroutines för databasåtkomst. Använd dataklasser och extensionsfunktioner, håll anropen till Bukkit-API:et på huvudtråden.”
Frågor
Är ett Kotlin-plugin långsammare än ett Java-plugin?
Ingen märkbar skillnad: båda kompileras till JVM-bytekod. .jar-filen blir större när standardbiblioteket paketeras med.
Kan jag blanda Java och Kotlin i samma plugin?
Ja, Gradle kompilerar båda i samma projekt, och Kotlin-kod anropar Java-klasser direkt.
Varför NoClassDefFoundError för Kotlin-klasser?
Kotlins standardbibliotek finns inte i .jar-filen eller läses inte in. Bygg med shadowJar och installera den .jar-filen, eller lägg till biblioteket i libraries i plugin.yml.
Gör ett Kotlin-plugin
Den här prompten öppnas färdig att skicka:
“Ett Paper 1.21.4-plugin i Kotlin som heter Bounties: /bounty set <player> <amount> med Vault-ekonomin, den som dödar får belöningen, /bounty top visar de 10 högsta, bounties lagrade i SQLite med coroutines för databasåtkomst, anrop till Bukkit-API:et på huvudtråden, meddelanden i config.yml.”
Generera det här med Codexe