Créer des effets de potions
-
Sommaire
Introduction
Yellow à tous ! Je reviens parmi vous pour vous faire un petit tutoriel fort sympathique !
Et ce, pour créer des effets de potions customs ! Et seulement des effets de potion, pas la potion !
Bonne lecture !Pré-requis
- Créer la base de votre mod
- Une goutte d’Eclipse, un zeste de Java et une pincée de temps !
Code
Classe CustomPotion :
Commençons par créer la classe CustomPotion.java que nous extendrons Potion.java
Et voilà ce que ça nous donne:import net.minecraft.potion.Potion; public class CustomPotion extends Potion { protected CustomPotion(int p_i1573_1_, boolean p_i1573_2_, int p_i1573_3_){ super(p_i1573_1_, p_i1573_2_, p_i1573_3_); } }
Vu que p_i1573_1_, p_i1573_2_, p_i1573_3_ a relativement un effet vomitif sur mes yeux nous allons changer ça en ID, isBadEffectOrNot, color
Ce qui sera tout de suite plus lisible et plus compréhensible
import net.minecraft.potion.Potion; public class CustomPotion extends Potion{ protected CustomPotion(int id, boolean isBadEffectOrNot, int color, String name) { super(id, isBadEffectOrNot, color); } }
Dans le constructeur ajoutons la fonction pour définir le nom de nos futurs effets de potions !
Voilà pourquoi le petit String name est parmi nous, pour nous simplifier la vie !this.setPotionName("potion." + name);
Ensuite dans la classe il va falloir rajouter 3 fonctions, qui sont les suivantes:
@Override public CustomPotion setIconIndex(int x, int y) { super.setIconIndex(x, y); return this; } public static void loadEffects() { } public static void register() { }
Bien, passons maintenant au vif du sujet en ce qui concerne la création de nos effets de potions !
Entre le constructeur et le début de la classe il nous faut déclarer deux choses:
- L’effet de potion
- L’ID de ce dernier
Pour ce faire rien de plus simple !
public static CustomPotion customEffect; public static int customEffectID;
Ces deux petits bouts de lignes nous servent à créer la potion en elle même (elle est prête à être créée à ce stade) et l’autre à lui définir un ID
Passons à la deuxième fonction “loadEffects()”
et ajoutons ce code que je vous ai préparé !
customEffect = new CustomPotion(customEffectID, true, Color.red.getRGB(), "customEffectDeFifou").setIconIndex(4, 2);
Et expliquons tout ça !
D’une certaine manière cela ressemble à la création d’un bloc ou d’un objet basique ! C’est cool non ?customEffectID = l’ID de notre effet de potion
true = (isBadEffectOrNot) traduction Malus ou Bonus ?
ici c’est un Malus en true et si c’est false c’est un Bonus !
La différence entre les deux ? À vous de voir ! Tout le reste passe par des events !
Color.red.getRGB() = La couleur des particules de potion une fois sur vous
“customEffectDeFifou” = Le nom de la potion dans l’inventaire (L’effet toujours ! Nous ne créons pas d’item potion !)
.setIconIndex(4, 2); = Ajoute une petit icône à votre effet de potion, pour ce faire il faut modifier l’image “inventory.png” qui ce trouve dans la version de minecraft .jar “assets/gui/inventory.png”
Moi je fait comme ça en tout cas, il y a sans doute une autre solution, mais je ne la connais pasEt pour “terminer” dans la classe CustomPotion il faut enregistrer notre potion !
Allez dans la fonction “register()” et ajoutez
CustomPotion.potionTypes[customEffect.getId()] = customEffect;
Pour faire simple:
On get le type de potion que nous avons fait, plus précisément sont ID (/!\ Pas customEffectID nous ne l’avons pas définie encore), puis on l’attribue à notre effet de potion !
Et nous avons terminé la partie où nous créons notre effet de potion !
Mais il manque 2 / 3 trucs encore ! Et il faut aller dans la classe principale !Classe Principale :
Bien, définissons un ID à notre potion !
Dans la fonction “preInit” (Pré-Initialisation), ajoutez ceci:
CustomPotion.customEffectID = 30;
Il faut que l’ID soit supérieur à 24 et inférieur à 32 sinon votre jeu crashera !
Ce qui vous laisse la possibilité de créer …8 effets de potions…C’est NUL ! REMBOURSÉ ! REMBOURSÉ !
Petite aparté…
La classe Potion.java est comme l’ancienne classe Block.java il faut passer par des ID pour créer notre effet, mais, car il y a toujours un MAIS, seulement 32 slots sont réservés pour les potions ! Ce qui nous laisse pas énormément de possibilités !
La seule solution serait de passer par l’ASM et de modifier cette valeur, mais là encore je ne suis pas sûr de mes dires !
A confirmer…Il vous faut encore ajouter deux choses !
Dans la fonction “init” (Initialisation)CustomPotion.loadEffects(); CustomPotion.register();
Et voilà notre effet de potion est prêt ! Mais le mieux est de faire en sorte que si notre effet est actif par exemple notre joueur aille plus vite ? Et pour faire ce genre de modification sur le joueur, moi je passe par les events !
Bonus
Comment faire pour que notre joueur aille plus vite si il a l’effet de potion actif ?
GROS INDICE:
if(event.entityLiving instanceof EntityPlayer) { if (event.entityLiving.isPotionActive(BOTIEffect.superPowersFlash)) { if (event.entityLiving.getActivePotionEffect(BOTIEffect.superPowersFlash).getDuration() == 0) { event.entityLiving.removePotionEffect(BOTIEffect.superPowersFlash.id); return; } if (event.entityLiving.worldObj.isRemote) { if(event.entityLiving.onGround) { event.entityLiving.motionX *= 1.6F; event.entityLiving.motionZ *= 1.6F; } } } }
Je ne vous dirais pas quel event utiliser, car là j’en ai trop dit ! À vous de trouver !
Résultat
Fichiers .lang
en_US.lang:
potion.customEffectDeFifou=Custom Effect
fr_FR.lang:
potion.customEffectDeFifou=Effet Custom
Dans l’inventaire :
Les particules sont rouges :
Crédits
Rédaction :
Correction :
Ce tutoriel de 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 -
Tu ne développe pas assez, je te demande une chose dure mais pourquoi pas montrer les craft de potion (j’ai mis au moins un mois a comprendre c’est très dure) ? Et développer un peux avec les attributs… Sinon très bon tutoriel et quand je dit développer je veux dire montrer comment changé des attributs, modifier la vue… Et il y a deux ou trois autre fonction cool, si tu peux les expliquer.
-
Sauf erreur de ma part, il a écrit que ce n’est que les effets de potion, pas les potions en elles-mêmes
-
les modifications de l’ath sont provoquer par l’effet de la potion d’après mon point de vue
-
@‘Fine33’:
Sauf erreur de ma part, il a écrit que ce n’est que les effets de potion, pas les potions en elles-mêmes
Oui ce n’est que les effets de potions car je trouve que cela reste simple de créer un item potion et de faire en sorte d’addPotionEffect
Envoyé depuis mon Android edition by sfr STARADDICT avec Tapatalk
-
Oui, je répondais à Diangle
-
tu peut le faire en partie bonus sa fait plus de contenu
-
Je trouves pas pour le bonus… Help Please
-
Up, tu peux dire comment rajouter des effets autres que speed par exmple pour fusionner 2 effets de potion sous un autre nom etc… Ou comment créer des effets completement customs ?
-
#event tu mes un if(l effet est actif) et tu fais ce que tu veux a l intérieur c est pas sorcier !
-
Je peux débuter non ?
-
@‘sosoh’:
Je peux débuter non ?
Bah Va voir un tuto sur java car c’est la base
-
@‘pulganr’:
@‘sosoh’:
Je peux débuter non ?
Bah Va voir un tuto sur java car c’est la base
Mais je ne maitrise pas les events encore c’est pour ca… D’ailleurs j’ai toujours pas trouvé… Je cherche dans toutes les classes des events mais je ne trouves pas l’event pour savoir si un joueur a un effet de potion…
-
Tu peux m’aider, j’ai créer une classe avec mon event:
package com.harrypotter.sosoh.common; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.Type; import cpw.mods.fml.relauncher.Side; public class EventHandler { public static class PlayerTickEvent extends TickEvent { public final EntityPlayer player; public PlayerTickEvent(Phase phase, EntityPlayer player) { super(Type.PLAYER, player instanceof EntityPlayerMP ? Side.SERVER : Side.CLIENT, phase); this.player = player; } } }
Mais je ne trouves pas comment checker si le joueur a mon effet… J’ai essaye avec ca mais ca ne marche pas:
package com.harrypotter.sosoh.common; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.Type; import cpw.mods.fml.relauncher.Side; public class EventHandler { public static class PlayerTickEvent extends TickEvent { public final EntityPlayer player; public PlayerTickEvent(Phase phase, EntityPlayer player) { super(Type.PLAYER, player instanceof EntityPlayerMP ? Side.SERVER : Side.CLIENT, phase); this.player = player; if player.getActivePotionEffect(SomniferePotionEffect){ } } } }
-
S’il vous plait je galere je ne trouves pas
-
C est cette ligne
- if (event.entityLiving.isPotionActive(BOTIEffect.superPowersFlash))
-
Ah ok merci! J’etais bloqué et tu me rend extrêmement service
-
Déjà tu devais lire le tutoriel sur les event car le code que tu as mit ne risque pas du tout de fonctionner …
Et 24h entre chaque message, merci de respecter le règlement. -
J’ai mis le code, suivis le tuto sur les events mais je ne sais pas par quoi remplacer
:::
[size=xx-smallBOTIEffect][size=xx-small.][size=xx-smallsuperPowersFlash]
:::J’ai remplacer BOTIEffect par SomniferePotionEffect, mais pour le superPowersFlash je ne sais pas quoi mettre car sinon ca fais une erreur…
Et la j’ai pas besoin d’attendre 24h pour répondre non ? Car tu as mis un message toi non?
-
Oui, 24h entre deux posts de la même personne, dans l’autre cas il suffit d’éditer le message …
C’est presque la même règle sur tous les forums, ça évite le spam.Logiquement tu mets ClassOuSeTrouveLaDeclarationDeLaPotion.nomDuField
ça c’est la base en Java, il faut l’apprendre (il y a un bon tutoriel sur OpenClassRoom) sinon tu n’arrivera à rien.