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.Créez un projet Gradle avec le Kotlin DSL
Un
build.gradle.ktsavec le pluginkotlin("jvm"), une toolchain Java qui correspond à votre version de Minecraft (17, 21 ou 25) et le dépôt PaperMC.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.Écrire la classe principale
class MyPlugin : JavaPlugin()avecoverride fun onEnable(). Enregistrez les commandes et les écouteurs exactement comme en Java.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
librariesdeplugin.yml. Sans l'une de ces deux solutions, le plugin plante avecNoClassDefFoundError: kotlin/....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.Compiler et tester
./gradlew shadowJar(oubuild), copiez le .jar depuisbuild/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é | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | La même API Paper / Spigot |
| Build | Maven ou Gradle | Gradle avec build.gradle.kts |
| Éléments d'exécution en plus | Aucune | Bibliothèque standard Kotlin, intégrée ou chargée |
| Tutoriels et exemples | La plupart | Moins 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