Guide

Comment créer un plugin Minecraft en Kotlin

Mis à jour le 18 octobre 2026

Kotlin tourne sur la JVM, donc un plugin Kotlin utilise la même API Paper ou Spigot, le même plugin.yml et le même dossier plugins/ qu'un plugin Java. Le code est plus court et protégé contre les null. La seule chose dont les plugins Java n'ont pas à se soucier est la bibliothèque standard Kotlin : le serveur ne la fournit pas, le plugin doit donc l'apporter.

Partez de cet exemple.

Générer ceci avec Codexe

Étape par étape

  1. 1.Créez un projet Gradle avec le Kotlin DSL

    Un build.gradle.kts avec le plugin kotlin("jvm"), une toolchain Java qui correspond à votre version de Minecraft (17, 21 ou 25) et le dépôt PaperMC.

  2. 2.Ajoutez l'API du serveur

    compileOnly("io.papermc.paper:paper-api:<version>"). Comme en Java, le serveur la fournit à l'exécution, elle n'est donc jamais intégrée au .jar.

  3. 3.Écrire la classe principale

    class MyPlugin : JavaPlugin() avec override fun onEnable(). Enregistrez les commandes et les écouteurs exactement comme en Java.

  4. 4.Apportez la bibliothèque standard Kotlin

    Intégrez-la au .jar avec le plugin Shadow, ou laissez le serveur la télécharger au démarrage via la liste libraries de plugin.yml. Sans l'une de ces deux solutions, le plugin plante avec NoClassDefFoundError: kotlin/....

  5. 5.Écrire plugin.yml

    Le même fichier que pour un plugin Java : nom, version, main (la classe Kotlin), api-version, commandes et permissions.

  6. 6.Compiler et tester

    ./gradlew shadowJar (ou build), copiez le .jar depuis build/libs/ vers un serveur de test et lisez la console au démarrage.

Installer Kotlin sur le serveur

  • L'intégrer (shading) : le plugin Gradle Shadow copie la bibliothèque standard Kotlin et les autres bibliothèques d'exécution dans votre .jar. Cela fonctionne sur toutes les versions et c'est le choix le plus courant.
  • libraries dans plugin.yml : depuis Spigot 1.16.5, un plugin peut lister des bibliothèques de Maven Central que le serveur télécharge et charge pour lui. Le .jar reste léger, mais le serveur a besoin d'un accès à Internet au premier démarrage.
  • Les bibliothèques que vous ajoutez : kotlinx-coroutines est une bibliothèque séparée, qui ne fait pas partie de la bibliothèque standard, et doit elle aussi être intégrée. La relocaliser dans votre propre package évite les conflits avec d'autres plugins qui en intègrent une autre version.

Les coroutines et le thread principal

Les coroutines sont une façon propre de charger des données depuis une base de données sans figer le serveur, mais l'API Bukkit (mondes, entités, inventaires) doit toujours être utilisée depuis le thread principal. Faites le travail lent sur un dispatcher en arrière-plan, puis revenez sur le thread du serveur avec le scheduler avant de toucher au jeu. Liez le scope des coroutines au plugin pour qu'il soit annulé dans onDisable().

Java ou Kotlin ?

FonctionnalitéJavaKotlin
APIPaper / SpigotLa même API Paper / Spigot
BuildMaven ou GradleGradle avec build.gradle.kts
Éléments d'exécution en plusAucuneBibliothèque standard Kotlin, intégrée ou chargée
Tutoriels et exemplesLa plupartMoins nombreux, mais les exemples Java se transposent directement

Avec Codexe

Choisissez Bukkit/Spigot/Paper (Kotlin). Codexe génère un projet Gradle avec build.gradle.kts, l'API Paper, le plugin Shadow pour intégrer ce que le serveur ne fournit pas, et les coroutines intégrées et relocalisées quand le code les utilise. Il compile le plugin avant qu'il soit prêt, et les plugins Kotlin peuvent être essayés sur un serveur de test et vérifiés par les joueurs de test comme les plugins Java. Voir le générateur de plugins Kotlin.

« Un plugin Paper 1.21.4 en Kotlin appelé Bounties : /bounty set <player> <amount> via Vault, le tueur reçoit la récompense, /bounty top affiche les 10 plus élevées, stockage dans SQLite avec des coroutines pour l'accès à la base de données. Utiliser des data classes et des fonctions d'extension, garder les appels à l'API Bukkit sur le thread principal. »

Questions

Un plugin Kotlin est-il plus lent qu'un plugin Java ?

Aucune différence notable : les deux se compilent en bytecode JVM. Le .jar est plus lourd quand la bibliothèque standard est intégrée.

Puis-je mélanger Java et Kotlin dans un même plugin ?

Oui, Gradle compile les deux dans le même projet, et le code Kotlin appelle directement les classes Java.

Pourquoi une NoClassDefFoundError pour les classes kotlin ?

La bibliothèque standard Kotlin n'est pas dans le .jar ou n'est pas chargée. Compilez avec shadowJar et installez ce .jar, ou ajoutez la bibliothèque dans libraries de plugin.yml.

Créer un plugin Kotlin

Ce prompt s'ouvre prêt à être envoyé :

“Un plugin Paper 1.21.4 en Kotlin appelé Bounties : /bounty set <player> <amount> avec l'économie Vault, le tueur reçoit la récompense, /bounty top affiche les 10 plus élevées, primes stockées dans SQLite avec des coroutines pour l'accès à la base de données, appels à l'API Bukkit sur le thread principal, messages dans config.yml.”

Générer ceci avec Codexe
Comment créer un plugin Minecraft en Kotlin (Paper) | Codexe