Посібник
Як створити плагін Minecraft на Kotlin
Оновлено 18 жовтня 2026 р.
Kotlin працює на JVM, тож плагін на Kotlin використовує той самий API Paper або Spigot, той самий plugin.yml і ту саму теку plugins/, що й плагін на Java. Код коротший і безпечний щодо null. Єдине, про що не мусять турбуватися плагіни на Java, - це стандартна бібліотека Kotlin: сервер її не постачає, тож плагін має принести її із собою.
Почніть із цього прикладу.
Згенерувати це в CodexeКрок за кроком
1.Створіть проєкт Gradle з Kotlin DSL
build.gradle.ktsз плагіномkotlin("jvm"), тулчейном Java, що відповідає вашій версії 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, команди й дозволи.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 - окрема бібліотека, а не частина стандартної, і її теж треба вбудувати. Перенесення (relocate) у ваш власний пакет запобігає конфліктам з іншими плагінами, що вбудовують іншу версію.
Корутини й головний потік
Корутини - охайний спосіб завантажувати дані з бази, не заморожуючи сервер, але API Bukkit (світи, сутності, інвентарі) все одно треба використовувати з головного потоку. Виконуйте повільну роботу на фоновому диспетчері, а потім повертайтеся в потік сервера через планувальник, перш ніж чіпати гру. Прив'яжіть область корутин до плагіна, щоб її скасовувало в onDisable().
Java чи Kotlin?
| Функція | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Той самий API Paper / Spigot |
| Зібрати | Maven або Gradle | Gradle з build.gradle.kts |
| Додатково під час роботи | Немає | Стандартна бібліотека Kotlin, вбудована або завантажувана |
| Посібники й приклади | Більшість із них | Менше, але приклади на Java переносяться напряму |
З Codexe
Виберіть Bukkit/Spigot/Paper (Kotlin). Codexe генерує проєкт Gradle з build.gradle.kts, API Paper, плагіном Shadow, щоб вбудувати те, чого не надає сервер, і корутинами, вбудованими й перенесеними, коли код їх використовує. Плагін компілюється, перш ніж отримає статус «Готово», а плагіни на Kotlin можна спробувати на тестовому сервері й перевірити тестовими гравцями так само, як плагіни на Java. Див. генератор плагінів на Kotlin.
«Плагін для Paper 1.21.4 на Kotlin під назвою Bounties: /bounty set <player> <amount> через Vault, вбивця отримує нагороду, /bounty top показує 10 найбільших, дані в SQLite з корутинами для доступу до бази. Використовуй data-класи й функції розширення, тримай виклики API Bukkit у головному потоці.»
Запитання
Чи повільніший плагін на 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 з корутинами для доступу до бази, виклики API Bukkit у головному потоці, повідомлення в config.yml.”
Згенерувати це в Codexe