Руководство
Как сделать плагин для 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 на сервер
- Встроить: плагин Shadow для Gradle копирует стандартную библиотеку Kotlin и другие библиотеки времени выполнения в ваш .jar. Это работает на любой версии и встречается чаще всего.
- libraries в plugin.yml: начиная со Spigot 1.16.5 плагин может перечислить библиотеки из Maven Central, которые сервер скачает и загрузит для него. .jar остаётся маленьким, но серверу нужен доступ в интернет при первом запуске.
- Библиотеки, которые вы добавляете: kotlinx-coroutines это отдельная библиотека, не часть стандартной, и её тоже нужно встроить. Перемещение (relocation) в ваш собственный пакет исключает конфликты с другими плагинами, которые встраивают другую версию.
Корутины и основной поток
Корутины удобно использовать, чтобы загружать данные из базы, не замораживая сервер, но Bukkit API (миры, сущности, инвентари) по-прежнему нужно вызывать из основного потока. Выполняйте медленную работу в фоновом диспетчере, а затем возвращайтесь в поток сервера через планировщик, прежде чем трогать игру. Привяжите область корутин к плагину, чтобы она отменялась в 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, Paper API, плагином Shadow, чтобы встроить то, чего нет на сервере, и встроенными с перемещением корутинами, если код их использует. Плагин компилируется, прежде чем получить статус «Готово», а плагины на Kotlin можно попробовать на тестовом сервере и проверить тестовыми игроками так же, как плагины на Java. См. генератор плагинов на Kotlin.
«Плагин для Paper 1.21.4 на Kotlin под названием Bounties: /bounty set <player> <amount> через Vault, убийца получает награду, /bounty top показывает 10 самых крупных, хранение в SQLite с корутинами для доступа к базе данных. Используйте data-классы и функции-расширения, вызовы 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