Résolu Plusieurs effets de potion sur un item food ?
-
Hello tout le monde, ben en fait j’ai encore un problème.
Voilà j’ai créer un item (extends ItemFood) auquel j’aimerai rajouter des effets de potions lors de la consommation.
Alors quand il s’agit d’un seul effet, c’est assez simple, car il suffit de le mettre dans le constructeur principal (ou même sans class particulière) :public ItemRolledAlga(int foodAmount, float saturation, boolean isWolfFood) { super(foodAmount, saturation, isWolfFood); this.setCreativeTab(wwrp.Common.Modwwrp.wwrpTab2); this.setPotionEffect(Potion.waterBreathing.id, 240, 1, 1.0F); }
Alors là ok ça marche, quand on mange l’item on recoit l’effet, sauf que voilà, on peut pas mettre deux fois this.setPotionEffect (ce qui est logique). Ayant même essayé il ne prend en compte que le dernier effet ajouté.
Alors j’ai essayé des variantes, du genre :
public class ItemSpicyRolledAlga extends ItemFood { private int potionId; private int potionId2; private int potionDuration; private int potionDuration2; private int potionAmplifier; private int potionAmplifier2; private float potionEffectProbability; private float potionEffectProbability2; public ItemSpicyRolledAlga(int foodAmount, float saturation, boolean isWolfFood) { super(foodAmount, saturation, isWolfFood); this.setCreativeTab(wwrp.Common.Modwwrp.wwrpTab2); } public ItemSpicyRolledAlga setPotionEffect(int par1, int par2, int par3, float par4) { this.potionId = Potion.waterBreathing.id; this.potionDuration = 300; this.potionAmplifier = 1; this.potionEffectProbability = 1.0F; return this; } public ItemSpicyRolledAlga setPotionEffect2(int par1, int par2, int par3, float par4) { this.potionId2 = Potion.nightVision.id; this.potionDuration2 = 240; this.potionAmplifier2 = 1; this.potionEffectProbability2 = 1.0F; return this; } }
Mais ça fonctionne pas. Là il prend carrément aucun effet. L’item s’en fiche complètement du code.
Alors j’ai tenté le miracle avec ça :public void onFoodEaten(World world, EntityPlayer player) { player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 250, 1)); player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 500, 1)); }
Mais non toujours pas. Ca donne absolument aucun effet. (Et en plus on peut choisir la chance d’obtenir l’effet, j’en aurai besoin).
Est-ce que vous avez une idée pour obtenir plusieurs effets lors d’une consommation ?
Je vous dis merci d’avance.Nox’
-
@‘Noxon’:
public void onFoodEaten(World world, EntityPlayer player) { player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 250, 1)); player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 500, 1)); }
Presque bon, le problème c’est que tu n’as pas les bons paramètres. C’est :
public void onFoodEaten(ItemStack stack, World world, EntityPlayer player) { player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 250, 1)); player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 500, 1)); }
Et là ça devrait fonctionner.
Pour le random, if(world.rand.nextInt(2) == 0) -> appliquer l’effet. -
Ah mais oui… Merci ça fonctionne !
Par contre comment fonctionne la “chance” dans la fonction aléatoire ?
Le nextInt(2) correspond à une chance sur 2 ? -
je crois que oui
-
Oui, nextInt(2) correspond à un chiffre aléatoire compris entre 0 et 2.
Avec 0 inclu et 2 exclu, donc tu peux avoir {0; 1} -
rand.nextInt(2) créé un nombre comprit entre 0 inclut et 2 exclut. (donc soit 0, soit 1). Comme la condition test si cette valeur vaut 0, ça fait bien une chance sur deux.
if(rand.nextInt(3) == 0) correspondra donc à une chance sur trois, et if(rand.nextInt(3) < 2) à deux chance sur trois.
Après c’est de la probabilité, donc des maths avec un peu de logique c’est simple à comprendre. -
Ok ! Merci pour les explications.