• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu NBT Tag ne s'affiche pas

    1.7.x
    1.7.10
    3
    6
    892
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Infinite
      Infinite dernière édition par

      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 réponse Dernière réponse Répondre Citer 0
      • Deleted
        Deleted dernière édition par

        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 réponse Dernière réponse Répondre Citer 0
        • Alexandre1156
          Alexandre1156 dernière édition par

          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 réponse Dernière réponse Répondre Citer 0
          • Infinite
            Infinite dernière édition par

            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 réponse Dernière réponse Répondre Citer 0
            • Deleted
              Deleted dernière édition par

              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 réponse Dernière réponse Répondre Citer 0
              • Infinite
                Infinite dernière édition par

                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 réponse Dernière réponse Répondre Citer 0
                • 1 / 1
                • Premier message
                  Dernier message
                Design by Woryk
                Contact / Mentions Légales

                MINECRAFT FORGE FRANCE © 2018

                Powered by NodeBB