Ú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-szelLépésről lépésre
1.Hozz létre egy Gradle-projektet Kotlin DSL-lel
Egy
build.gradle.ktsakotlin("jvm")pluginnal, a Minecraft-verziódhoz illő Java toolchainnel (17, 21 vagy 25) és a PaperMC repositoryval.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.Í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.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.ymllibrarieslistáján keresztül. Ezek egyike nélkül a pluginNoClassDefFoundError: kotlin/...hibával elszáll.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.Build és teszt
./gradlew shadowJar(vagybuild), másold a .jar fájlt abuild/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ó | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Ugyanaz a Paper / Spigot API |
| Build | Maven vagy Gradle | Gradle build.gradle.kts fájllal |
| Futásidejű extrák | Nincs | Kotlin standard könyvtár, becsomagolva vagy betöltve |
| Tutorialok és példák | A legtöbbjük | Kevesebb, 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