Vodič
Kako napraviti Minecraft plugin u Kotlinu
Ažurirano 18. listopada 2026.
Kotlin radi na JVM-u, pa Kotlin plugin koristi isti Paper ili Spigot API, isti plugin.yml i istu mapu plugins/ kao i Java plugin. Kod je kraći i null-safe. Jedina stvar o kojoj Java pluginovi ne moraju brinuti je Kotlin standardna biblioteka: poslužitelj je ne isporučuje, pa je plugin mora donijeti sa sobom.
Kreni od ovog primjera.
Generiraj ovo uz CodexeKorak po korak
1.Stvori Gradle projekt s Kotlin DSL-om
build.gradle.ktss pluginomkotlin("jvm"), Java toolchainom koji odgovara tvojoj Minecraft verziji (17, 21 ili 25) i PaperMC repozitorijem.2.Dodaj API poslužitelja
compileOnly("io.papermc.paper:paper-api:<version>"). Kao i u Javi, poslužitelj ga pruža pri pokretanju, pa se nikad ne pakira u .jar.3.Napiši glavnu klasu
class MyPlugin : JavaPlugin()soverride fun onEnable(). Naredbe i listenere registriraj točno kao u Javi.4.Donesi Kotlin standardnu biblioteku
Zapakiraj je u .jar pomoću plugina Shadow ili pusti poslužitelj da je preuzme pri pokretanju preko popisa
librariesuplugin.yml. Bez jednog od toga plugin pada sNoClassDefFoundError: kotlin/....5.Napiši plugin.yml
Ista datoteka kao kod Java plugina: ime, verzija, main (Kotlin klasa),
api-version, naredbe i dopuštenja.6.Build i testiranje
./gradlew shadowJar(ilibuild), kopiraj .jar izbuild/libs/na testni poslužitelj i čitaj konzolu pri pokretanju.
Kako dovesti Kotlin na poslužitelj
- Shadeaj je: Gradle plugin Shadow kopira Kotlin standardnu biblioteku i ostale biblioteke za izvođenje u tvoj .jar. Radi na svakoj verziji i najčešći je izbor.
- libraries u plugin.yml: od Spigota 1.16.5 plugin može navesti biblioteke s Maven Centrala koje poslužitelj preuzima i učitava za njega. .jar ostaje malen, ali poslužitelju pri prvom pokretanju treba pristup internetu.
- Biblioteke koje dodaješ: kotlinx-coroutines je zasebna biblioteka, nije dio standardne biblioteke i također se mora zapakirati. Ako je relociraš u vlastiti paket, izbjegavaš sukobe s drugim pluginovima koji pakiraju drugu verziju.
Korutine i glavna nit
Korutine su čist način za učitavanje podataka iz baze bez zamrzavanja poslužitelja, ali Bukkit API (svjetovi, entiteti, inventari) i dalje se mora koristiti iz glavne niti. Spori posao obavi na pozadinskom dispatcheru, a zatim se schedulerom vrati na nit poslužitelja prije nego što diraš igru. Veži scope korutina uz plugin, kako bi se otkazao u onDisable().
Java ili Kotlin?
| Značajka | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Isti Paper / Spigot API |
| Build | Maven ili Gradle | Gradle s build.gradle.kts |
| Dodaci za izvođenje | Nikakvo | Kotlin standardna biblioteka, zapakirana ili učitana |
| Tutorijali i primjeri | Većina njih | Manje, ali Java primjeri izravno se prevode |
S Codexeom
Odaberi Bukkit/Spigot/Paper (Kotlin). Codexe generira Gradle projekt s build.gradle.kts, Paper API-jem, pluginom Shadow za pakiranje onoga što poslužitelj ne pruža te korutinama zapakiranim i relociranim kad ih kod koristi. Kompajlira plugin prije nego što je Spremno, a Kotlin pluginovi mogu se isprobati na testnom poslužitelju i provjeriti testnim igračima kao i Java pluginovi. Pogledaj generator Kotlin pluginova.
„Paper 1.21.4 plugin u Kotlinu pod nazivom Bounties: /bounty set <player> <amount> preko Vaulta, ubojica dobiva nagradu, /bounty top prikazuje 10 najvećih, spremljeno u SQLite s korutinama za pristup bazi. Koristi data klase i extension funkcije, pozive Bukkit API-ja drži na glavnoj niti.”
Pitanja
Je li Kotlin plugin sporiji od Java plugina?
Nema bitne razlike: oba se kompajliraju u JVM bytecode. .jar je veći kad je standardna biblioteka zapakirana.
Mogu li miješati Javu i Kotlin u jednom pluginu?
Da, Gradle kompajlira oba u istom projektu, a Kotlin kod izravno poziva Java klase.
Zašto NoClassDefFoundError za kotlin klase?
Kotlin standardna biblioteka nije u .jar datoteci ili nije učitana. Napravi build sa shadowJar i instaliraj taj .jar ili dodaj biblioteku u libraries u plugin.yml.
Napravi Kotlin plugin
Ovaj prompt otvara se spreman za slanje:
“Paper 1.21.4 plugin u Kotlinu pod nazivom Bounties: /bounty set <player> <amount> uz Vault ekonomiju, ubojica dobiva nagradu, /bounty top prikazuje 10 najvećih, ucjene se spremaju u SQLite s korutinama za pristup bazi, pozivi Bukkit API-ja na glavnoj niti, poruke u config.yml.”
Generiraj ovo uz Codexe