Un plugin Minecraft est une extension du jeu, server-side, écrite en Java, permettant de manipuler les règles de Minecraft :
modifier l’action liée à un évènement, l’annuler, ou ajouter d’autres actions personnalisées à cet évènement.
Il est aussi possible de créer des tâches qui seront exécutées à un certain intervalle de temps, ou de créer des commandes permettant d’effectuer une action personnalisée.
Cela nous permettrait par exemple d’empêcher un joueur de poser un bloc dans une certaine zone du monde, ou d’envoyer un message à chaque joueur connecté
lorsque l’on exécutera une commande donnée (par exemple /broadcast <message>).
En bref, tout est possible avec les plugins. C'est différent des mods, qui modifient directement le jeu (donc là on peut ajouter directement des nouveaux items, avec des textures personnalisées), mais on peut faire globalement ce qu'on veut avec des plugins, avec de l'imagination ! 😊
C’est d’ailleurs avec les plugins que fonctionnent la majorité des gros serveurs aujourd’hui, comme Hypixel, Minemen, Hashtek (😏), anciennement Epicube, Funcraft, Mineplex…
Pour créer notre plugin, nous utiliserons l’API Spigot, qui est dérivée de Bukkit (et qui a donc la même utilité), car celle-ci est plus documentée, et bien plus à jour. Elle contient l’ensemble des fonctions et des classes dont nous nous servirons pour interagir avec notre serveur.
À la fin de ce workshop, vous saurez faire une commande qui vous donne un item personnalisé, un chat personnalisé ainsi qu'une blacklist de blocs (certains blocs qu'on ne peut pas poser).
Tout ça est faisable sur Linux, macOS et sur Windows, mais les captures d’écrans seront faites avec Windows.
Tip
La version utilisée sera la 1.8.8. Si vous voulez utiliser une version plus récente, récupérez le fichier JAR sur https://getbukkit.org/download/spigot
et remplacez le spigot.jar présent dans votre serveur par le .jar que vous venez de télécharger. Faites attention à la version de Java à utiliser !
Tip
Le nom des classes doit s'écrire en PascalCase, les packages en lowercase et le reste en camelCase (nom des variables...)
Tip
N'hésitez pas à venir me voir si vous avez besoin d'aide, ne restez pas bloqué ! 😉
Utilisez aussi Google, la meilleure prompt est "spigot " + votre problème !
- Minecraft 1.8.8 / 1.8.9 (je vous conseille le launcher Prism)
- L'IDE Eclipse (https://www.eclipse.org/downloads/packages/) (ou IntelliJ IDEA 😉)
- Template de serveur (ce repository)
- Clonez ce repository
git clone git@github.com:Shuvlyy/workshop-plugin-mc.git-
Pour lancer le serveur, exécutez la commande
java -jar spigot.jar.
Lancez le une première fois. -
Vous verrez que le serveur refuse de démarrer. Pour continuer, il faut accepter les conditions d'utilisation de Mojang, les EULA.
Pour ce faire, allez dans le fichiereula.txtet remplacez lefalsepartrue. -
Relancez le serveur. Tous les fichiers vont se créer, dont le monde, qui peut prendre un peu de temps (tout dépend de la puissance de votre PC).
-
Une fois terminé, il y aura une ligne avec écrit "Done".
Pour accéder à votre tout nouveau serveur, entrez l'IPlocalhost(ou127.0.0.1pour les puristes) sur votre jeu.
Laissez bien ce terminal tourner en fond, c'est lui qui fait tourner le serveur !
Tip
N'oubliez pas de vous donner les permissions d'administrateur sur votre serveur !
Pour ce faire, exécutez la commande op <pseudo> dans la console. Pour retirer les permissions, c'est la commande deop <pseudo>.
Pour arrêter le serveur, exécutez la commande stop.
Warning
Faites bien attention à prendre la bonne version de Java, la JavaSE-1.8 !
-
Créez un nouveau package dans le dossier
src:fr.<votre_pseudo>.spigot.<le_nom_de_votre_plugin>
Ce package sera la racine de notre plugin (voyez les packages comme des dossiers). -
Maintenant, créez une nouvelle classe Java dans le package créé qui porte le nom de votre plugin (dans notre cas,
Workshop) et qui étend de la classeJavaPlugin. -
Notre structure principale est finie. Maintenant, paramétrons notre projet pour accéder à l'API de Spigot.
- Ajoutez le fichier
spigot.jarprésent dans votre serveur dans les archives externes (clic droit sur votre projet > Build Path > Add External Archives...) - Et voilà ! Spigot est maintenant utilisable.
- Ajoutez le fichier
-
Écrivons maintenant les instructions basiques du plugin :
- Une fonction de type
voidappeléeonEnable(avec le décorateurOverride) qui sera appelée au lancement du serveur - La même fonction mais appelée
onDisable, qui sera appelée à l'arrêt du serveur
- Une fonction de type
@Override
public void onEnable()
{
System.out.println("Plugin loaded!"); // Équivalent de "console.log" en JS.
}
@Override
public void onDisable()
{
System.out.println("Goodbye, server... :(");
}-
Dernière étape avant de pouvoir tester, il faut créer "l'identité" du plugin (son nom, sa version, son auteur...).
Pour ce faire, créez un fichier nomméplugin.ymldans le dossiersrcde votre plugin et collez-y dedans ceci :name: Workshop version: 1.0 author: <votre_pseudo> main: fr.shuvly.spigot.workshop.Workshop # Adaptez cette ligne à votre nom de package.
Cette "identité" est consultable grâce à la commande
/version(ou/ver) suivi du nom de votre plugin. -
Notre premier jet est désormais fini ! Maintenant, vérifions qu'il fonctionne bien. Exportez le plugin dans le dossier
pluginsde votre serveur.
Clic droit sur votre projet > Export- En type de fichier, sélectionnez
Java/JAR file.

- Cliquez sur "Next".
- Cliquez sur le bouton "Browse..." et sélectionnez le chemin vers le dossier
pluginsde votre serveur, et donnez un nom à votre fichier. - Cochez la case "Overwrite existing files without warning" (sinon c'est relou il y aura toujours une popup quand vous exporterez).
- Puis cliquez sur "Finish" !

- Maintenant, dans la console, tapez la commande
reload.
Si vous voyez le petit message qu'on a écrit au dessus, c'est gagné ! Modifiez-le et regardez 😎

- En type de fichier, sélectionnez
Tip
À chaque changement que vous faites sur le plugin, il faudra exporter le plugin et reload le serveur.
⁉️ Votre plugin ne fonctionne pas ? Vérifiez bien que votre plugin a bien été exporté dans le dossier plugins.
Regardez également la console, l'erreur est souvent explicite.
Sur Minecraft, il existe des commandes, comme /give pour se donner des items, /tp pour se téléporter à certaines coordonnées ou à un joueur, etc...
Mais, avec les plugins, il est possible de créer ses propres commandes ! Créons-en une pour envoyer un message à tous les joueurs : /broadcast
-
Créez un sous-package qu'on va nommer
command(qui contiendra toutes nos commandes), puis dans ce sous-package une nouvelle classe nomméeCommandBroadcastqui implémente la classeCommandExecutor.
Ajoutez-y les fonctions demandées (normalement, justeonCommand).
(le nom pré-généré des arguments n'étant pas très explicite, je vous conseille de les remplacer parsender,command,label,argsrespectivement) -
Puis, dans cette fonction
onCommand, collez-y ce bout de code :Bukkit.broadcastMessage("Ceci est un broadcast");
Tip
Jouez avec les codes couleurs de Minecraft !
-
Maintenant, il faut dire au serveur que cette commande existe.
Pour ce faire, au lancement du serveur, appelez ce bout de code :getCommand("broadcast").setExecutor(new CommandBroadcast()); // ^ Nom de la commande ^ Classe responsable de la commande
-
Finalement, il faut rajouter notre commande dans "l'identité" du plugin (le fichier
plugin.yml). Créez simplement une sectioncommandsà la fin du fichier, puis ajoutez-y le nom de votre commande. Vous pouvez même ajouter une description, une permission et plus !... commands: broadcast: description: "Envoie un message à tout le serveur."
La description est accessible grâce à la commande
/helpsuivi du nom de la commande (donc/help broadcast). -
Et voilà ! Maintenant, quand un joueur exécute la commande
/broadcast, un message est envoyé à tous les joueurs.

Sur Minecraft, il se passe ce qu'on appelle des events (des événements). À chaque action faite sur le serveur, un événement est déclenché.
- Un joueur rejoint / quitte le serveur ?
PlayerJoinEvent/PlayerQuitEventest déclenché. - Un joueur pose un bloc ?
BlockPlaceEventest déclenché. - Un message est envoyé ?
AsyncPlayerChatEventest déclenché.
Il existe beaucoup d'events, dont la liste se trouve ici.
Par exemple, implémentons un petit Listener (une classe qui écoute des events) qui se chargera d'exécuter quelques trucs quand un joueur rejoint notre serveur.
-
Créez un sous-package qu'on va nommer
listener(qui contiendra tous nos listeners), puis dans ce sous-package une nouvelle classe nomméeListenerJoinqui implémente la classeListener. -
Créez une fonction de type
voidqui prend en paramètre l'eventPlayerJoinEventavec le décorateurEventHandler.
C'est cette fonction qui sera appelée quand l'événement sera déclenché.
Écrivez-y les instructions que vous voulez, profitez-en pour découvrir un peu la documentation et ce que vous pouvez faire ! -
Maintenant, tout comme pour les commandes, il faut dire au serveur que ce
Listenerexiste.
Pour ce faire, au lancement du serveur, il fautregisterleListenerdans lePluginManager.
PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new ListenerJoin(), this);- Et voilà ! Maintenant, quand un joueur se connectera sur votre serveur, le contenu de la fonction que vous avez créé sera exécuté.
Tip
Regardez bien toutes les fonctions disponibles dans l'event (PlayerJoinEvent) !
- Quand un joueur rejoint / quitte le serveur, modifiez le message envoyé par défaut par celui de votre choix (il doit inclure le pseudo du joueur !).
- Quand un joueur envoie un message dans le chat, modifiez le formattage par défaut (doit inclure le pseudo du joueur et le message qu'il a envoyé !).
- Quand un joueur pose un bloc "interdit" (ceux que vous voulez, de la pierre par exemple), annulez la pose et lui envoyez lui un message pour lui dire que ce bloc est "interdit".
- Faites une commande "/customgive" qui donne une épée en fer avec les caractéristiques suivantes :
- Nom :
Excalibur(en rouge) - Enchantments : Sharpness 2, Unbreaking 3
- Incassable
- Nom :
Si vous êtes arrivés ici, je vous félicite 👏
Je vous encourage à aller plus loin : vous pouvez mixer tout ce que vous avez appris pour faire un mini-jeu ! Inspirez vous d'autres mini-jeux, essayez de les reproduire !
Les plus simples à faire sont les mini-jeux de types FFA, car aucun système de partie n'est requis.
Si vous êtes curieux de voir à quoi ressemble un code de production d'un "vrai" serveur Minecraft, je vous invite à regarder les repos d'Hashtek et de SamaGames.
Merci d'avoir été présent pendant ce Workshop ! 🌟💜



