Problème effet de Potion custom


  • Bonsoir tout le monde:

    J’ai suivi le tuto de ZeAmateis sur les effets de potion.

    Tout fonctionne correctement appart le fait que quand l’effet est appliqué a un joueur il ce prend un coup.

    Voici mon code:

    
    package potion;
    
    import java.awt.Color;
    
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.potion.Potion;
    import net.minecraft.util.DamageSource;
    
    public class Regeneration extends Potion
    {
    
    public static Regeneration customEffect;
    public static int customEffectID;
    
    protected Regeneration(int id, boolean isBadEffectOrNot, int color, String name)
    {
    super(id, isBadEffectOrNot, color);
    this.setPotionName("potion." + name);
    }
    
    @Override
    public Regeneration setIconIndex(int x, int y)
    {
      super.setIconIndex(x, y);
      return this;
    }
    
    public static void loadEffects()
    {
    customEffect = new Regeneration(customEffectID, false, Color.red.getRGB(), "regeneration1").setIconIndex(4, 2);
    }
    
    public static void register()
    {
    Regeneration.potionTypes[customEffect.getId()] = customEffect;
    }
    
    public void performEffect(EntityLivingBase entity, int p_76394_2_)
    {
       if (this.id == 25)
       {
           if (entity.getHealth() < entity.getMaxHealth())
           {
               entity.heal(1.0F);
           }
       }
    }
    
    public boolean isReady(int p_76397_1_, int p_76397_2_)
    {
       return p_76397_1_ >= 1;
    }
    
    }
    

    Donc le soin marche correctement mais le jouer ce prend un coup ….

    J’ai essayé différente fonction de la classe Potion de minecraft sans aucun succé…

    Merci d’avance


  • 
    public boolean isReady(int p_76397_1_, int p_76397_2_)
    {
    return p_76397_1_ >= 1;
    }
    
    

    tu peux aussi mettre return true, ça ira plus vite puisque juste avant il y a : ```java
    if (this.duration > 0)

    
    Penses aux @Override.
    
    Question : qaund tu dis que tu prends un coup, est-ce que tu perds de la vie ? Ou est-ce que tu as juste le son et l'animation comme si tu était touché.

  • d’accord merci pour ta réponse et pour être plus clair non je ne perd pas de vie mais il y a le son et l’animation comme si le joueur était touché ….


  • @‘Antoine_’:

    d’accord merci pour ta réponse et pour être plus clair non je ne perd pas de vie mais il y a le son et l’animation comme si le joueur était touché ….

    Même lorsque tu appliques l’effet via la commande /effect ?

    EDIT :
    où est-ce que le customEffectID est donné ?


  • Oui l’ID est 25 pour mon effet ….

    Même avec la commande /effect j’ai le même soucis … je ne comprend pas d’ou vient le problème.


  • up svp


  • @‘Antoine_’:

    up svp

    Là je vois pas du tout d’où vient le problème, renvoi toutes les classes en rapport (ex : classe de l’effet de potion, classe où l’effet est appelé, etc.)


  • Voila mes classe:

    Classe de l’effet:

    package potion;
    
    import java.awt.Color;
    
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.potion.Potion;
    import net.minecraft.util.DamageSource;
    
    public class Regeneration extends Potion
    {
    
    public static Regeneration customEffect;
    public static int customEffectID;
    
    protected Regeneration(int id, boolean isBadEffectOrNot, int color, String name)
    {
    super(id, isBadEffectOrNot, color);
    this.setPotionName("potion." + name);
    }
    
    @Override
    public Regeneration setIconIndex(int x, int y)
    {
    super.setIconIndex(x, y);
    return this;
    }
    
    public static void loadEffects()
    {
    customEffect = new Regeneration(customEffectID, false, Color.red.getRGB(), "regeneration1").setIconIndex(4, 2);
    }
    
    public static void register()
    {
    Regeneration.potionTypes[customEffect.getId()] = customEffect;
    }
    
    public void performEffect(EntityLivingBase entity, int p_76394_2_)
    {
    if (this.id == 25)
    {
    if (entity.getHealth() < entity.getMaxHealth())
    {
    entity.heal(1.0F);
    }
    }
    }
    
    public boolean isReady(int p_76397_1_, int p_76397_2_)
    {
    return p_76397_1_ >= 1;
    }
    
    }
    

    Classe principal

    
    Regeneration.customEffectID = 25;
    Regeneration.loadEffects();
    Regeneration.register();
    
    

    Je cherche aussi mais rien de concluant


  • @‘Antoine_’:

    Voila mes classe:

    Classe de l’effet:

    package potion;
    
    import java.awt.Color;
    
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.potion.Potion;
    import net.minecraft.util.DamageSource;
    
    public class Regeneration extends Potion
    {
    
    public static Regeneration customEffect;
    public static int customEffectID;
    
    protected Regeneration(int id, boolean isBadEffectOrNot, int color, String name)
    {
    super(id, isBadEffectOrNot, color);
    this.setPotionName("potion." + name);
    }
    
    @Override
    public Regeneration setIconIndex(int x, int y)
    {
      super.setIconIndex(x, y);
      return this;
    }
    
    public static void loadEffects()
    {
    customEffect = new Regeneration(customEffectID, false, Color.red.getRGB(), "regeneration1").setIconIndex(4, 2);
    }
    
    public static void register()
    {
    Regeneration.potionTypes[customEffect.getId()] = customEffect;
    }
    
    public void performEffect(EntityLivingBase entity, int p_76394_2_)
    {
       if (this.id == 25)
       {
           if (entity.getHealth() < entity.getMaxHealth())
           {
               entity.heal(1.0F);
           }
       }
    }
    
    public boolean isReady(int p_76397_1_, int p_76397_2_)
    {
       return p_76397_1_ >= 1;
    }
    
    }
    

    Classe principal

    
    Regeneration.customEffectID = 25;
    Regeneration.loadEffects();
    Regeneration.register();
    

    Je cherche aussi mais rien de concluant

    Tu n’as pas rajouté les balises @Override


  • Oui désolé mais ceci ne change pas grand choses malheureusement …

    
    public class Regeneration extends Potion
    {
    
    public static Regeneration customEffect;
    public static int customEffectID;
    
    public Regeneration(int id, boolean isBadEffectOrNot, int color, String name)
    {
    super(id, isBadEffectOrNot, color);
    this.setPotionName("potion." + name);
    }
    
    @Override
    public Regeneration setIconIndex(int x, int y)
    {
    super.setIconIndex(x, y);
    return this;
    }
    
    public static void loadEffects()
    {
    customEffect = new Regeneration(customEffectID, false, Color.red.getRGB(), "regeneration1").setIconIndex(4, 2);
    }
    
    public static void register()
    {
    Regeneration.potionTypes[customEffect.getId()] = customEffect;
    }
    
    @Override
    public void performEffect(EntityLivingBase entity, int p_76394_2_)
    {
    if (this.id == 25)
    {
    if (entity.getHealth() < entity.getMaxHealth())
    {
    entity.heal(0.05F);
    }
    }
    }
    
    @Override
    public boolean isReady(int p_76397_1_, int p_76397_2_)
    {
    return true;
    }
    
    }
    
    

    up svp


  • 
    entity.heal(0.05F);
    
    

    il vaut mieux mettre des valeurs entières comme 1.0F.

    
    @Override
    public Regeneration setIconIndex(int x, int y)
    {
    super.setIconIndex(x, y);
    return this;
    }
    
    

    Autant supprimer toute cette fonction, ou mettre return super.setIconIndex(x,y); .

    [java
    @Override
    public void performEffect(EntityLivingBase entity, int p_76394_2_)
    {
    if (this.id == 25)
    {
    if (entity.getHealth() < entity.getMaxHealth())
    {
    entity.heal(0.05F);
    }
    }
    }
    [/java]
    Essaie sans la condition if (this.id == 25) .


  • Merci pour le nombre non entier ça fonctionne comme même très bien et j’ai fait les test avec 1.0F ca ne résout pas le problème…

    Je vais essayer sans la condition if mais j’ai peux d’espoir car l’effet de heal s’applique correctement sauf que le joueur ce prend des coups…

    Edit: après le test aucun changement


  • Qu’est-ce qu’il se passe si tu met en commentaire le entity.heal() (ctrl + shift + c) ?