Útmutató

Hogyan készíts Minecraft-plugint Kotlinban

Frissítve: 2026. október 18.

A Kotlin a JVM-en fut, így egy Kotlin-plugin ugyanazt a Paper- vagy Spigot API-t, ugyanazt a plugin.yml fájlt és ugyanazt a plugins/ mappát használja, mint egy Java-plugin. A kód rövidebb és null-biztos. Az egyetlen dolog, amivel a Java-pluginoknak nem kell foglalkozniuk, a Kotlin standard könyvtár: a szerver nem tartalmazza, ezért a pluginnak kell magával hoznia.

Indulj ebből a példából.

Generáld ezt a Codexe-szel

Lépésről lépésre

  1. 1.Hozz létre egy Gradle-projektet Kotlin DSL-lel

    Egy build.gradle.kts a kotlin("jvm") pluginnal, a Minecraft-verziódhoz illő Java toolchainnel (17, 21 vagy 25) és a PaperMC repositoryval.

  2. 2.Add hozzá a szerver API-t

    compileOnly("io.papermc.paper:paper-api:<version>"). Ahogy a Java-pluginoknál is, futásidőben a szerver biztosítja, így soha nem kerül bele a csomagba.

  3. 3.Írd meg a főosztályt

    class MyPlugin : JavaPlugin() override fun onEnable() metódussal. A parancsokat és a figyelőket pontosan úgy regisztráld, mint egy Java-pluginnál.

  4. 4.Hozd magaddal a Kotlin standard könyvtárat

    Csomagold bele a .jar fájlba a Shadow pluginnal, vagy hagyd, hogy a szerver induláskor letöltse a plugin.yml libraries listáján keresztül. Ezek egyike nélkül a plugin NoClassDefFoundError: kotlin/... hibával elszáll.

  5. 5.Írd meg a plugin.yml-t

    Ugyanaz a fájl, mint egy Java-pluginnál: név, verzió, main (a Kotlin-osztály), api-version, parancsok és jogosultságok.

  6. 6.Build és teszt

    ./gradlew shadowJar (vagy build), másold a .jar fájlt a build/libs/ mappából egy tesztszerverre, és induláskor olvasd a konzolt.

Hogyan kerül a Kotlin a szerverre

  • Shade-eld: a Shadow Gradle-plugin a Kotlin standard könyvtárat és a többi futásidejű könyvtárat a .jar fájlodba másolja. Minden verzión működik, és ez a leggyakoribb választás.
  • libraries a plugin.yml-ben: a Spigot 1.16.5-től egy plugin felsorolhat Maven Central-könyvtárakat, amelyeket a szerver letölt és betölt neki. A .jar kicsi marad, de a szervernek az első induláskor internetkapcsolat kell.
  • Az általad hozzáadott könyvtárak: a kotlinx-coroutines külön könyvtár, nem része a standard könyvtárnak, ezért azt is bele kell csomagolni. Ha a saját csomagodba relocate-eled, elkerülöd az ütközést más pluginokkal, amelyek egy másik verziót csomagolnak.

Coroutine-ok és a főszál

A coroutine-ok tiszta módot adnak arra, hogy adatbázisból tölts be adatokat a szerver megakasztása nélkül, de a Bukkit API-t (világok, entitások, inventoryk) továbbra is a főszálról kell használni. A lassú munkát egy háttér-dispatcheren végezd, majd a játékhoz nyúlás előtt az ütemezővel válts vissza a szerverszálra. Kösd a coroutine scope-ot a pluginhoz, hogy az onDisable() metódusban leálljon.

Java vagy Kotlin?

FunkcióJavaKotlin
APIPaper / SpigotUgyanaz a Paper / Spigot API
BuildMaven vagy GradleGradle build.gradle.kts fájllal
Futásidejű extrákNincsKotlin standard könyvtár, becsomagolva vagy betöltve
Tutorialok és példákA legtöbbjükKevesebb, de a Java-példák közvetlenül átültethetők

A Codexe-szel

Válaszd a Bukkit/Spigot/Paper (Kotlin) típust. A Codexe egy Gradle-projektet generál build.gradle.kts fájllal, a Paper API-val, a Shadow pluginnal, amely becsomagolja, amit a szerver nem biztosít, és becsomagolt, relocate-elt coroutine-okkal, ha a kód használja őket. A plugint lefordítja, mielőtt Kész lenne, és a Kotlin-pluginok ugyanúgy kipróbálhatók tesztszerveren és ellenőriztethetők tesztjátékosokkal, mint a Java-pluginok. Lásd a Kotlin-plugingenerátort.

„Egy Paper 1.21.4 plugin Kotlinban Bounties néven: /bounty set <player> <amount> a Vaulton keresztül, a gyilkos kapja a jutalmat, a /bounty top a 10 legmagasabbat mutatja, SQLite-ban tárolva, coroutine-okkal az adatbázis-hozzáféréshez. Használj data classokat és extension functionöket, a Bukkit API-hívások maradjanak a főszálon.”

Kérdések

Lassabb egy Kotlin-plugin, mint egy Java-plugin?

Nincs érdemi különbség: mindkettő JVM-bájtkódra fordul. A .jar nagyobb, ha a standard könyvtár bele van csomagolva.

Keverhetem a Javát és a Kotlint egy pluginban?

Igen, a Gradle mindkettőt lefordítja ugyanabban a projektben, és a Kotlin-kód közvetlenül hívja a Java-osztályokat.

Miért kapok NoClassDefFoundError hibát a kotlin-osztályokra?

A Kotlin standard könyvtár nincs a .jar fájlban, vagy nincs betöltve. Buildelj a shadowJar paranccsal, és azt a .jar fájlt telepítsd, vagy add hozzá a könyvtárat a plugin.yml libraries listájához.

Készíts Kotlin-plugint

Ez a prompt küldésre készen nyílik meg:

“Egy Paper 1.21.4 plugin Kotlinban Bounties néven: /bounty set <player> <amount> a Vault gazdaságával, a gyilkos kapja a jutalmat, a /bounty top a 10 legmagasabbat mutatja, a vérdíjak SQLite-ban tárolva, coroutine-okkal az adatbázis-hozzáféréshez, a Bukkit API-hívások a főszálon, üzenetek a config.yml-ben.”

Generáld ezt a Codexe-szel
Hogyan készíts Minecraft-plugint Kotlinban (Paper) | Codexe