Résolu Nbt tag bugée
-
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
-
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 ?
-
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