MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    NBT Tag ne s'affiche pas

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    6 Messages 3 Publieurs 1.0k Vues 1 Watching
    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.
    • InfiniteI Hors-ligne
      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
      • DeletedD Hors-ligne
        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
        • Alexandre1156A Hors-ligne
          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
          • InfiniteI Hors-ligne
            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
            • DeletedD Hors-ligne
              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
              • InfiniteI Hors-ligne
                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
                ContactMentions Légales

                MINECRAFT FORGE FRANCE © 2024

                Powered by NodeBB