|
Vous n'êtes pas identifié(e).
![]() ![]() short-url : #1 20 May 2011 10:31
[Tuto Obsolete] Créez votre premier plugin pour bukkitSi vous souhaitez diffuser ce tutoriel je vous demande juste la gentillesse de me citer. TUTO OBSOLETE Créez votre premier pluginPour ceux parmi vous ayant des connaissances en Java ou langage orienté objet et avec l'envie de créer votre propre mod je vous propose un tutoriel imagé pour vous aider à démarrer. Sommaire
Bien démarrer Avant de démarrer il faut savoir où l'on va. Notre projet Hello Je vous propose un projet basique pour tenter de voir ensemble comment démarrer un mod.
Cet exemple plutôt basique et sans grand intérêt dans le jeu va nous permettre de voir les 2 grandes familles d’événements: Ce ne sont pas les seules mais les principales donc, après tout dépend de ce que doit faire votre mod. Dernière modification par boozaa (21 May 2011 11:49) Hors ligne short-url : #2 20 May 2011 10:32
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitLes pré-requis
Dernière modification par boozaa (20 May 2011 10:39) Hors ligne short-url : #3 20 May 2011 10:33
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitConcepts essentiels Petit rappel sur les packages java Un package Java, par exemple net.thgbm.forum se retranscrits dans l'archive .jar comme une arborescence de dossier, ce qui nous donne pour cet exemple la structure de dossier suivante :
Gardez bien cela en mémoire pour vous permettre de bien 'ranger' vos futures classes, interface & co.
Pensez donc à bien structurer votre code pour bien 'ranger'. Les événements On peut interagir grâce aux mods sur différents aspects du serveur. Ces actions sur lesquelles on peut agir sont en fait des événements. Pour pouvoir les modifier ou ajouter de nouvelles fonctions dés qu'un de ces événements intervient il vous faut les 'capter'. Dernière modification par boozaa (20 May 2011 10:56) Hors ligne short-url : #4 20 May 2011 10:35
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitCréation d'un nouveau projet dans Eclipse Vous avez les pré-requis alors on peut se lancer. Aprés avoir démarré votre Eclipse allez dans le menu 'File' -> 'New' -> 'Java Project'. Vous devez arriver à une fenêtre comme celle ci : Dans 'Project name' vous indiquez le nom de votre projet. Pour notre exemple il va donc s'appeler 'Hello'. On va se contenter de cela, cliquez donc sur 'Finish'. Ajoutez la référence de l'API bukkit Votre projet étant créé vous le voyez apparaître dans l'onglet 'Package explorer' de Eclipse Vous vous rappelez que vous avez téléchargé le .jar de l'API de bukkit. Maintenant il vous faut la référencer dans votre projet. Création de notre premier package Notre package sera pour l'exemple : 'net.thgbm.forum.Hello', alors cliquez droit sur le projet 'Hello' et choissisez 'New' -> 'Package'. Refaites la même manip pour vous familiariser au 'rangement' pour le package 'net.thgbm.forum.Listeners'. Allez pour vous entraîner refaites la encore une fois pour le package 'net.thgbm.forum.Utils' dans lequel on y rangera nos fonctions. Dernière modification par boozaa (20 May 2011 14:29) Hors ligne short-url : #5 20 May 2011 10:36
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitLa classe principale, celle qui hérite de JavaPlugin de bukkit Maintenant que nos packages principaux sont faits on va s'attaquer à notre première classe. Création de notre classe Hello Faites un clic droit sur le package 'net.thgbm.forum.Hello' et choisissez 'New' -> 'Class'. Dans la fenêtre de création assisté de Classe vous avez juste à préciser le nom de la classe à créer : Hello et valider en cliquant sur 'Finish'. Notre fichier Hello Notre fichier s'ouvre donc et vous voyez le code minimal généré par Eclipse
Dans ce code nous allons commencer par importer le nécessaire pour notre classe et hériter de JavaPlugin en modifiant le fichier comme suit :
Vous avez du remarquer que votre Eclipse vous signale des erreurs ou des avertissements. Comme vous venez d'hériter de JavaPlugin il vous faut obligatoirement définir 2 fonctions qui sont : Ces deux fonctions sont les 'accroches' au serveur. onDisable() ici ce sera tout le ménage à faire lorsque votre mod s'arrète. Ceci étant dit modifiez votre fichier en y ajoutant ces 2 fonctions :
Dans le onEnable() vous avez certainement remarqué que j'appele une autre fonction qui est registerEvents(). Cette fonction va attacher les évenements serveur souhaités pour pouvoir les récupérer quand activés et ajouter nos modifications. Notre registerEvents() Voila la partie qui nécessite le plus de connaître les finalités de notre mod. Les événements à capter pour cela sont donc respectivement : Vous remarquerez donc que 2 de ces 3 types d’événements sont PLAYER et un BLOCK. On revient à ce que je vous disais au début de ce tuto et on voit là nos 2 familles d’événements principaux le blockListener et le playerListener. Nous allons donc ajouter à notre code le nécessaire pour capter ces 3 types d’événements. Nous saluer lorsqu'on tape /salut Voici maintenant le code pour que le serveur nous salut sur demande:
Le code ressemblera à cela :
Cette méthode onCommand() permet de lancer des actions donc sur des commandes lancées dans le tchat. Pour notre projet cela est suffisant. Dans le code vous voyez que je déclare 2 Listeners : HelloBlockListener et HelloPlayerListener : ce sont nos Listeners qui va falloir créer et qui feront le boulot qu'il reste. Dernière modification par boozaa (21 May 2011 12:57) Hors ligne short-url : #6 20 May 2011 10:37
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitLes listeners, ceux qui sont à l'écoute des événements captés et agissent Dans notre classe principale Hello nous avons précisé que nous voulons recevoir les événements PLAYER_JOIN, PLAYER_INTERACT et BLOCK_DAMAGE pour pouvoir ajouter nos modifications. Ces événements peuvent être captés par 2 types de listener : blockListener et playerListener dont il va falloir hériter. Notre listener qui se chargera des événements de type PLAYER a été déclaré dans Hello comme HelloPlayerListener et celui qui s'occupera de ceux de type BLOCK est déclaré comme HelloBlockListener. HelloPlayerListener Comme nous avons créé notre package pour les listeners au début nous allons créer notre classe en faisant un clic droit sur le package 'net.thgbm.forum.Listeners' et en choisissant 'New' -> 'Class'. Le fichier s'ouvre avec le code auto-généré suivant :
Nous allons donc importer le nécessaire de l'API et hériter de playerListener puis attacher la classe principale pour interagir:
Nous saluer à la connexion Nous devons maintenant traiter nos deux objectifs en commençant par demander au serveur de nous saluer dés qu'on se connecte, pour cela nous allons utiliser la fonction onPlayerJoin() de playerListener et voici donc le code de ce que l'on souhaite :
Conclusion de notre HelloPlayerListener Vous pouvez vous rendre compte que notre code efficace se limite à quelques lignes, le plus long étant de structurer le tout et d'importer/instancier le nécessaire. Voici le fichier complet :
HelloBlockListener Ça va être la même logique sauf qu'on hérite de blockListener et pas de playerListener. Voici comment être prévenu d'un block cassé.
Nous avons donc nos deux listener avec nos nouvelles actions de codé. Dernière modification par boozaa (20 May 2011 23:39) Hors ligne short-url : #7 20 May 2011 10:40
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitLe fichier plugin.yml indispensables références pour votre mod Le fichier plugin.yml, comme son extension volontairement explicite l'indique, doit respecter le standard YAML.
Dans les informations à lui fournir on retrouve :
Le YAML n'est pas balisé comme le html par exemple ou le bbcode mais est structuré d'une autre manière ou les sauts de ligne et espaces sont très importants et ont une signification précise. Ceci étant dis je précise également que selon les éditeurs de texte la tabulation ne se retranscrit pas de la même manière dans le fichier et est souvent cause de mauvaises interprétation du fichier .yml. Si on prends notre exemple voici à quoi ressemblerait notre fichier plugin.yml avec le minimum d'informations :
La propriété 'name' permet de faire cohabiter aussi plusieurs commandes identiques partagées par plusieurs mods. Ceci étant tout de même à éviter mais sachez que si par exemple vous avez créé une commande '/home' et que cette commande est déja définie par un autre mod vous pouvez l'appeler en jeu par '/Hello:home' dans notre exemple <-- ceci étant à vérifier. La propriété 'main' doit représenter le nom complet, package et nom de fichier inclut sans le '.java' ou le '.class', de la classe qui étends JavaPlugin. La propriété 'version' est facile à comprendre, c'est donc la version de votre release. La propriété 'website' si vous en avez un. La propriété 'authors' là c'est de vous dont on parle La propriété 'description', une petite description de ce que fait votre mod. Votre plugin contient des commandes utilisateurs ? Pour éviter que les commandes d'un mod soient écrasées par celles d'un autre et pour instaurer une certaine cohésion vous devez préciser dans votre plugin.yml les commandes utilisateurs que vous avez créés de la forme :
Ce schéma doit être respecté pour toutes vos commandes utilisateurs, le 'usage' sera le message en réponse d'une mauvaise utilisation de la commande '/salut'. Ce qui nous donnerait donc en combinant le tout :
Mais pourquoi déclarer mes commandes utilisateurs ? Sauf erreur de ma part voici le pourquoi. Avant cette structure .yml le serveur devait sûrement user plus de ressources car, toujours sauf erreur de ma part, il envoyait cet événement à tous les mods un par un jusqu'à ce qu'il y en ait un qui le traite. C'était une des raisons qui me faisait dire à l'époque qu'il valait mieux créer tout ce dont on a besoin plutôt qu'entasser les mods. Où placer ce fichier ? Il faut que ce fichier se trouve au même niveau que votre dossier 'src'. Dans le .jar après la génération il se trouvera donc à la racine du .jar. Dernière modification par boozaa (21 May 2011 11:48) Hors ligne short-url : #8 20 May 2011 10:41
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitGénérer le .jar exploitable de votre mod Votre mod est fait, il ne vous reste plus qu'à générer un .jar pour finalement le placer dans votre dossiers 'plugins/' se trouvant dans votre dossier du serveur Bukkit. Pour générer votre.jar :
Dernière modification par boozaa (20 May 2011 19:12) Hors ligne short-url : #9 20 May 2011 10:53
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitUne meilleure gestion des commandes utilisateurs Dans notre exemple l'action faites lors de la saisie '/salut' est gérée dans notre classe principale. Il serait peut être préférable de la 'ranger' ailleurs car pour l'instant on n'a qu'une commande mais que se passera t'il quand on en ajoutera ? Si on change rien la classe principale va s'alourdir et devenir de moins en moins lisible. A mon goût (oui vous savez "les goûts et les couleurs"..) je préfère 'ranger' mes commandes dans un package séparé et je vais vous montrer une méthode pour se faire. Créez le package 'net.thgbm.forum.Commands' Vous devez créer le package 'net.thgbm.forum.Commands', si vous ne vous rappelez plus comment faire remontez en haut de ce tutoriel. Créez dans ce package une classe par commande Nous avons pour l'instant qu'une seule commande : salut. Dans cette classe on va retrouver la méthode utilisée dans la classe principale mais sera donc exécutée dans le SalutCommand, voici le code :
Il faut implémenter CommandExecutor pour accéder on onCommand().
Devinez quoi, ça sera écrit en bleu.... Modification sur la classe principale Hello Il faut maintenant modifier notre classe principale pour envoyer la gestion de la commande /salut vers notre classe SalutCommand. Commençons par ajouter nos imports :
Ensuite on supprime notre commande onCommand() et dans le onEnable() on va rediriger la gestion de la commande /salut vers notre SalutCommand :
Regénez votre .jar et ça devrait fonctionner. Conclusion Maintenant que notre commande est 'rangée' dans son package vous vous rendez compte que la classe principale reste claire et que la gestion de la commande nécessite peu de codes au final.
Dernière modification par boozaa (21 May 2011 09:45) Hors ligne short-url : #10 20 May 2011 10:58
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitEt pourquoi avoir créé le package net.thgbm.forum.Utils ? Vous vous souvenez, au début de ce tuto je vous avez demandé de créer un package 'net.thgbm.forum.Utils' en expliquant qu'on y rangerait certaines de nos fonctions ? Je vous propose d'y créer une classe 'Message' qui nous permettra de définir des fonctions comme:
qui seront utiles pour envoyer respectivement :
Vous voyez l'idée ? On va créer ces fonctions car il y a de fortes chances pour qu'on les utilisent beaucoup dans nos développements et qu'elles sont toutes les 3 de même nature. Concrètement on cherche à faire quoi ? Et bien concrètement on souhaite remplacer notre envoi de message de notre HelloPlayerListener:
Par ceci :
Et on pourra l'utiliser à chaque fois que l'on souhaite envoyer des messages à un joueur avec nos couleurs. Mise en place Faites un clic droit sur votre package 'net.thgbm.forum.Utils' et 'New' -> 'Class'. Voici le code à y insérer :
C'est tout ! Maintenant modifions notre HelloPlayerListener :
Dernière modification par boozaa (21 May 2011 12:53) Hors ligne short-url : #11 20 May 2011 11:00
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkit*reservé* Hors ligne short-url : #12 20 May 2011 11:05
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkit*reservé* Hors ligne short-url : #13 20 May 2011 14:12
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitOuais merci Boozaa ! Après Tickle toi aussi tu t'y mets Hors ligne short-url : #14 21 May 2011 10:01
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkit@Aliassse - merci pour les fichiers Hors ligne short-url : #15 03 May 2012 11:46
Re : [Tuto Obsolete] Créez votre premier plugin pour bukkitTuto obsolète concernant la nouvelle gestion des évènements dans bukkit. Hors ligne |