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 Codexe

Trin for trin

  1. 1.Opret et Gradle-projekt med Kotlin DSL

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

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

    class MyPlugin : JavaPlugin() med override fun onEnable(). Registrér kommandoer og listeners præcis som i Java.

  4. 4.Få Kotlins standardbibliotek med

    Bundt det ind i .jar-filen med Shadow-pluginet, eller lad serveren downloade det ved opstart via listen libraries i plugin.yml. Uden en af dem fejler pluginet med NoClassDefFoundError: kotlin/....

  5. 5.Skriv plugin.yml

    Den samme fil som i et Java-plugin: name, version, main (Kotlin-klassen), api-version, commands og permissions.

  6. 6.Byg og test

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

FunktionJavaKotlin
APIPaper / SpigotDen samme Paper / Spigot-API
BygMaven eller GradleGradle med build.gradle.kts
Ekstra ved kørselIngenKotlins standardbibliotek, bundtet eller indlæst
Tutorials og eksemplerDe flesteFæ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
Sådan laver du et Minecraft-plugin i Kotlin (Paper) | Codexe