Un plugin sous Spigot – Pré-requis et bases
Même si cela peut paraître difficile, créer un plugin sous Spigot est assez simple lorsqu’on a déjà les bases en Java ou même d’un autre langage de programmation. Dans le cas contraire, il suffit d’être patient, galérer, recommencer, aimer apprendre et surtout aimer lire. Ce guide vous apprendra à installer le nécessaire pour commencer à développer votre propre plugin. Cependant, si vous n’avez jamais géré ou installé un serveur Minecraft, il est peut-être un peu trop tôt pour commencer à développer des plugins.
Sachez que Spigot reprend les sources de Bukkit, donc toutes les fonctionnalités de Bukkit sont disponibles sur Spigot.
Les différentes méthodes pour apprendre le Java
Tout d’abord, il faut savoir un minimum lire l’anglais, beaucoup de tutoriels (de bonne qualité) sont dans cette langue.
- La méthode la plus longue, selon moi, est de faire un bête copier/coller de ce que vous pouvez voir dans des tutoriels et de le réécrire à votre sauce. Au fil du temps, vous apprendrez de vos erreurs, de vos tests et de vos réussites. Il suffit de combiner ce que vous avez déjà vu pour ensuite créer un ensemble cohérent. Seulement, il faut avoir beaucoup de patience et ne pas avoir peur d’échouer.
- Sinon il suffit d’abord d’apprendre les bases de la programmation en Java et ensuite étudier l’API de Spigot. Une API est une librairie, c’est-à-dire un amas de raccourcis afin que notre code soit compris par un programme. Par exemple ici, l’API de Spigot nous permettra de faire comprendre à notre serveur que nos lignes de code forment un plugin et qu’il doit faire telle ou telle chose. Cela nous permet aussi d’utiliser des fonctionnalités propres au serveur, comme “kick” un joueur, changer son nombre de points de vie etc.
Je ne vous apprendrai pas à développer en Java dans ce tutoriel. Quelques informations vous seront données mais ce n’est pas le but ici. Il vous faudra donc une certaine logique à adopter. Sachez qu’un ordinateur fait bêtement ce que vous lui dites de faire, alors chaque détail compte. Les plus grandes failles de l’informatique, ce sont les humains !
Comment développer ?
Pour cela, on utilise des IDE (Integrated Development Environment) ou EDI (Environnement de Développement Intégré). Ce sont des logiciels facilitant le développement de programmes grâce à divers outils.
Je vous renvoie au tutoriel de Robin4002, il explique très bien comment installer un IDE (ou EDI) nécessaire pour le développement Java.
Sachez qu’il vaut mieux développer en anglais (nom des dossiers/fichiers, langage de votre IDE) et même dans le code, parce que si vous voulez avoir de l’aide sur internet, les meilleurs forums et les plus actifs sont anglophones.
Un plugin de A à Z
Tout d’abord, lancez Eclipse, puis créez un répertoire (Workspace) où se trouveront tous vos futurs projets.
Vous tomberez sur la fenêtre de bienvenue d’Eclipse, cliquez sur “Go to WorkBench” (aller dans l’espace de travail) qui ouvrira une nouvelle fenêtre. C’est ici que l’on développera notre plugin.
Créer un nouveau projet
Pour créer un nouveau projet, allez dans la fenêtre “Project Explorer”, faites un clic droit > New > Project.
Ou allez dans le menu File > New > Project.
Une nouvelle fenêtre apparaît avec plusieurs dossiers. Seul le Java nous intéresse pour le moment donc ouvrez “Java” puis cliquez sur “Java Project”. Choisissez le nom de votre projet (vous pouvez choisir la version de Java que vous utiliserez, mais il vaut mieux utiliser la dernière version installée sur votre ordinateur, c’est-à-dire celle proposée par défaut) et ensuite cliquez sur “Finish”.
Après avoir créé votre projet, Eclipse vous demandera si vous voulez adapter votre fenêtre au développement Java, personnellement je trouve que cela aide donc n’hésitez pas à accepter.
Vous disposez maintenant de ces éléments :
“src” sera l’endroit où nous écrirons notre plugin, notre dossier source. “JRE System Library” est l’API de Java, ce qui nous permettra de l’utiliser.
Nous devons importer l’API de Spigot, qui n’est d’autre que le .jar utilisé pour lancer un serveur Spigot. Il suffira de l’importer dans nos librairies. Pour avoir ce .jar, je vous renvoie à la page officielle de téléchargement de Spigot !
Créez un nouveau dossier quelque part sur votre ordinateur où vous copierez toutes les versions du serveur de Spigot ; vous ne serez pas obligé de re-télécharger le .jar ou de le rechercher. En important plusieurs versions de Spigot, votre plugin sera compatible avec plusieurs versions de serveur. N’oubliez pas que certaines fonctionnalités sont propres à différentes versions. Il vous faudra donc régler les problèmes de compatibilité. Mais nous verrons cela beaucoup plus tard.
Pour importer Spigot, clic droit sur notre projet > Build Path > Configure Build Path.
Ensuite, allez dans l’onglet “Libraries” et cliquez sur “Add External JARs” et allez choisir le .jar téléchargé précédemment ou que vous avez déjà.
Le premier “package”
Maintenant, commençons notre plugin ! Nous devons créer un nouveau “package” (paquet ou dossier) où se trouveront toutes nos classes. Les classes sont des fichiers contenant notre code. Aucune majuscule pour les “packages”, cela est réservé aux classes.
L’usage fait que, habituellement, le package suivant le dossier source (“src”) soit nommé de cette façon :
- fr : Votre nationalité ou la nationalité pour qui vous travaillez.
- minecraft : Votre pseudo ou le nom pour qui vous travaillez.
- helloworld : Nom de votre projet.
Si par exemple vous travaillez pour une entreprise qui s’appelle Clap Your Hands, qui est chinoise et qui veut créer une application nommée “Flying Carpet”, cela donnera : “cn.clapyourhands.flyingcarpet”.
Cela permet d’avoir un peu plus d’informations sur l’auteur ou le commanditaire.
La classe principale
Ensuite dans ce package, créez la classe principale de votre plugin, nommez cette classe “Main”. C’est ici que le serveur initialisera votre plugin.
Vous pouvez nommer chacune des classes comme bon vous semble, mais il est plus pratique d’appeler une classe par son rôle. Donc ici, “Main” pour la classe principale.
Vous devriez maintenant avoir ceci :
- “package fr.minecraft.helloworld” est le package ou se trouve cette classe.
- “extends” signifie que notre classe “Main” est une extension de la classe “JavaPlugin” qui se trouve dans la librairie de Spigot, la classe “Main” devient alors le coeur du plugin.
Changez “public class Main” par :
public class Main extends JavaPlugin
Les importations
Vous devriez normalement voir une erreur, une ligne rouge se trouvant en dessous du “JavaPlugin”, c’est parce qu’il faut informer notre classe d’où se trouve la classe dont elle est l’extension.
À chaque fois que vous utilisez une classe qui ne se trouve pas dans le même package que celle que vous utilisez, il va falloir l’importer. Pas d’inquiétude, Eclipse est là pour nous aider, il suffit de passer la souris dessus et de cliquer sur “imports …”. Nous pouvons aussi tout importer automatiquement grâce au raccourci : ctrl + maj + O.
Une nouvelle ligne apparaît après le “package fr.minecraft.helloworld”, “import org.bukkit.java.JavaPlugin”.
Parfois, Eclipse nous propose plusieurs choix, c’est parce que plusieurs classes dans différents packages ou librairies utilisent le même nom, à vous de vous documenter pour savoir quelle classe répond à vos attentes.
Le début du développement
Vous allez ajouter ces deux “functions” (méthodes) entre les crochets de votre “public class Main extends JavaPlugin”:
public void onEnable() { Bukkit.getConsoleSender().sendMessage("Merci d'avoir installé mon plugin."); } public void onDisable() { Bukkit.getConsoleSender().sendMessage("A la prochaine !"); }
Pour tout apprendre sur les méthodes, je vous renvoie ici.
- “onEnable()” permettra d’appeler ce que l’on veut lors de l’initialisation du plugin lorsque notre serveur démarre.
- “onDisable()” sera appelé lors de la fermeture du serveur.
- “Bukkit.getConsoleSender().sendMessage(…);” enverra un message à la console lors de l’ouverture (dans le “onEnable()”) et la fermeture du serveur (dans le “onDisable()”).
Le fichier “plugin.yml”
Tout d’abord, avant d’exporter son plugin, il faut créer le fichier “plugin.yml” dans le dossier “src”, donc faites un clic droit sur ce dernier > New > File.
Puis dans la section “File name”, mettez “plugin.yml”. C’est ici que seront stockées les informations de notre plugin, comme le chemin de la classe principale, le nom de notre plugin, sa version etc. C’est dans ce fichier que l’on recense aussi les commandes et les permissions. Mais nous verrons cela plus tard.
Vous trouverez la totalité des informations ici. Mais les informations les plus basiques et essentielles sont celles-ci :
main: fr.minecraft.helloworld.Main name: HelloWorld description: Un plugin pour Minecraft.fr author: Plx0wn version: 1.0
- main : chemin de notre classe principale.
- name : nom de notre plugin.
- description : courte description du plugin.
- author : nom de l’auteur.
- version : version du plugin, regardez ici pour plus d’informations sur la forme des versions.
Exporter son Plugin
Maintenant, commençons à exporter notre plugin. Faites clic droit sur notre projet > Export > Java > Jar File.
Ensuite, indiquez le nom et l’emplacement du .jar qui deviendra votre plugin et cliquez sur “Finish”.
Maintenant, il ne reste plus qu’à l’installer dans le dossier “plugins” de votre serveur et à le démarrer !
Bonus – Les couleurs
Si vous voulez que vos textes soient en couleurs (les couleurs de Minecraft : &a, &b, &4…), voici un court exemple qui sera approfondi dans le prochain article.
Pour cela, il suffit de rajouter “ChatColor.LACOULEUR +” devant votre texte.
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Merci d'avoir installé mon plugin.");
Pour voir la liste complète des couleurs, juste après le “ChatColor.”, faites crtl + espace et Eclipse vous donnera toutes les possibilités.
Quelques liens utiles
Forums :
Spigot docs : https://hub.spigotmc.org/javadocs/spigot/overview-summary.html
OpenClassRoom : https://openclassrooms.com/courses/apprenez-a-programmer-en-java
Pour conclure, n’hésitez pas à chercher sur internet, par exemple : “Spigot how summon entity” (Spigot comment faire apparaître une entité). La plupart du temps, des tutoriels ont déjà été écrits ou il existe déjà des réponses à la plupart des questions sur des forums. Il y a bien évidemment plus de résultats en cherchant en anglais.
Je trouve cool de mettre un tuto pour la création de plugin sur ce site !
Mais moi, je préfère coder des mods :) D’ailleurs, j’ai vu que le lien que tu as mis pour installer eclipse se trouve sur minecraftforgefrance.net
Oui car pour moi c’est un très bon site de modding ;)
Petit tuto pas trop mal pour commencer. L’apprentissage du java reste quand même indispensable pour pouvoir faire vraiment des trucs pas mal.
Petite coquille : “ch” c’est l’extension pour la suisse ^^. Pour la Chine c’est “cn” de mémoire
Oh ! Merci de m’avoir indiqué cette erreur :)
Super d’avoir un tuto comme celui-ci pour apprendre à programmer à des français, ça manque dans la communauté je trouve :)
Par contre je n’aurai personnellement pas commencé par Bukkit.getConsoleSender() mais par un classique sysout ou un getLogger().info…
Au final ça revient plus ou moins au même, mais il est plus conventionnel dans l’univers des plugins MC d’utiliser le logger.
Le Sysout c’est pour la prog Java en général^^
Là on parle d’un tuto plugin pas d’un tuto prog (enfin à proprement parlé), donc faut que ce soit plus en lien avec le plugin :)
Oui ça je comprends. Cependant, autant apprendre dès le début à utiliser les trucs généraux et conventionnels (le logger en l’occurrence) pour prendre les habitudes de développement du milieu ;-)
Oui en effet j’aurais peut-être dû en parler, mais j’avais envie que les débutants aient quelque chose de concret comme des messages a envoyer. Ils peuvent déjà s’amuser a faire quelques trucs !
Pourquoi vous donner un tuto sur IntelliJ et après vous êtes sous eclipse ? xD sinon bon tuto
Cela dépend de chacun de nous, le développement et les API restent les mêmes donc aucun souci là-dessus, restez sur vos IDE favorites ! :)
Pour les couleurs, on peut aussi utiliser le signe “paragraphe” . sinon bon Tuto bien expliqué
Merci de ton retour ! Et oui on peut utiliser les “§” mais dans quelques cas cela peut créer des erreurs ! Dans un prochain article nous verrons une technique pour faire cela automatiquement :)