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 Codexe

Steg för steg

  1. 1.Skapa ett Gradle-projekt med Kotlin DSL

    En build.gradle.kts med pluginet kotlin("jvm"), en Java-toolchain som matchar din Minecraft-version (17, 21 eller 25) och PaperMC-repot.

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

    class MyPlugin : JavaPlugin() med override fun onEnable(). Registrera kommandon och lyssnare precis som i Java.

  4. 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 libraries i plugin.yml. Utan något av dem misslyckas pluginet med NoClassDefFoundError: kotlin/....

  5. 5.Skriv plugin.yml

    Samma fil som för ett Java-plugin: namn, version, main (Kotlin-klassen), api-version, kommandon och behörigheter.

  6. 6.Bygg och testa

    ./gradlew shadowJar (eller build), kopiera .jar-filen från build/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?

FunktionJavaKotlin
APIPaper / SpigotSamma Paper/Spigot-API
ByggMaven eller GradleGradle med build.gradle.kts
Extra vid körningIngenKotlins standardbibliotek, paketerat eller inläst
Guider och exempelDe flestaFä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
Så gör du ett Minecraft-plugin i Kotlin (Paper) | Codexe