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 CodexeKrok po kroku
1.Utwórz projekt Gradle z Kotlin DSL
build.gradle.ktsz pluginemkotlin("jvm"), toolchainem Javy pasującym do twojej wersji Minecrafta (17, 21 lub 25) i repozytorium PaperMC.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.Napisz klasę główną
class MyPlugin : JavaPlugin()zoverride fun onEnable(). Rejestruj komendy i listenery dokładnie tak jak w Javie.4.Dołącz bibliotekę standardową Kotlina
Spakuj ją do pliku .jar pluginem Shadow albo pozwól serwerowi pobrać ją przy starcie przez listę
librarieswplugin.yml. Bez jednego z tych sposobów plugin wysypuje się zNoClassDefFoundError: kotlin/....5.Napisz plugin.yml
Ten sam plik co w pluginie w Javie: nazwa, wersja, main (klasa w Kotlinie),
api-version, komendy i uprawnienia.6.Zbuduj i przetestuj
./gradlew shadowJar(lubbuild), skopiuj plik .jar zbuild/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?
| Funkcja | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | To samo API Paper / Spigot |
| Build | Maven lub Gradle | Gradle z build.gradle.kts |
| Dodatki w czasie działania | Żadna | Biblioteka standardowa Kotlina, spakowana lub ładowana |
| Poradniki i przykłady | Większość z nich | Mniej, 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