Programmez votre premier MOD Minecraft Server
Ce tutoriel est à l'usage de celui ou celle qui a envie de modifier Minecraft à sa sauce, plus particulièrement en développant des modifications côté serveur de jeu, pour le mode multi-joueurs.
C'est un premier tutoriel à l'usage des débutants dans le développement de mods Minecraft Server pour craftbukkit. Vous n'y ferez rien d'extraordinaire, mais vous aurez un environnement de développement de base prêt à l'emploie.
Il est conseillé pour se lancer dans cette aventure d'avoir quelques bases en programmation, si possible objet, le jeu et ses modifications étant programmées en Java.
Toutefois bukkit est un outil très puissant, et il génère lui-même une partie du travail pour que les mods les plus simple soient également simple et rapide à faire, comme vous allez le voir ici.
Ce qu'il vous faut pour démarrer
Téchargez Le JDK (Java Development Kit) SUN Java2SE :
Cliquez ici.
Eclipse Indigo for Java, l'environnement de développement Java intégré, et open source, qui vous permettra de développer, compiler et générer vos fichiers .jar (quasiment) le plus simplement du monde :
Cliquez ici.
La dernière version recommandée de bukkit (je dis bien bukkit, et pas craftbukkit), l'API (Application Programming Interface) de la version modifiée de Minecraft Server, craftbukkit, qui permet une intégration très simple des mods Minecraft Server :
Cliquez ici. (puis cliquez sur Bukkit API)
Installez Eclipse Helios for Java.
Installez le JDK Java que vous avez téléchargé ; Installez Eclipse Helios for Java
Lancez-le et acceptez la création d'un "workspace" (espace de travail) dans le dossier proposé.
Sachez ce que votre mod va faire
Vouloir développer un mod pour Minecraft Server, c'est bien. Encore faut-il savoir exactement ce qu'il va faire. Réfléchissez-y bien, et n'oubliez pas que vous serez forcément limité dans le développement d'un mod Minecraft Server, à moins que vous ne soyez un gourou de la question (mais dans ce cas vous vous êtes trompé de tutoriel). Le n°1 des limitations est : vous ne pourrez pas changer l'aspect graphique des objets, car cela se passe côté client.
Pour ce premier tutoriel, nous avions envie de développer un mod qui donnera au joueur les coordonnées dans le monde de chaque bloc qu'il tapera.
Créez un projet java pour votre mod, Menu File > New > Java Project
Nommez votre projet dans la zone Project name. Votre projet pour ce tutoriel se nomme WhereIsThat Vous avez choisi ce nom en anglais car vous souhaitez partager votre création avec la communauté internationale des joueurs sur le forum bukkit.org (ce qui est vivement recommandé).
Use an execution environment JRE : JavaSE-1.6 Inutile de toucher aux autres options, à moins que vous ne
sachiez exactement ce que vous faites. Cliquez directement sur le bouton Finish.
Liez la librairie bukkit à votre projet
Rangez le fichier bukkit-0.0.1-SNAPSHOT.jar que vous avez téléchargé dans un lieu "neutre", accessible pour l'ensemble des nombreux mods que vous allez bientôt développés.
Il est conseillé de créer un dossier libraries dans votre workspace créé au début de ce tutoriel. Stockez-y la librairie bukkit.
Dans votre projet java, sur l'icône JRE System Library : clic-droit > Build Path > Configure Build Path.
Dans Libraries, clic Add External JARs. Ouvrez bukkit-1.1-R4.jar Confirmez avec OK. Vous devriez avoir ceci dans votre projet :
Le fichier de configuration du mod
Le développement d'un mod sous bukkit est très cadré. Il faut structurer votre projet proprement, sinon craftbukkit refusera tout simplement de l'exécuter.
Ouvrez votre projet WhereIsThat d'un clic sur la flèche à gauche du nom du projet.
Sur le dossier src, clic-droit > New > File. Nommez votre fichier config.yml, pour les versions plus récentes de bukkit, nommez le fichier plugin.yml
Il s'ouvrira probablement dans un éditeur de texte externe (ou vous demandera avec quel logiciel vous souhaitez l'ouvrir, dans ce cas choisissez votre bloc-notes).
Copiez très exactement le contenu du fichier config.yml comme indiqué ci-après. Attention : pas de caractère tabulation !
Fichier config.yml :
name: WhereIsThatmain: fr.crafter.tickleman.WhereIsThat.WhereIsThat
version: 0.01
website: http://plugins.crafter.fr/tickleman/WhereIsThat/
authors:
- tickleman
commands:
Votre package et votre classe principale
Sur le dossier src, clic-droit > New > Package.
Modifiez la zone Name très exactement comme suit :
fr.crafter.tickleman.WhereIsThat
Clic bouton Finish.
Sur le package nouvellement créé, clic-droit > New > Class.
Modifiez la zone Name et ne changez rien d'autre :
WhereIsThat
Clic bouton Finish.
Code de base de la classe "plugin" :
package fr.crafter.tickleman.WhereIsThat;import org.bukkit.plugin.java.JavaPlugin;
public class WhereIsThat extends JavaPlugin {
@Override
public void onDisable()
{
System.out.println("[WhereIsThat] version 0.1 [tickleman] un-loaded");
}
@Override
public void onEnable()
{
System.out.println("[WhereIsThat] version 0.1 [tickleman] loaded");
}
}
Exportez votre MOD au format JAR
Vous avez sous les yeux le code de base de votre mod. Le mieux est de vérifier dès maintenant qu'il est correctement structuré et sera reconnu par craftbukkit.
Sur votre projet WhereIsThat, clic-droit > Refresh. Sur votre projet WhereIsThat, clic-droit > Export. Dans le fenêtre Export, sélectionnez java > JAR file puis Next. Dans la fenêtre JAR Export, décochez .classpath et .project.
Choisissez le chemin d'accès à votre JAR File. Dans mon cas : C:\Minecraft\plugins\WhereIsThat.jar (craftbukkit-0.0.1-SNAPSHOP.jar est installé dans C:\Minecraft).
Cliquez Finish, et vérifiez qu'il ne vous sort aucune erreur. Exécutez craftbukkit et vérifiez le contenu du log d'exécution.
Log serveur pour un mod correctement chargé
Voici l'affichage que vous devriez avoir (si vous avez la même version de craftbukkit que moi).
L'important est la ligne qui confirme le bon chargement de notre mod et l'absence de message d'erreur.
La base de bukkit : La capture d'événements
Le principe du développement de mod avec bukkit, c'est la capture d'événements du jeu, et l'association de cette capture avec les actions que vous souhaitez réaliser.
Dans le code base de la classe WhereIsThat, nous avons programmé ce qu'il faut pour indiquer, dans les logs de Minecraft Server, que notre plugin s'est bien lancé. Nous avons placé le code correspondant dans des méthodes événementielles onEnable() et onDisable() appelées par craftbukkit lorsqu'il active ou désactive votre mod.
Pour les autres événements que vous devrez capturer, vous devrez créer : une classe pour accueillir les méthodes événementielles, chacune de ces méthodes et vous devrez demander à bukkit d'appeler ces méthodes lorsque les événements considérés se déclenchent dans le jeu.
Le config.yml final :
name: WhereIsThatmain: fr.crafter.tickleman.WhereIsThat.WhereIsThat
version: 0.02
website: http://plugins.crafter.fr/tickleman/WhereIsThat/
authors:
- tickleman
commands:
La classe WhereIsThat finale :
package fr.crafter.tickleman.WhereIsThat;import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class WhereIsThat extends JavaPlugin {
private final WhereIsThatBlockListener blockListener = new WhereIsThatBlockListener();
@Override
public void onDisable()
{
System.out.println("[WhereIsThat] version 0.2 [tickleman] un-loaded");
}
@Override
public void onEnable()
{
PluginManager pm = getServer().getPluginManager();
pm.registerEvent(Event.Type.BLOCK_DAMAGE, blockListener, Priority.Normal, this);
System.out.println("[WhereIsThat] version 0.2 [tickleman] loaded");
}
}
La classe WhereIsThatBlockListener :
package fr.crafter.tickleman.WhereIsThat;import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockListener;
public class WhereIsThatBlockListener extends BlockListener {
@Override
public void onBlockDamage(BlockDamageEvent event)
{
Player player = event.getPlayer();
if (player != null) { Location location = event.getBlock().getLocation();
Long x = Math.round(Math.floor(location.getX()));
Long y = Math.round(Math.floor(location.getY()));
Long z = Math.round(Math.floor(location.getZ()));
player.sendMessage(
"You've hurt a block at "
+ x.toString() + ", "
+ y.toString() + ", "
+ z.toString() );
}
}
}
Ce que ça donne "in-game"
Connectez-vous à votre serveur de test (localhost, si lancé sur la machine où vous travaillez), éloignez-vous de 16 cases du spawn car il est protégé contre les dégâts sur le bloc, puis tapez sur un bloc.
Conclusion - Pour aller plus loin
Vous avez,désormais, les bases pour programmer un mod pour Minecraft Server sous craftbukkit.
Naviguez dans le javadoc de bukkit pour avoir un aperçu de tous les types d'événements que vous pouvez capturer, et des objets du jeu que vous pourrez manipuler grâce à lui : http://javadoc.lukegb.com/Bukkit/
Téléchargez les sources de mods simples qui capturent les événements qui vous intéressent, ou ont une action comparable à ce que vous aimeriez faire, pour regarder comment les autres développeurs ont fait : http://plugins.bukkit.org ou http://wiki.bukkit.org/Main_Page
Manipulez, expérimentez, programmez, tout simplement !
Je tiens à remercier spécialement : BlackLemming pour m'avoir montré ce fabuleux jeu qu'est Minecraft, Boozaa pour m'avoir initié au développement de mods, à l'IDE Java Eclipse, la communauté de développeurs qui partagent leurs mods et leurs sources, l'équipe qui a développé craftbukkit pour son splendide travail et évidemment mais surtout, Notch pour son fabuleux jeu, qui m'a "addicté" à jamais.
Pour JeuxOnLine, Tickleman.
- Les mods serveur
- Installation de CraftBukkit
- BigBrother
- Minecart Mania
- Programmez votre premier MOD Minecraft Server
Réactions
Pas de compte JeuxOnLine ?
Créer un compteQue pensez-vous de Minecraft ?
448 joliens y jouent, 678 y ont joué.
-
25 mai 2020
-
15 novembre 2018
-
13 juin 2018
-
6 avril 2018
-
15 avril 2017