Nouveau Achievement !
-
Sommaire
Introduction
Ici, vous allez apprendre a crée votre propre Succès ! C’est très rapide et simple !
Pré-requis
Rien de particulier.
Savoir manipuler un peu les events forge
Code
Classe Principale
Vous rajoutez simplement ceci dans vos init de votre classe principal.
new AchievementHandler();
On va crée votre classe après.
Classe des Succès
En premier lieu, vous allez créer une nouvelle classe dans votre mod, rien comme extend ni d’importation. Cela va etre la classe général de vos Achievements.
Je vais appeler ma classe AchievementHandler.public class AchievementHandler { //TOUTE la suite ici }
Vous voila maintenant avec une classe vierge, nous allons y rajouter des choses.
En tant que premiere chose, vous ajoutez de cette maniere vos Achievementpublic static Achievement votresucces;
Celle ci ajoute votre Achievement.
Maintenant, on va register et initialiser vos Achievements. Pour cela, rien de plus simple ! rajoutez simplement ceci :
public AchievementHandler() { init(); register(); }
/!\ RAJOUTEZ BIEN TOUT ! LE PUBLIC Y COMPRIS ! CE N’EST PAS UNE FAUTE DE MA PART.
Vous allez avoir deux erreurs sur votre init et votre register, c’est NORMAL.Maintenant, vous rajoutez celle ci, elles vont déclarer votre init et votre register:
private void init() { } private void register() { }
Voila, dans ces fonctions, vous allez déclarer vos Achievements, comme cela:
L’init:
tuto = new Achievement("achievement.votresucces", "votresucces", POSITION_X, POSITION_Y, BlocksTutoriel.blockTest//Le Bloc en guise d'affichage);
Voila un exemple :
tuto = new Achievement("achievement.tuto", "tuto", 1, 1, BlocksMod.blockTest);
Voila pour un Achievement Simple, si vous voulez en faire un avec un graphisme différent (Piquant), vous rajoutez simplement ceci :
, (Achievement) null).initIndependentStat().setSpecial();
derriere le bloc choisi.
On a maintenant un Achievement ayant un style différent, mais il faut que vous ajoutez le register ! (Bah oui sinon ça marche pas )
Voila ce que vous avez à rajouter:votresucces.registerStat();
Mais Tituya, les Achievements, ils sont où ? J’y viens t’inquiète pas !
Dans le register, on va crée une nouvelle page de succès. Aussi simplement que ceci:
AchievementPage.registerAchievementPage(new AchievementPage("votresucces", new Achievement[] { vos, succes}));
Vous avez un succès disponible !
Pour simplement relier deux succès entre eux par une flèches, vous rajoutez ceci derriere votre bloc de décoration de succès:
, nomSuccesAQui il est relié
Maintenant, pour ajouter le succes au joueur, vous devrez utilisez ceci dans une fonction avec player:
player.addStat(AchievementHandler.votresucces);
ou encore dans un event comme ceci:
event.getPlayer().addStat(AchievementHandler.votresucces);
Lang
Dans votre fichier lang, pas grand chose à faire, vous rajoutez juste ceci:
achievement.votresucces=Join achievement.votresucces.desc=Join the Minecraft World !
On donne le nom du succès, puis son texte en guise de description.
Bonus
Dans ce bonus, on va voir comment faire un succès dès que le joueur rejoins la partie:
Vous allez crée une classe dans vos event nommé JoinEvent.
AU préalable, vous allez la déclarer dans votre classe avec vos event comme ceci:MinecraftForge.EVENT_BUS.register(new JoinEvent());
Maintenant dans votre classe JoinEvent, mettez ceci:
@SubscribeEvent public void onPlayerJoin(PlayerLoggedInEvent event) { EntityPlayer player = event.player; player.addChatMessage(new TextComponentString("§4Hey " + player.getDisplayNameString())); //Un message normal coloré avec le nom du joueur après player.addStat(AchievementHandler.test); // ici, on déclare notre succès ! }
Résultat
J’ai crée trois event qui hérite tous entre eux. On vois très bien que ma nouvelle page “Topaze Mod” est faite
Crédits
Rédaction : Tituya
Ce tutoriel de Tituya publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International -
Salut,
Premièrement bien joué, ça fait plaisir de te voir rédiger des tutos pour mff, on sent que tu t’investis pour les membres, bref c’est cool de ta part !Sinon, les rares critiques qu’on pourrait te reprocher serait de soigner tes phrases (ponctuation, orthographes et tournures quelquefois maladroites) ou même la forme générale de la page (“Classe générale” et “Classe principale”, c’est quoi la différence o_O) ?, un peu de couleur sur les termes importants ne ferait pas de mal, un peu trop de balises java, tes lecteurs ne sont pas assistés, tu pourrais ainsi limiter leur nombre de copier-coller, etc…).
La convention serait à revoir, on ne nomme avec des majuscules et des underscores, que les constantes, et non de simples variables static. L’organisation des packages et des classes serait à revoir, notamment “AchievementTuto”, une classe pour regrouper tous tes achievements ?! Mauvais choix selon moi, j’aurais plutôt pencher pour un “AchievementHandler”, mais ce n’est que mon avis ^^
Finalement, tu aurais pu faire un bonus, non pas sur l’obtention d’un Achievement, mais sur la petite méthode Achievement#setStatStringFormatter, qui en aurait intéressé + d’un (notamment sur un compteur de mobs à kill, affichables et décrémentant en temps réel !).
A part ça, c’est propre, c’est good, rien à dire, tu gères ! -
Voila, update du topic, je ne connaissait pas la méthode Achievement#setStatStringFormatter, je vais m’y pencher dessus !
J’ai enlever l’exemple pour limiter le copier coller.
Sinon, pas d’erreur dans mes codes ? J’ai un petit doute sur ça:event.getPlayer().addStat(AchievementHandler.votresucces);
Car je l’ai ajouter sur le coup et apres test, je n’arrive pas vraiment a la faire fonctionner
-
La fonction EntityPlayer#addStat, doit être appelé côté serveur. Du coup, assure-toi que ton event soit bien appelé côté serveur.
-
Bh maintenant il faut attendre pour voir si le tutoriel sera validé. Je sais que j’ai chercher pendant pas mal de temps sur le forum la création de succès, donc j’espère ne pas être le seul dans ce cas là et que mon tutoriel va servir à des personnes !
Sinon, niveau rédaction, tu trouve que c’est mieu ? -
Je pense que tu peut encore l’améliorer, déjà au niveau des sauts de ligne et aussi quand tu dis :
Rajoutez :
, (Achievement) null).initIndependentStat().setSpecial();
Même si je comprend ce que tu veux dire c’est pas très clair, je te conseille de remettre le constructeur entièrement :
new Achievement("achievement.tuto", "tuto", 1, 1, BlocksMod.blockTest, null).initIndependentStat().setSpecial();
Il y a plusieurs endroits comme celui-ci dans ton tutoriel. Et comme l’a dit Plaigon parle aussi de Achievement#setStatStringFormatter, car pour ma part un tutoriel simple comme celui-ci doit être complet.
Sinon ça me parait pas trop mal, cependant je me demande pourquoi tu n’instancie pas tes Achievements directement lors de leur déclaration car il me semble pas qu’il y est de restriction au niveau du moment où les créer et les enregistrer
-
J’ai appris à le faire comme cela donc… bah je vais regarder vraiment de plus près et essaye de renseigner au maximum mes classes