Водич

Како направити Minecraft плагин у Kotlin-у

Ажурирано 18. октобар 2026.

Kotlin ради на JVM-у, па Kotlin плагин користи исти Paper или Spigot API, исти plugin.yml и исти фолдер plugins/ као Java плагин. Код је краћи и безбедан од null вредности. Једина ствар о којој Java плагини не морају да брину је Kotlin стандардна библиотека: сервер је не испоручује, па плагин мора да је донесе.

Крени од овог примера.

Генериши ово уз Codexe

Корак по корак

  1. 1.Направи Gradle пројекат са Kotlin DSL-ом

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

  2. 2.Додај API сервера

    compileOnly("io.papermc.paper:paper-api:<version>"). Као и у Java-и, сервер га обезбеђује у току рада, па се никада не пакује у .jar.

  3. 3.Напиши главну класу

    class MyPlugin : JavaPlugin() са override fun onEnable(). Команде и listener-е региструј тачно као у Java-и.

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

    Спакуј је у .jar уз Shadow плагин или пусти сервер да је преузме при покретању преко листе libraries у plugin.yml. Без једног од та два плагин пада са NoClassDefFoundError: kotlin/....

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

    Исти фајл као код Java плагина: name, version, main (Kotlin класа), api-version, команде и дозволе.

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

ФункцијаJavaKotlin
APIPaper / SpigotИсти Paper / Spigot API
Билд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 класе и 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
Како направити Minecraft плагин у Kotlin-у (Paper) | Codexe