MFF

    Minecraft Forge France
    • Récent
    • Populaire
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème Sauvegarde Boolean ExtendedEntityProperties

    Planifié Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    12 Messages 3 Publieurs 2.1k Vues 1 Abonné
    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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Salut,
      Si c’est pour un mod privé tu peux rester sur les DataWatcher.
      Si c’est pour un mod public utilises les DataWatcher uniquement sur tes propres entités. Pas sur un extended entity properties il y a trop de risque de conflit.

      Pour ton code : tu get la valeur de hasKitSecour dans la fonction loadNBTData mais tu ne fais rien avec cette valeur … Il faudrait peut-être update le datawatcher avec cette valeur non ?

      1 réponse Dernière réponse Répondre Citer 0
      • DeletedD Hors-ligne
        Deleted
        dernière édition par

        En fait je la get mais elle est modifiée, puisque dans une classe d item à part, dans le onItemRightClick, je me sers de ma méthode setHasKitSecour

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002R Hors-ligne
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
          dernière édition par

          Heu non.
          Là tu as ça :

          @Override
          public void loadNBTData(NBTTagCompound compound)
          {
              NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
              //this.hasKitSecour = properties.getBoolean("hasKitSecour");
              compound.getBoolean("hasKitSecour");
          }
          

          Tu ne fais absolument rien avec compound.getBoolean(“hasKitSecour”) …

          1 réponse Dernière réponse Répondre Citer 0
          • DiabolicaTrixD Hors-ligne
            DiabolicaTrix Correcteurs Moddeurs confirmés
            dernière édition par

            C’est ce que je t’avais dit dans la shoutbox, il faut ensuite que tu update ton datawatcher.

            1 réponse Dernière réponse Répondre Citer 0
            • DeletedD Hors-ligne
              Deleted
              dernière édition par

              J’utilise le même code dans la classe d’un mob que j’ai fait et tout marche nikel. Voilà de quoi je parlais tout à l’heure

              
                     public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
                     {
              ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
              if(props.hasKitSecour())
              props.setHasKitSecour(false);
              else
              props.setHasKitSecour(true);
                             return stack;
                     }
              
              

              Pour moi vu que c’est la méthode qui load le boolean stocké dans le tag du joueur, y’a pas besoin de set une valeur ou quoique ce soit d’autre. Je ne sais pas si c’est comparable mais j’ai exactement les mêmes méthodes et j’ai donc procédé de la même manière pour un mob que j’ai fait : tag + dataWatcher. Tout marchait et marche encore où moment je vous parle ^^’

              1 réponse Dernière réponse Répondre Citer 0
              • DiabolicaTrixD Hors-ligne
                DiabolicaTrix Correcteurs Moddeurs confirmés
                dernière édition par

                Ouais mais ta méthode load est complètement inutile dans ce cas car tu récupère seulement, il faudrait que tu update. c’est logique si tu fais seulement le récup et que tu le jete, ça sert a rien.

                1 réponse Dernière réponse Répondre Citer 0
                • DeletedD Hors-ligne
                  Deleted
                  dernière édition par

                  Mais mes data watcher sont censés se mettre à jour automatiquement. J’ai trouvé ce tuto où l’auteur ne se sert même pas des NBT, pensez vous que ce soit une bonne idée ?

                  1 réponse Dernière réponse Répondre Citer 0
                  • DiabolicaTrixD Hors-ligne
                    DiabolicaTrix Correcteurs Moddeurs confirmés
                    dernière édition par

                    En fait les NBT c’est pour sauvegarder et dans tout code actuel ils ne servent à rien puisque tu ne les update pas donc si ça fonctionne comma ça, oui tu peux les retirer

                    1 réponse Dernière réponse Répondre Citer 0
                    • DeletedD Hors-ligne
                      Deleted
                      dernière édition par

                      Mais je ne comprends pas ce que tu racontes. Les NBTTagCompound n’ont pas à être mis à jour.
                      Regarde cette entity, tu comprendras mieux

                      
                      public class Assassin extends EntityMob
                      {
                      
                      public Assassin(World world)
                      {
                      super(world);
                      this.setSize(1.25f, 2.85f);
                      //this.experienceValue = 30;
                      }
                      
                      protected void applyEntityAttributes()
                      {
                      super.applyEntityAttributes();
                      this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(16.0D);
                      this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(80.0D);
                      this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.0D);
                      this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(10.0D);//En hard, toujours mettre la valeur souhaitée - 2 pour que le mob et son attaque puissent bien fonctionner !
                      this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(2.0D);
                      }
                      
                      protected void entityInit()
                      {
                      super.entityInit();
                      this.dataWatcher.addObject(2, Byte.valueOf(((byte)0)));
                      }
                      
                      public void writeEntityToNBT(NBTTagCompound compound)
                      {
                      super.writeEntityToNBT(compound);
                      compound.setBoolean("isCrying", this.isCrying());
                      }
                      
                      public void readFromEntityToNBT(NBTTagCompound compound)
                      {
                      super.readFromNBT(compound);
                      compound.getBoolean("isCrying");
                      }
                      
                      public void onLivingUpdate()
                      {
                      if(isCrying() && this.getHealth() > 0.0F && this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getBaseValue() != 0.0D)
                      {
                      worldObj.playSoundAtEntity(this, DyingCraftMod.MODID + ":assassinCry", 5.0F, 1.0F);
                      this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.0D);
                      }
                      if(isCrying() && this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getBaseValue() == 0.0D)
                      {
                      if(worldObj.getTotalWorldTime() % 80 == 0)
                      {
                      this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.23D);
                      this.setCrying(false);
                      }
                      }
                      super.onLivingUpdate();
                      }
                      
                      public boolean attackEntityFrom(DamageSource damagesource, float amount)
                      {
                      if(!worldObj.isRemote && attackingPlayer != null)
                      {
                      if(attackingPlayer.getHeldItem() != null)
                      {
                      if(worldObj.rand.nextInt(3) + 1 == 3)
                      {
                      this.setCrying(true);
                      }
                      }
                      }
                      return super.attackEntityFrom(damagesource, amount);
                      }
                      
                      public boolean isCrying()
                      {
                      return this.dataWatcher.getWatchableObjectByte(2) != 0;
                      }
                      
                      public void setCrying(boolean flag)
                      {
                      byte b0 = this.dataWatcher.getWatchableObjectByte(2);
                      
                      if(flag)
                      {
                      this.dataWatcher.updateObject(2, Byte.valueOf(((byte)1)));
                      }
                      else
                      {
                      this.dataWatcher.updateObject(2, Byte.valueOf(((byte)0)));
                      }
                      }
                      }
                      
                      

                      Je réfléchis encore mais je pense retourner à l’utilisation des packets.
                      Je refais le code le plus proprement possible et je vous le renvoie si ça coince 😉

                      1 réponse Dernière réponse Répondre Citer 0
                      • DeletedD Hors-ligne
                        Deleted
                        dernière édition par

                        C’est bon prob réglé. Je suis passé par les packets, la première fois j’avais dû faire des bêtises avec les conditions du genre isRemote…
                        Merci à vous tous ! 😃

                        1 réponse Dernière réponse Répondre Citer 0
                        • DiabolicaTrixD Hors-ligne
                          DiabolicaTrix Correcteurs Moddeurs confirmés
                          dernière édition par

                          Je ne parle pas du compound, je parle du datawatcher: this.datawatcher.updateObject(1, compound.getBoolean(“isCrying”));

                          1 réponse Dernière réponse Répondre Citer 0

                          Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

                          Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

                          Grâce à votre participation, ce message peut devenir encore meilleur 💗

                          S'inscrire Se connecter
                          • 1 / 1
                          • Premier message
                            Dernier message
                          Design by Woryk
                          ContactMentions Légales

                          MINECRAFT FORGE FRANCE © 2024

                          Powered by NodeBB