Ръководство
Как да направиш 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, сървърът го осигурява по време на работа, затова никога не се пакетира.3.Напиши главния клас
class MyPlugin : JavaPlugin()сoverride fun onEnable(). Регистрирай командите и слушателите точно както в Java.4.Донеси стандартната библиотека на Kotlin
Пакетирай я в .jar файла с плъгина Shadow или остави сървъра да я изтегли при стартиране чрез списъка
librariesвplugin.yml. Без едното от двете плъгинът се проваля сNoClassDefFoundError: kotlin/....5.Напиши plugin.yml
Същият файл като при Java плъгин: име, версия, main (Kotlin класът),
api-version, команди и permissions.6.Компилирай и тествай
./gradlew shadowJar(илиbuild), копирай .jar файла отbuild/libs/на тестов сървър и прочети конзолата при стартиране.
Как Kotlin стига до сървъра
- Пакетирай я (shade): Gradle плъгинът Shadow копира стандартната библиотека на Kotlin и другите библиотеки за работа в твоя .jar. Работи на всяка версия и е най-честият избор.
- libraries в plugin.yml: от Spigot 1.16.5 плъгинът може да изброи библиотеки от Maven Central, които сървърът изтегля и зарежда за него. .jar файлът остава малък, но сървърът има нужда от интернет при първото стартиране.
- Библиотеки, които добавяш: kotlinx-coroutines е отделна библиотека, не част от стандартната, и също трябва да се пакетира. Преместването ѝ (relocate) в собствения ти пакет избягва конфликти с други плъгини, които пакетират друга версия.
Корутините и основната нишка
Корутините са чист начин да зареждаш данни от база данни, без да замразяваш сървъра, но Bukkit API (светове, същества, инвентари) пак трябва да се използва от основната нишка. Направи бавната работа на фонов dispatcher, после се върни в нишката на сървъра със scheduler-а, преди да пипаш играта. Обвържи обхвата на корутините с плъгина, за да се прекъсва в 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