• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu SharedMonsterAttributes variable

    1.7.x
    1.7.10
    2
    3
    702
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Kujaroth
      Kujaroth dernière édition par

      Salut, me voilà de retour ^^’

      je suis bloqué depuis un moment sur se problème. J’ai un monstre qui pop entre le level 1 a 5. J’aimerais que celon le niveau du mob, des stats lui soit généré, j’ai essayé pas mal de chose, comme passé par des switchs lors de d’attributions des attribues et autres… Mais soit le monstre mourrai au pop, soit il avait la 20 PV et non le bon nombre… Je pensais tenir un truc pas mal du genre :
      this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(Config.HealthArakne * Config.xHealthArakne * this.level); > vie de base * multiplicateur * niveau
      Dès que j’y met la variable this.level, il meurt au spawn… Je sèche et tourne en rond…

      J’ai même essayé avec un worldObj.rand.nextInt() a la place du Math.random mais la même ><

      Merci de m’avoir lu !

      Voici ma classe :

      public class EntityMobArakne extends EntityMob {
      
          public int level;
          public float hitbox;
      
          public EntityMobArakne(World world) {
      
              super(world);
      
              this.level = (int) Math.round(Math.random() * (Config.levelDifArakne - 1)) + Config.levelEcaArakne + Config.levelMinArakne;
              this.hitbox = (float) (Config.sizeArakne + (Config.diffSizeMobs * (this.level - 1)));
              this.setSize(this.hitbox, this.hitbox - 0.45F);
          }
      
          public void setDead() {
              super.setDead();
          }
      
          public void onUpdate()
          {
              this.setCustomNameTag("Arakne Niv." + this.level);
      
              if (worldObj.isRemote)
      {
                  System.out.print("Vie = " + this.getMaxHealth() );
              }
      
              super.onUpdate();
          }
      
          @Override
          public void readFromNBT(NBTTagCompound compound) {
              super.readFromNBT(compound);
              compound.getInteger("level");
          }
      
          @Override
          public void writeToNBT(NBTTagCompound compound) {
              super.writeToNBT(compound);
              compound.setInteger("level", this.level);
          }
      
          public Entity findPlayerToAttack() {
              EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, Config.speedAggroArakne);
              return entityplayer != null && this.canEntityBeSeen(entityplayer) ? entityplayer : null;
          }
      
          public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) {
              if (this.isEntityInvulnerable()) {
                  return false;
              } else {
                  this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(Config.speedAggroArakne);
                  return super.attackEntityFrom(p_70097_1_, p_70097_2_);
              }
          }
      
          public void applyEntityAttributes()
      {
              super.applyEntityAttributes();
              this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(Config.HealthArakne * Config.HealthArakne * this.level);
          }
      }
      
      

      >! Bonjour/Bonsoir,
      >! Vous désirez un Modèle ou une Texture pour votre Mod ? Vous pouvez faire un…

      1 réponse Dernière réponse Répondre Citer 0
      • Reden
        Reden dernière édition par

        Regarde à la ligne 163 du EntityLivingBase, c’est ici qu’est appelé la méthode applyEntityAttributes();
        Dans ton cas tu l’appelles donc dans ton constructeur avec le super(world), c’est à dire **avant que tu attribues une valeur à ta variable level.
        **Quand ta méthode applyEntityAttributes() est appelée tu as donc level = 0; d’où ton erreur 😉
        Par conséquent il faut placer l’initialisation de level avant le super(), or cela n’est pas possible (erreur lors de la compilation), donc tu as deux choix:

        • soit tu initialise level dans applyEntityAttributes() avant d’affecter ta valeur à maxHealth
        • soit tu initialise level directement à la ligne où tu déclares cette variable, en dehors du constructeur

        Bonne journée 😉

        1 réponse Dernière réponse Répondre Citer 0
        • Kujaroth
          Kujaroth dernière édition par

          Merci… Je t’avoue que j’ai pas pensé a placer avant le super()… Donc j’ai fait initialiser le level dans applyEntityAttributes() avant d’affecter ta valeur à maxHealth et ça marche !

          Du coup, tout est bon ! TY

          >! Bonjour/Bonsoir,
          >! Vous désirez un Modèle ou une Texture pour votre Mod ? Vous pouvez faire un…

          1 réponse Dernière réponse Répondre Citer 0
          • 1 / 1
          • Premier message
            Dernier message
          Design by Woryk
          Contact / Mentions Légales

          MINECRAFT FORGE FRANCE © 2018

          Powered by NodeBB