Anleitung

So erstellst du ein Minecraft-Plugin in Kotlin

Aktualisiert am 18. Oktober 2026

Kotlin läuft auf der JVM, daher nutzt ein Kotlin-Plugin dieselbe Paper- oder Spigot-API, dieselbe plugin.yml und denselben Ordner plugins/ wie ein Java-Plugin. Der Code ist kürzer und null-sicher. Das Einzige, worum sich Java-Plugins nicht kümmern müssen, ist die Kotlin-Standardbibliothek: Der Server liefert sie nicht mit, also muss das Plugin sie mitbringen.

Starte mit diesem Beispiel.

Mit Codexe erstellen

Schritt für Schritt

  1. 1.Erstelle ein Gradle-Projekt mit Kotlin DSL

    Eine build.gradle.kts mit dem Plugin kotlin("jvm"), einer Java-Toolchain passend zu deiner Minecraft-Version (17, 21 oder 25) und dem PaperMC-Repository.

  2. 2.Füge die Server-API hinzu

    compileOnly("io.papermc.paper:paper-api:<version>"). Wie bei Java stellt der Server sie zur Laufzeit bereit, sie wird also nie mitgepackt.

  3. 3.Die Hauptklasse schreiben

    class MyPlugin : JavaPlugin() mit override fun onEnable(). Registriere Befehle und Listener genau wie in Java.

  4. 4.Bring die Kotlin-Standardbibliothek mit

    Pack sie mit dem Shadow-Plugin in die .jar oder lass den Server sie beim Start über die Liste libraries in der plugin.yml herunterladen. Ohne eines von beiden scheitert das Plugin mit NoClassDefFoundError: kotlin/....

  5. 5.plugin.yml schreiben

    Dieselbe Datei wie bei einem Java-Plugin: Name, Version, main (die Kotlin-Klasse), api-version, Befehle und Berechtigungen.

  6. 6.Bauen und testen

    ./gradlew shadowJar (oder build), kopiere die .jar aus build/libs/ auf einen Testserver und lies beim Start die Konsole.

Kotlin auf den Server bringen

  • Shaden: Das Gradle-Plugin Shadow kopiert die Kotlin-Standardbibliothek und andere Laufzeitbibliotheken in deine .jar. Das funktioniert in jeder Version und ist die häufigste Wahl.
  • libraries in der plugin.yml: Ab Spigot 1.16.5 kann ein Plugin Bibliotheken aus Maven Central auflisten, die der Server für es herunterlädt und lädt. Die .jar bleibt klein, aber der Server braucht beim ersten Start Internetzugang.
  • Bibliotheken, die du hinzufügst: kotlinx-coroutines ist eine eigene Bibliothek, nicht Teil der Standardbibliothek, und muss ebenfalls mitgepackt werden. Wenn du sie in dein eigenes Paket verschiebst (Relocation), vermeidest du Konflikte mit anderen Plugins, die eine andere Version mitbringen.

Coroutines und der Hauptthread

Coroutines sind ein sauberer Weg, Daten aus einer Datenbank zu laden, ohne den Server einzufrieren, aber die Bukkit-API (Welten, Entities, Inventare) muss trotzdem vom Hauptthread aus genutzt werden. Erledige die langsame Arbeit auf einem Hintergrund-Dispatcher und wechsle dann mit dem Scheduler zurück auf den Server-Thread, bevor du das Spiel anfasst. Binde den Coroutine-Scope an das Plugin, damit er in onDisable() abgebrochen wird.

Java oder Kotlin?

FeatureJavaKotlin
APIPaper / SpigotDieselbe Paper- / Spigot-API
BuildMaven oder GradleGradle mit build.gradle.kts
Zusätzlich zur LaufzeitKeineKotlin-Standardbibliothek, mitgepackt oder geladen
Tutorials und BeispieleDie meistenWeniger, aber Java-Beispiele lassen sich direkt übertragen

Mit Codexe

Wähle Bukkit/Spigot/Paper (Kotlin). Codexe generiert ein Gradle-Projekt mit build.gradle.kts, der Paper-API, dem Shadow-Plugin, das mitpackt, was der Server nicht bereitstellt, und Coroutines, die mitgepackt und verschoben werden, wenn der Code sie nutzt. Das Plugin wird kompiliert, bevor es als Ready gilt, und Kotlin-Plugins lassen sich wie Java-Plugins auf einem Testserver ausprobieren und von Testspielern prüfen. Siehe den Kotlin-Plugin-Generator.

„Ein Plugin für Paper 1.21.4 in Kotlin namens Bounties: /bounty set <player> <amount> über Vault, der Mörder bekommt die Belohnung, /bounty top zeigt die 10 höchsten, gespeichert in SQLite mit Coroutines für den Datenbankzugriff. Nutze Data Classes und Extension Functions, halte die Aufrufe der Bukkit-API auf dem Hauptthread.“

Fragen

Ist ein Kotlin-Plugin langsamer als ein Java-Plugin?

Kein nennenswerter Unterschied: Beide werden zu JVM-Bytecode kompiliert. Die .jar ist größer, wenn die Standardbibliothek mitgepackt wird.

Kann ich Java und Kotlin in einem Plugin mischen?

Ja, Gradle kompiliert beides im selben Projekt, und Kotlin-Code ruft Java-Klassen direkt auf.

Warum NoClassDefFoundError bei Kotlin-Klassen?

Die Kotlin-Standardbibliothek ist nicht in der .jar oder wird nicht geladen. Baue mit shadowJar und installiere diese .jar, oder füge die Bibliothek unter libraries in der plugin.yml hinzu.

Erstelle ein Kotlin-Plugin

Dieser Prompt öffnet sich versandfertig:

“Ein Plugin für Paper 1.21.4 in Kotlin namens Bounties: /bounty set <player> <amount> über die Vault-Economy, der Mörder bekommt die Belohnung, /bounty top zeigt die 10 höchsten, Kopfgelder in SQLite gespeichert mit Coroutines für den Datenbankzugriff, Aufrufe der Bukkit-API auf dem Hauptthread, Nachrichten in der config.yml.”

Mit Codexe erstellen
So erstellst du ein Minecraft-Plugin in Kotlin (Paper) | Codexe