Руководство

Как сделать плагин для Minecraft на Kotlin

Обновлено: 18 октября 2026 г.

Kotlin работает на JVM, поэтому плагин на Kotlin использует тот же API Paper или Spigot, тот же plugin.yml и ту же папку plugins/, что и плагин на Java. Код получается короче и защищён от null. Единственное, о чём не нужно беспокоиться плагинам на Java, это стандартная библиотека Kotlin: сервер её не содержит, поэтому плагин должен принести её с собой.

Начните с этого примера.

Сгенерировать это в Codexe

Шаг за шагом

  1. 1.Создайте проект Gradle с Kotlin DSL

    build.gradle.kts с плагином kotlin("jvm"), тулчейн Java под вашу версию Minecraft (17, 21 или 25) и репозиторий PaperMC.

  2. 2.Добавьте API сервера

    compileOnly("io.papermc.paper:paper-api:<version>"). Как и в Java, сервер предоставляет его во время работы, поэтому он никогда не встраивается в сборку.

  3. 3.Напишите главный класс

    class MyPlugin : JavaPlugin() с override fun onEnable(). Команды и обработчики регистрируются точно так же, как в Java.

  4. 4.Добавьте стандартную библиотеку Kotlin

    Встройте её в .jar с помощью плагина Shadow или позвольте серверу скачать её при запуске через список libraries в plugin.yml. Без одного из этих вариантов плагин падает с NoClassDefFoundError: kotlin/....

  5. 5.Напишите plugin.yml

    Тот же файл, что и у плагина на Java: название, версия, main (класс Kotlin), api-version, команды и права.

  6. 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?

ФункцияJavaKotlin
APIPaper / SpigotТот же API Paper / Spigot
СобратьMaven или GradleGradle с 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
Как сделать плагин для Minecraft на Kotlin (Paper) | Codexe