Poradnik

Jak zrobić plugin do Minecrafta w Kotlinie

Zaktualizowano: 18 października 2026

Kotlin działa na JVM, więc plugin w Kotlinie korzysta z tego samego API Paper lub Spigot, tego samego plugin.yml i tego samego folderu plugins/ co plugin w Javie. Kod jest krótszy i bezpieczny pod względem null. Jedyna rzecz, o którą pluginy w Javie nie muszą się martwić, to biblioteka standardowa Kotlina: serwer jej nie zawiera, więc plugin musi ją przynieść ze sobą.

Zacznij od tego przykładu.

Wygeneruj to w Codexe

Krok po kroku

  1. 1.Utwórz projekt Gradle z Kotlin DSL

    build.gradle.kts z pluginem kotlin("jvm"), toolchainem Javy pasującym do twojej wersji Minecrafta (17, 21 lub 25) i repozytorium PaperMC.

  2. 2.Dodaj API serwera

    compileOnly("io.papermc.paper:paper-api:<version>"). Tak jak w Javie, serwer dostarcza je w czasie działania, więc nigdy nie jest dołączane do pliku.

  3. 3.Napisz klasę główną

    class MyPlugin : JavaPlugin() z override fun onEnable(). Rejestruj komendy i listenery dokładnie tak jak w Javie.

  4. 4.Dołącz bibliotekę standardową Kotlina

    Spakuj ją do pliku .jar pluginem Shadow albo pozwól serwerowi pobrać ją przy starcie przez listę libraries w plugin.yml. Bez jednego z tych sposobów plugin wysypuje się z NoClassDefFoundError: kotlin/....

  5. 5.Napisz plugin.yml

    Ten sam plik co w pluginie w Javie: nazwa, wersja, main (klasa w Kotlinie), api-version, komendy i uprawnienia.

  6. 6.Zbuduj i przetestuj

    ./gradlew shadowJar (lub build), skopiuj plik .jar z build/libs/ na serwer testowy i przeczytaj konsolę przy starcie.

Jak dostarczyć Kotlina na serwer

  • Spakuj go: plugin Shadow dla Gradle kopiuje bibliotekę standardową Kotlina i inne biblioteki uruchomieniowe do twojego pliku .jar. Działa w każdej wersji i jest najczęstszym wyborem.
  • libraries w plugin.yml: od Spigot 1.16.5 plugin może wymienić biblioteki z Maven Central, które serwer pobiera i ładuje za niego. Plik .jar zostaje mały, ale serwer potrzebuje dostępu do internetu przy pierwszym starcie.
  • Biblioteki, które dodajesz: kotlinx-coroutines to osobna biblioteka, nie część biblioteki standardowej, i też musi zostać spakowana. Przeniesienie (relokacja) jej do własnego pakietu zapobiega konfliktom z innymi pluginami, które pakują inną wersję.

Korutyny i główny wątek

Korutyny to elegancki sposób na wczytywanie danych z bazy bez zamrażania serwera, ale API Bukkit (światy, byty, ekwipunki) nadal trzeba wywoływać z głównego wątku. Wolną pracę wykonuj na dispatcherze w tle, a przed dotknięciem gry wróć schedulerem na wątek serwera. Powiąż zakres korutyn z pluginem, żeby był anulowany w onDisable().

Java czy Kotlin?

FunkcjaJavaKotlin
APIPaper / SpigotTo samo API Paper / Spigot
BuildMaven lub GradleGradle z build.gradle.kts
Dodatki w czasie działaniaŻadnaBiblioteka standardowa Kotlina, spakowana lub ładowana
Poradniki i przykładyWiększość z nichMniej, ale przykłady w Javie przekładają się bezpośrednio

Z Codexe

Wybierz Bukkit/Spigot/Paper (Kotlin). Codexe generuje projekt Gradle z build.gradle.kts, API Paper, pluginem Shadow do spakowania tego, czego serwer nie dostarcza, oraz korutynami spakowanymi i przeniesionymi, gdy kod ich używa. Kompiluje plugin, zanim będzie gotowy, a pluginy w Kotlinie można wypróbować na serwerze testowym i sprawdzić graczami testowymi tak samo jak te w Javie. Zobacz generator pluginów w Kotlinie.

„Plugin na Paper 1.21.4 w Kotlinie o nazwie Bounties: /bounty set <player> <amount> przez Vault, zabójca dostaje nagrodę, /bounty top pokazuje 10 najwyższych, zapis w SQLite z korutynami do dostępu do bazy. Użyj data class i funkcji rozszerzających, wywołania API Bukkit trzymaj na głównym wątku.”

Pytania

Czy plugin w Kotlinie jest wolniejszy niż w Javie?

Nie ma istotnej różnicy: oba kompilują się do bajtkodu JVM. Plik .jar jest większy, gdy spakowana jest biblioteka standardowa.

Czy mogę mieszać Javę i Kotlin w jednym pluginie?

Tak, Gradle kompiluje oba w tym samym projekcie, a kod w Kotlinie wywołuje klasy Javy bezpośrednio.

Skąd NoClassDefFoundError dla klas kotlin?

Biblioteki standardowej Kotlina nie ma w pliku .jar albo nie została załadowana. Zbuduj przez shadowJar i zainstaluj ten plik .jar albo dodaj bibliotekę do libraries w plugin.yml.

Zrób plugin w Kotlinie

Ten prompt otworzy się gotowy do wysłania:

“Plugin na Paper 1.21.4 w Kotlinie o nazwie Bounties: /bounty set <player> <amount> z użyciem ekonomii Vault, zabójca dostaje nagrodę, /bounty top pokazuje 10 najwyższych, nagrody zapisywane w SQLite z korutynami do dostępu do bazy, wywołania API Bukkit na głównym wątku, wiadomości w config.yml.”

Wygeneruj to w Codexe
Jak zrobić plugin do Minecrafta w Kotlinie (Paper) | Codexe