MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème Sauvegarde Boolean ExtendedEntityProperties

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    12 Messages 3 Publieurs 1.7k Vues 1 Watching
    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.
    • 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
                        • 1 / 1
                        • Premier message
                          Dernier message
                        Design by Woryk
                        ContactMentions Légales

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB