• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved NBT Tag ne s'affiche pas

    1.7.x
    1.7.10
    3
    6
    871
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Infinite
      Infinite last edited by

      J’ai un problème avec les nbt tags ,
      La valeur ne s’affiche pas 😕

      package com.mod.infinitesword.client;
      
      import com.mod.infinitesword.init.ItemMod;
      
      import cpw.mods.fml.common.eventhandler.SubscribeEvent;
      import net.minecraft.client.Minecraft;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.ItemStack;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraftforge.client.event.RenderGameOverlayEvent;
      
      public class ElectroSwordEnergyDisplay
      {
          @SubscribeEvent
          public void eventHandler(RenderGameOverlayEvent event)
          {
             int posX = (event.resolution.getScaledWidth()) / 2;
             int posY = (event.resolution.getScaledHeight()) / 2;
      
             EntityPlayer player = Minecraft.getMinecraft().thePlayer;
      
             if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == ItemMod.ElectroSword) {
                ItemStack stack = new ItemStack(ItemMod.ElectroSword);
                if(!stack.hasTagCompound())
                {
                    stack.setTagCompound(new NBTTagCompound());
                }
                Minecraft.getMinecraft().fontRenderer.drawString(stack.getTagCompound().getInteger("energy1") + " RF", posX + (-87), posY + (51), 0xffff00);
      
             }
      
          }
       }
      

      Ca affiche 0 au lieu de la valeur de energy1
      Si quelqu’un peut m’aider ça serait génial !

      Mes Sites(Mes Sites)
      |
      |    Site général : Game & play
      |   Site de projets (en dev !) :Infinite's Ressources
      J'ai et je suis content d'avoir 16,75 points d'ICRating

      1 Reply Last reply Reply Quote 0
      • Deleted
        Deleted last edited by

        Nullement besoin d’un “onUpdate”, puisque l’event est appelé à chaque tick.
        Je pense que le problème vient de l’endroit où t’enregistres la variable “energy1” dans les tags de l’itemstack.

        1 Reply Last reply Reply Quote 0
        • Alexandre1156
          Alexandre1156 last edited by

          Changes

          
          if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == ItemMod.ElectroSword) {
                   ItemStack stack = new ItemStack(ItemMod.ElectroSword);
                   if(!stack.hasTagCompound())
                   {
                       stack.setTagCompound(new NBTTagCompound());
                   }
                   Minecraft.getMinecraft().fontRenderer.drawString(stack.getTagCompound().getInteger("energy1") + " RF", posX + (-87), posY + (51), 0xffff00);
             }
          
          

          Par

          
          if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == ItemMod.ElectroSword) {
                   ItemStack stack = player.getCurrentEquippedItem();
                   if(!stack.hasTagCompound())
                   {
                       NBTTagCompound nbt = new NBTTagCompound();
                       nbt.setInteger("energy1", 100000);
                       stack.setTagCompound(nbt);
                   } else if(!stack.getTagCompound().hasKey("energy1"))
                       stack.getTagCompound().setInteger("energy1", 1000000);
                   Minecraft.getMinecraft().fontRenderer.drawString(stack.getTagCompound().getInteger("energy1") + " RF", posX + (-87), posY + (51), 0xffff00);
             }
          
          

          Les NBTTag sont reliés à l’ItemStack, or tu en créais un à chaque fois, normal donc que celui-ci n’en ai pas. Et comme tu les créais sans y mettre le tag, il va renvoyer 0.

          1 Reply Last reply Reply Quote 0
          • Infinite
            Infinite last edited by

            Explication : j’ai créé le tag dans une autre class , la class de l’item et je voudrait donc pouvoir accéder a celui ci de la class avec l’event handler. La valeur de energy1 n’est pas constante , elle est de 1000000 originalement et est soustraite de 200 lorsque on tape une entité.

            En gros , je voudrais pouvoir recupérer mon tag que j’ai créé et set dans la class de mon item et l’utiliser pour l’afficher .J’ai une seconde solution : comme le tag est = a la durabilité de mon item ,je peux également utiliser stack.getItemDamage mais cette solution m’affiche également 0 !

            Voila j’éspère que ce que je viens d’écrire est compréhensible !  😄

            Mes Sites(Mes Sites)
            |
            |    Site général : Game & play
            |   Site de projets (en dev !) :Infinite's Ressources
            J'ai et je suis content d'avoir 16,75 points d'ICRating

            1 Reply Last reply Reply Quote 0
            • Deleted
              Deleted last edited by

              Alors il te suffit d’override la méthode hitEntity, et dedans de faire baisser la valeur de energy1.
              Après je suis quasiment sûr que les NBTTag des itemstacks sont synchronisés avec le client grâce à la méthode Item#getShareTag. Donc essaie de print dans l’event RenderGameOverlayEvent, la valeur, et dis nous ce que t’affiches la console.

              1 Reply Last reply Reply Quote 0
              • Infinite
                Infinite last edited by

                après plusieurs modifications , j’ai réussi a faire un code qui fonctionne !

                le voici :

                public class ElectroSwordEnergyDisplay
                {
                    @SubscribeEvent
                    public void eventHandler(RenderGameOverlayEvent event)
                    {
                       int posX = (event.resolution.getScaledWidth()) / 2;
                       int posY = (event.resolution.getScaledHeight()) / 2;
                
                       EntityPlayer player = Minecraft.getMinecraft().thePlayer;
                
                       if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == ItemMod.ElectroSword) {
                           ItemStack stack = player.getCurrentEquippedItem();
                
                           Minecraft.getMinecraft().fontRenderer.drawString(stack.getTagCompound().getInteger("energy1") + " RF", posX + (0), posY + (0), 0xffff00);
                           System.out.println(stack.getTagCompound().getInteger("energy1"));
                       }
                    }
                }
                
                

                Mes Sites(Mes Sites)
                |
                |    Site général : Game & play
                |   Site de projets (en dev !) :Infinite's Ressources
                J'ai et je suis content d'avoir 16,75 points d'ICRating

                1 Reply Last reply Reply Quote 0
                • 1 / 1
                • First post
                  Last post
                Design by Woryk
                Contact / Mentions Légales

                MINECRAFT FORGE FRANCE © 2018

                Powered by NodeBB