Водич
Како направити Minecraft плагин у Kotlin-у
Ажурирано 18. октобар 2026.
Kotlin ради на JVM-у, па Kotlin плагин користи исти Paper или Spigot API, исти plugin.yml и исти фолдер plugins/ као Java плагин. Код је краћи и безбедан од null вредности. Једина ствар о којој Java плагини не морају да брину је Kotlin стандардна библиотека: сервер је не испоручује, па плагин мора да је донесе.
Крени од овог примера.
Генериши ово уз CodexeКорак по корак
1.Направи Gradle пројекат са Kotlin DSL-ом
build.gradle.ktsса плагиномkotlin("jvm"), Java toolchain-ом који одговара твојој Minecraft верзији (17, 21 или 25) и PaperMC репозиторијумом.2.Додај API сервера
compileOnly("io.papermc.paper:paper-api:<version>"). Као и у Java-и, сервер га обезбеђује у току рада, па се никада не пакује у .jar.3.Напиши главну класу
class MyPlugin : JavaPlugin()саoverride fun onEnable(). Команде и listener-е региструј тачно као у Java-и.4.Донеси Kotlin стандардну библиотеку
Спакуј је у .jar уз Shadow плагин или пусти сервер да је преузме при покретању преко листе
librariesуplugin.yml. Без једног од та два плагин пада саNoClassDefFoundError: kotlin/....5.Напиши plugin.yml
Исти фајл као код Java плагина: name, version, main (Kotlin класа),
api-version, команде и дозволе.6.Билдуј и тестирај
./gradlew shadowJar(илиbuild), копирај .jar изbuild/libs/на тест сервер и прочитај конзолу при покретању.
Како да Kotlin стигне на сервер
- Shade-уј га: Shadow Gradle плагин копира Kotlin стандардну библиотеку и друге библиотеке за рад у твој .jar. Ради на свакој верзији и најчешћи је избор.
- libraries у plugin.yml: од Spigot-а 1.16.5 плагин може да наведе библиотеке са Maven Central-а које сервер преузима и учитава за њега. .jar остаје мали, али серверу треба приступ интернету при првом покретању.
- Библиотеке које додајеш: kotlinx-coroutines је посебна библиотека, није део стандардне библиотеке, и такође мора да се спакује. Релоцирање у твој сопствени пакет спречава сукобе са другим плагинима који пакују другу верзију.
Корутине и главна нит
Корутине су чист начин да учиташ податке из базе а да не замрзнеш сервер, али Bukkit API (светови, ентитети, инвентари) и даље мора да се користи из главне нити. Спор посао ради на позадинском dispatcher-у, па се scheduler-ом врати на нит сервера пре него што дираш игру. Вежи scope корутина за плагин, да би био отказан у onDisable().
Java или Kotlin?
| Функција | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Исти Paper / Spigot API |
| Билд | Maven или Gradle | Gradle са build.gradle.kts |
| Додаци за рад | Ништа | Kotlin стандардна библиотека, спакована или учитана |
| Туторијали и примери | Највише њих | Мање, али Java примери се директно преводе |
Уз Codexe
Изабери Bukkit/Spigot/Paper (Kotlin). Codexe генерише Gradle пројекат са build.gradle.kts, Paper API-јем, Shadow плагином за паковање онога што сервер не обезбеђује и корутинама које се пакују и релоцирају кад их код користи. Компајлира плагин пре него што буде Спремно, а Kotlin плагини могу да се испробају на тест серверу и да их провере тест играчи као и Java плагине. Погледај генератор Kotlin плагина.
„Paper 1.21.4 плагин у Kotlin-у под називом Bounties: /bounty set <player> <amount> преко Vault-а, убица добија награду, /bounty top приказује 10 највећих, чува се у SQLite-у уз корутине за приступ бази. Користи data класе и extension функције, Bukkit API позиве држи на главној нити.“
Питања
Да ли је Kotlin плагин спорији од Java плагина?
Нема значајне разлике: оба се компајлирају у JVM бајткод. .jar је већи кад се стандардна библиотека спакује у њега.
Могу ли да мешам Java и Kotlin у једном плагину?
Да, Gradle компајлира оба у истом пројекту, а Kotlin код директно позива Java класе.
Зашто NoClassDefFoundError за kotlin класе?
Kotlin стандардна библиотека није у .jar-у или није учитана. Направи билд са shadowJar и инсталирај тај .jar или додај библиотеку у libraries у plugin.yml.
Направи Kotlin плагин
Овај промпт се отвара спреман за слање:
“Paper 1.21.4 плагин у Kotlin-у под називом Bounties: /bounty set <player> <amount> уз Vault економију, убица добија награду, /bounty top приказује 10 највећих, уцене се чувају у SQLite-у уз корутине за приступ бази, Bukkit API позиви на главној нити, поруке у config.yml.”
Генериши ово уз Codexe