Tab nbt et tooltip.



  • Excusez moi d'avance , mais je n'avaus aucune idée d'ou poser mon problème (je supprimerai mon message si j'en ai la demande
    Voila mon problème : j'ai créé un item avec un tag NBT int associé que je shouaites afficher en tooltip grace à addInformation().
    Sauf que quand je modifie mon tag , j'aimerai mettre a jour l'affichage de ce dernier (le tag nbt évolue alors que le texte d'info ne bouge pas)
    Y aurais t'il une fonction à appeler pour rafraichir cet affichage?Je l'ai cherché mais je ne l'ai pas trouvé
    Merci pour vos réponces


  • Administrateurs

    Salut,
    Envoies-nous le code de ton item.

    à l'avenir il serait mieux de créer une discussion dans la section support pour les moddeurs.
    EDIT : en fait il y a une option pour "fractionner" les messages, donc j'ai pu déplacé ton message vers une nouvelle discussion dans la bonne section.
    J'ai changé le titre de la discussion, tu pourrai y ajouter la balise de version ou me dire en quelle version tu dev ?



  • Je suis en forge 1.7.10 (build 10.13.4.1558) et je sais pas comment changer la balise de la discution (ce ce voit que je suis membre depuis 4 jours ?)

    @Override
    public void addInformation(ItemStack itemstack, EntityPlayer player, List l, boolean flag) {
    super.addInformation(itemstack, player, l, flag);
    if(itemstack.stackTagCompound == null || !itemstack.stackTagCompound.hasKey("torchesLeft",Constants.NBT.TAG_INT)){
    itemstack.stackTagCompound = new NBTTagCompound();
    int meta = itemstack.getItemDamage();
    if(meta>=metaNumber)
    meta = 0;
    itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
    }
    l.add("Torches left :"+itemstack.stackTagCompound.getInteger("TorchesLeft"));
    
    }
    
    @Override
    public void onCreated(ItemStack itemstack, World w, EntityPlayer pl) {
    super.onCreated(itemstack, w, pl);
    if (itemstack.stackTagCompound == null
    || !itemstack.stackTagCompound.hasKey("TorchesLeft", Constants.NBT.TAG_INT)) {
    itemstack.stackTagCompound = new NBTTagCompound();
    int meta = itemstack.getItemDamage();
    if (meta >= metaNumber)
    meta = 0;
    itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
    }
    
    }
    

    maxTorchesFromMeta est un tableau de int qui renvoie à l'indice x , le nombre maximal pour mon tag pour un meta de x
    metaNumber est le nombre de metadatas autorisés (soit la taille de mon tableau , pour eviter une ArrayIndexOutsOfBoundsException)

    @Override
    public void onWornTick(ItemStack itemstack, EntityLivingBase player) {
    if (itemstack.stackTagCompound == null
    || !itemstack.stackTagCompound.hasKey("TorchesLeft", Constants.NBT.TAG_INT)) {
    itemstack.stackTagCompound = new NBTTagCompound();
    int meta = itemstack.getItemDamage();
    if (meta >= metaNumber)
    meta = 0;
    itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
    }
    itemstack.stackTagCompound.setInteger("TorchesLeft", itemstack.stackTagCompound.getInteger("TorchesLeft")-1);
    }
    

    cette metrhode est donée par baubles et est appelée à chaque tick quand l'item est porté

    public TorchAmulet() {
    this.setMaxStackSize(1);
    this.setHasSubtypes(true);
    }
    

    Et voila mon constructeur

    Sinon il y a juste les deux lignes

    torchAmulet = new TorchAmulet().setUnlocalizedName("torch_amulet")
    .setTextureName(TorchMod.MODID + ":" + "torch_amulet").setCreativeTab(CreativeTabs.tabTools);
    GameRegistry.registerItem(torchAmulet, "torch_amulet");
    

    pour enregistrer mon item.


  • Administrateurs

    Dans la fonction addInformation tu as mit torchesLeft au lieu de TorchesLeft pour la condition hasKey, du-coup le tag nbt est réinitialisé à chaque fois.



  • Merci ! J'avais revérifié pourtant ! Dsl du derangement.
    Y'a une chose à faire pour conclure la discusions ?



  • Oui, mettre la balise résolu (editer ton premier message => balise résolu).