Bug Tag Boolean pour un itemstack



  • Salut (oui c'est encore moi, je m'excuse j'avoue je spam la touche "Nouveau Sujet" x) mais en ce moment c'est pas la période où j'arrive à résoudre tous mes problèmes car en ce moment je découvre plein de nouvelle choses ^^) à tous et à toutes
    Après cette longue salutation je vous pose le problème

    J'ai crée un nouvel item mangeable et je souhaite faire enregistrer un boolean de base false à son itemstack, seul problème j'ai besoin que vous vérifier si mon code marchera par rapport à ce que je souhaite au final : créer une nouvelle pomme qui quand on la mange va passer un boolean sur true et grâce à ce boolean je pourrai faire certaines conditions dans mon event handler mais d'où le but  des tag je veux que chaque pomme sur la map de chaque joueur ait son propre boolean et que un boolean passé sur true pour un joueur ne va pas affecter les booleans des autres pommes des autres joueurs sur la map. D'où le but des tag comme je l'ai dit contrairement à de simples variables dans la class.
    Bon trêves de bavardages voici ma class certes elle n'est pas finie surtout au niveau du stack.size qu'il faut décrémenter mais je n'ai pas eu le temps je me suis surtout focalisé sur sa fonction principale.

    
    package mrplaigon.fr.testMod.item;
    
    import java.util.List;
    
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.ItemFood;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.world.World;
    
    public class ItemPomme extends ItemFood
    {
    
    public ItemPomme (int gigot, float saturation, boolean pourChien) 
    {
    super(gigot, saturation, pourChien);
    this.setAlwaysEdible();
    }
    
        public ItemStack onEaten(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer)
        {
        System.out.println("Methode onEaten appelee");
        if (stack.stackTagCompound != null) 
        {
            stack.stackTagCompound.setBoolean("mangee", true);
        }
    return stack;
        }
    
        public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5)
        {
                if (stack.hasTagCompound())
                     {
                         NBTTagCompound var2 = stack.getTagCompound().getCompoundTag("mangee");
    
                         if (var2 != null)
                         {
                              var2.getTag("mangee");
                          System.out.println("boolean mangee = " + stack.stackTagCompound.getBoolean("mangee"));
                         }
                     }
         }
    }
    

    Encore une fois je vous remercie pour votre aide constance et je vous souhaite bonne chance pour résoudre le problème (même si je sais que certain n'en auront pas besoin, n'est-ce pas ? ^^).


  • Administrateurs

    NBTTagCompound var2 = stack.getTagCompound().getCompoundTag("mangee");
    
    if (var2 != null)
    {
    

    ???
    if(stack.getTagCompound().hasKey("mangee"))

    C'est pas plus compliqué que ça.



  • @'robin4002':

    NBTTagCompound var2 = stack.getTagCompound().getCompoundTag("mangee");
    
    if (var2 != null)
    {
    

    ???
    if(stack.getTagCompound().hasKey("mangee"))

    C'est pas plus compliqué que ça.

    voici à quoi ressemble le contenu de ma méthode onUpdate

    
                 if (stack.hasTagCompound())
    
                     {
                         NBTTagCompound var2 = stack.getTagCompound().getCompoundTag("mangee");
    
                         if (var2 != null)
                         {
                        if(stack.getTagCompound().hasKey("mangee"))
                        {
                              var2.getTag("mangee");
                          System.out.println("boolean mangee = " + stack.stackTagCompound.getBoolean("mangee"));
                        }
                         }
                     }
    

    2 questions 
    Qu'apporte hasKey de + que mon null check ?
    Et deuxième question même avant que j'ajoute ta condition le message dans les logs ("boolean mangee = " + …) ne s'affichait pas et là, avec la condition il ne s'affiche toujours pas, que faire de + ?


  • Administrateurs

    Justement vire complètement le if (var2 != null) il fait tout buggué car stack.getTagCompound().getCompoundTag("mangee"); sera toujours null.
    Il faut bien distinguer un tag compound d'une valeur stocké, ce n'est pas la même chose.