• bonjour c’est (encore) moi j’ai crée des nbt data tag mais j’ai un résultat très étrange voici mes classe

    la classe de l’item

    package com.mathiasetampes.genetic.common;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.nbt.NBTTagList;
    import net.minecraft.world.World;
    import net.minecraftforge.common.util.Constants;
    
    public class Genome extends ItemWithGenome
    {
    public Genome()
    {
       this.setCreativeTab(CreativeTabs.tabMisc);
    }
    
       public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
       {
        if(stack != null && !world.isRemote)
            {
                NBTTagCompound nbtTag = stack.getTagCompound();
                if(nbtTag == null)
                {
                    nbtTag = new NBTTagCompound();
                    setGenome(nbtTag,stack,world,player);
                    NBTTagList test = stack.getTagCompound().getTagList("genome", Constants.NBT.TAG_STRING);
            System.out.println(test);
                }
                else
            {
            System.out.println(getList(stack));
            }          
            }
    
    return stack;
       }
    
    }
    

    et la classe dont il est extend

    package com.mathiasetampes.genetic.common;
    
    import java.util.Random;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.nbt.NBTTagList;
    import net.minecraft.nbt.NBTTagString;
    import net.minecraft.world.World;
    import net.minecraftforge.common.util.Constants;
    
    public class ItemWithGenome extends Item
    {
    protected Random rand = new Random();
    protected NBTTagList list = new NBTTagList();
    protected void setGenome(NBTTagCompound nbtTag, ItemStack stack,World world, EntityPlayer player)
    {
    list.appendTag(new NBTTagString(setGroupeSanguin()));
    list.appendTag(new NBTTagString(setGroupeSanguin()));
    list.appendTag(new NBTTagString(setRhesus()));
    list.appendTag(new NBTTagString(setRhesus()));
    nbtTag.setTag("genome", list);
       stack.setTagCompound(nbtTag);
    }
    
    protected String setRhesus()
    {
    int tmp = rand.nextInt(2);
    if(tmp == 0)
    return "-;Recessif" ;
    else
    return "+;Dominant" ;
    
    }
    
    protected String setGroupeSanguin()
    {
    int tmp = rand.nextInt(3);
    if(tmp == 0)
    {
    return "a;Dominant";
    }
    else if(tmp == 1)
    {
    return "b;Dominant";
    }
    else
    {
    return "o;Recessif";
    }
    }
    
    protected NBTTagCompound getTag(ItemStack stack)
    {
    return stack.getTagCompound();
    }
    
    }
    

    le rendu est :
    [21:41:50] [Server thread/INFO] [STDOUT]: [com.mathiasetampes.genetic.common.Genome : onItemRightClick:29]: [0:“o;Recessif”,1:“a;Dominant”,2:"+;Dominant",3:"-;Recessif",]

    et si je fais la meme chose sur un autre item  il me donne :
    [21:41:59] [Server thread/INFO] [STDOUT]: [com.mathiasetampes.genetic.common.Genome : onItemRightClick:29]: [0:“o;Recessif”,1:“a;Dominant”,2:"+;Dominant",3:"-;Recessif",4:“a;Dominant”,5:“a;Dominant”,6:"+;Dominant",7:"+;Dominant",]

    quelqu’un peut t’il m’expliquer ces etranges résultats et la façon de les coriger

  • Modérateurs

    Normalement la classe Item a une méthode pour donner des données sous forme de NBT dans un ItemStack, c’est ici que tu dois stocker les données.


  • La méthode que tu utilises pour enregistrer tes NBT est très étrange, essaie avec la méthode de base. Ce que tu peux faire c’est utiliser les super, exemple :

    
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    if(stack != null && !world.isRemote)
    {
    super.onItemRightClick(stack, world, player)
    System.out.println(getList(stack));
    }
    
    return stack;
    }
    

  • merci mais dans le code que tu me montre je n’enregistre pas les nbt ? la méthode getList que j’ai changé en getTag entre temps ne sert qu’a les recupérée ou alors tu t’es trompé en mette super.onItemRightClick au lieu de super.setGenome ?

  • Administrateurs Rédacteurs Moddeurs confirmés

    Ta variable list devrait être une variable local à la fonction, pas une variable dans la classe.
    Donc enlève la ligne :     protected NBTTagList list = new NBTTagList();
    Et dans la fonction  setGenome au début met NBTTagList list = new NBTTagList();


  • merci robin çà marche à merveille