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é.

Eclipse

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 :

Librairie Bukkit

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.
Whereisthat

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: WhereIsThat
main: 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.

Whereisthat2

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.

msdos

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: WhereIsThat
main: 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.

Apercu

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.

Minecart Mania
Sommaire :
  1. Les mods serveur
  2. Installation de CraftBukkit
  3. BigBrother
  4. Minecart Mania
  5. Programmez votre premier MOD Minecraft Server

Réactions


Personne n'a encore réagi. Soyez le premier.

Que pensez-vous de Minecraft ?

109 aiment, 15 pas.
Note moyenne : (127 évaluations | 5 critiques)
8,4 / 10 - Très bien

448 joliens y jouent, 678 y ont joué.