Problème avec les SharedMonsterAttributes



  • Bonjour alors voilà je voudrais faire des SharedMonsterAttributes variable sauf que je n'y parviens pas, je m'explique j'ai fais un random archi et je voudrai que si ce random est entre 1 et 5 alors on applique un SharedMonsterAttributes et si il est entre 6 et le maximum géré par ma config Config.chanceArchi.

    Saur que si mon montre est un archi entre 1 et 5 et bien cela ne change rien son SharedMonsterAttributes ne s'applique pas.

    Ma classe:

    package com.degraduck.minefus.entity.mobs;
    
    import java.util.Random;
    
    import com.degraduck.minefus.Config;
    
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.SharedMonsterAttributes;
    import net.minecraft.entity.monster.EntityMob;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.projectile.EntityArrow;
    import net.minecraft.util.DamageSource;
    import net.minecraft.world.World;
    
    public class EntityBouftou extends EntityMob {
    
    private int niveau;
    private double vie;
    private boolean angry = false;
    private int archi;
    
    public EntityBouftou(World world) {
    super(world);
    
    this.vie = this.getHealth();
    this.setSize(1, 0.5F);
    
    this.archi =   0 + (int)(Math.random() * ((Config.chanceArchi - 0) + 1));
    
    }
    
    public void onUpdate()
    {
    
    if(archi > 5)
    {
    this.setCustomNameTag("§l§bBouftou Niv. " + this.niveau + " §l§4"+ vie + "§l§4Pv");
    }
    
    else
    {
    this.setCustomNameTag("§l§5Boufdégou le Refoulant Niv. " + this.niveau + " §l§4"+ vie + "  §l§4Pv");
    }
    
    super.onUpdate();
    }
    
    public void applyEntityAttributes()
    {
    this.niveau = (int) Math.round((Config.niveauMaximum - Config.niveauMinimum)*Math.random()) + Config.niveauMinimum;
    super.applyEntityAttributes();
    
    if(archi < 6)
    {
    this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20D + (niveau * 5));
    }
    
    else
    {
    
    this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20D + (niveau * 2.25));
    this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(6D + (niveau * 0.5));
    this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(0.5D);
    this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.8D);
    this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(4D);
    }
    
    }
    
    //Distance de détection de la cible à attaquer
    protected Entity findPlayerToAttack()
    {
    if(isAngry()){
    EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 2D); //1d = distance de detection
    return entityplayer != null && this.canEntityBeSeen(entityplayer) ? entityplayer : null;
    }
    return null;
    }
    
    //Si le mob recoit des dommages il attaque
    public boolean attackEntityFrom(DamageSource source, float degat)
       {
           if (this.isEntityInvulnerable())
           {
               return false;
           }
           else
           {
               Entity entity = source.getEntity();
    
               setAngry(true);
    
               if (entity != null && !(entity instanceof EntityPlayer) && !(entity instanceof EntityArrow))
               {
                degat = (degat + 1.0F) / 2.0F;
               }
    
               return super.attackEntityFrom(source, degat);
           }
       }
    
    private void setAngry(boolean b) {
    this.angry = b;
    
    }
    
    private boolean isAngry() {
    // TODO Auto-generated method stub
    return this.angry;
    }
    
    }
    
    


  • Ta méthode est appelée ?



  • Quand je met un system.out.println dans le if(archi<6) il n'est pas appelé alors que dans le CustomNameTag ça fonctionne. et  les SharedMonsterAttributes dans le else fonctionnent bien.

    EDIT: J'ai trouvé l'erreur mon random archi n'était pas appelé là ou il le fallait.