Návod

Jak vytvořit plugin pro Minecraft v Kotlinu

Aktualizováno 18. října 2026

Kotlin běží na JVM, takže plugin v Kotlinu používá stejné API Paperu nebo Spigotu, stejný plugin.yml a stejnou složku plugins/ jako plugin v Javě. Kód je kratší a bezpečný vůči null. Jediná věc, kterou pluginy v Javě řešit nemusí, je standardní knihovna Kotlinu: server ji nedodává, takže si ji plugin musí přinést.

Začni tímto příkladem.

Vygeneruj to s Codexe

Krok za krokem

  1. 1.Vytvoř projekt Gradle s Kotlin DSL

    build.gradle.kts s pluginem kotlin("jvm"), Java toolchainem odpovídajícím tvé verzi Minecraftu (17, 21 nebo 25) a repozitářem PaperMC.

  2. 2.Přidej API serveru

    compileOnly("io.papermc.paper:paper-api:<version>"). Stejně jako v Javě ho za běhu dodá server, takže se nikdy nebalí do pluginu.

  3. 3.Napiš hlavní třídu

    class MyPlugin : JavaPlugin() s override fun onEnable(). Příkazy a posluchače registruj úplně stejně jako v Javě.

  4. 4.Přibal standardní knihovnu Kotlinu

    Zabal ji do .jar pluginem Shadow, nebo ji nech server stáhnout při startu přes seznam libraries v plugin.yml. Bez jednoho z nich plugin spadne s NoClassDefFoundError: kotlin/....

  5. 5.Napiš plugin.yml

    Stejný soubor jako u pluginu v Javě: name, version, main (třída v Kotlinu), api-version, příkazy a oprávnění.

  6. 6.Sestav a otestuj

    ./gradlew shadowJar (nebo build), zkopíruj .jar z build/libs/ na testovací server a při startu si přečti konzoli.

Jak dostat Kotlin na server

  • Zabalit ho: Gradle plugin Shadow zkopíruje standardní knihovnu Kotlinu a další knihovny pro běh do tvého .jar. Funguje na každé verzi a je to nejčastější volba.
  • libraries v plugin.yml: od Spigotu 1.16.5 může plugin uvést knihovny z Maven Central, které mu server stáhne a načte. .jar zůstane malý, ale server při prvním startu potřebuje přístup k internetu.
  • Knihovny, které přidáš: kotlinx-coroutines je samostatná knihovna, ne součást standardní knihovny, a musí se zabalit taky. Když ji přesuneš (relocate) do vlastního balíčku, předejdeš konfliktům s jinými pluginy, které přibalují jinou verzi.

Korutiny a hlavní vlákno

Korutiny jsou čistý způsob, jak načíst data z databáze, aniž by server zamrzl, ale API Bukkitu (světy, entity, inventáře) se pořád musí používat z hlavního vlákna. Pomalou práci dělej na dispatcheru na pozadí a před sáhnutím na hru se plánovačem přepni zpátky do vlákna serveru. Scope korutin svaž s pluginem, aby se v onDisable() zrušil.

Java, nebo Kotlin?

FunkceJavaKotlin
APIPaper / SpigotStejné API Paperu / Spigotu
SestavitMaven nebo GradleGradle s build.gradle.kts
Navíc za běhuŽádnéStandardní knihovna Kotlinu, přibalená nebo načtená
Návody a příkladyVětšina z nichMéně, ale příklady v Javě jdou přímo převést

S Codexe

Vyber Bukkit/Spigot/Paper (Kotlin). Codexe vygeneruje projekt Gradle s build.gradle.kts, API Paperu, pluginem Shadow, který zabalí to, co server nedodává, a korutinami přibalenými a přesunutými, pokud je kód používá. Plugin zkompiluje, než je Ready, a pluginy v Kotlinu jde stejně jako ty v Javě vyzkoušet na testovacím serveru a nechat zkontrolovat testovacími hráči. Viz generátor pluginů v Kotlinu.

„Plugin pro Paper 1.21.4 v Kotlinu jménem Bounties: /bounty set <player> <amount> přes Vault, odměnu dostane ten, kdo hráče zabije, /bounty top ukáže 10 nejvyšších, uložené v SQLite s korutinami pro přístup k databázi. Použij data classes a extension functions, volání API Bukkitu nech na hlavním vlákně.“

Otázky

Je plugin v Kotlinu pomalejší než plugin v Javě?

Žádný podstatný rozdíl: obojí se kompiluje do bajtkódu JVM. .jar je větší, když je v něm přibalená standardní knihovna.

Můžu v jednom pluginu míchat Javu a Kotlin?

Ano, Gradle zkompiluje obojí v jednom projektu a kód v Kotlinu volá třídy v Javě přímo.

Proč NoClassDefFoundError u tříd kotlin?

Standardní knihovna Kotlinu není v .jar nebo se nenačetla. Sestav přes shadowJar a nainstaluj ten .jar, nebo přidej knihovnu do libraries v plugin.yml.

Vytvoř plugin v Kotlinu

Toto zadání se otevře připravené k odeslání:

“Plugin pro Paper 1.21.4 v Kotlinu jménem Bounties: /bounty set <player> <amount> s ekonomikou Vault, odměnu dostane ten, kdo hráče zabije, /bounty top ukáže 10 nejvyšších, odměny uložené v SQLite s korutinami pro přístup k databázi, volání API Bukkitu na hlavním vlákně, zprávy v config.yml.”

Vygeneruj to s Codexe
Jak vytvořit plugin pro Minecraft v Kotlinu (Paper) | Codexe