MFF

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

    Enregistrer les NBT Tags et Individualisé les items?

    Planifier Épinglé Verrouillé Déplacé Non résolu Sans suite
    1.12.2
    13 Messages 2 Publieurs 858 Vues 2 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Bonsoir,

      Tu n’utilises pas correctement les NBT. Ta variable NBTTagCompound nbt = new NBTTagCompound(); présent dans la classe de ton item ne devrait pas du tout être présent, car elle n’est connecté a aucune logique de Minecraft (d’où la non sauvegarde des valeurs) et comme elle est lié à ton item, qui est un singleton, elle est partagé entre tous tes ItemWeapon (d’où ce que tu observe sur la capture d’écran 1).

      Il faut que tu utilise stack.getTagCompound() pour obtenir le NBT lié à l’itemstack (qui lui est donc bien unique et sauvegardé par Minecraft).

      Donc au début de ta fonction findammo, ajoutes ceci :

             if(!stack.hasTagCompound()) {
                  stack.setTagCompound(new NBTTagCompound());
             }
             NBTTagCompound nbt = stack.getTagCompound();
      

      Pas besoin de changer le reste.

      Pour les fonctions getmun et setmun il va falloir les adapter afin d’ajouter l’item stack en argument.

      GwarG 1 réponse Dernière réponse Répondre Citer 0
      • GwarG Hors-ligne
        Gwar @robin4002
        dernière édition par robin4002

        @robin4002 j’ai logiquement fait les modificication mais le jeu crash depuis je ne comprend pas pourquoi ?

            public class ItemWeapon extends Item  {
        
            public int maxAmmo;
            public int cooldown;
            public int timer ;
            public Item bullet;
            Minecraft mc = Minecraft.getMinecraft();
        
            public ItemWeapon(String name, int munition,Item itembullet,int cooldown){
        
                this.setUnlocalizedName(name);
                this.setRegistryName(name);
                this.setCreativeTab(Main.SpaceTab);
                Items.ITEMS.add(this);
                this.cooldown = cooldown*20;
                this.maxStackSize = 1;
                bullet = itembullet;
                this.maxAmmo = munition;
        
            }
            private void setmun(ItemStack stack,int mun){
        
                stack.getTagCompound().setInteger("mun", mun);
        
            }
            private int getmun(ItemStack stack){
              int getmun =  stack.getTagCompound().getInteger("mun");
                return getmun;
            }
            private boolean setCooldown(int x){
                return timer>= x * cooldown;
            }
            private void Cooldown(){
                mc.player.getCooldownTracker().setCooldown(this, cooldown);
            }
            @Override
            public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
                timer++;
        
                KeyBinding[] keyBindings = ClientProxy.keyBindings;
        
                    if (keyBindings[0].isPressed()) {
                        findammo(stack);
                    }
        
                super.onUpdate(stack, worldIn, entityIn, itemSlot, isSelected);
            }
            private void findammo(ItemStack stack){
        
                if(!stack.hasTagCompound()) {
                    stack.setTagCompound(new NBTTagCompound());
                }else {
                NBTTagCompound nbt = stack.getTagCompound();
                    if(setCooldown(2) && mc.player.getHeldItem(EnumHand.MAIN_HAND).getItem() == this) {
                        timer = 0;
        
                        if (mc.player.inventory.hasItemStack(new ItemStack(Items.Bullet)) && nbt.getInteger("mun") <= this.maxAmmo) {
        
                            if (nbt.hasKey("mun")) {
                                setmun(stack, getmun(stack) + 1);
                            } else {
                                setmun(stack, 0);
                            }
                            stack.setTagCompound(nbt);
                            mc.player.inventory.clearMatchingItems(this.bullet, 0, 1, null);
                            Cooldown();
                            System.out.println(nbt.getInteger("mun") + "tir");
                        }
                    }
                }
            }
            @Override
            public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) {
        
                Minecraft mc = Minecraft.getMinecraft();
                        if(entityLiving instanceof EntityPlayer)
                {
                    if(!entityLiving.world.isRemote)
                    {
                            if(getmun(stack) >= 1){
                                if(setCooldown(2)) {
                                    EntityBullet entitysnowball = new EntityBullet(entityLiving.world, mc.player);
                                    entitysnowball.shoot(mc.player, mc.player.rotationPitch+ 5.0f, mc.player.rotationYaw + 5.0f, 0.0F, 1.5F, 1.0F);
                                    entityLiving.world.spawnEntity(entitysnowball);
                                    Cooldown();
                                    setmun(stack,getmun(stack) - 1);
                                }
                            }else{
                                findammo(stack);
        
                        }
        
                    }
                }
                return super.onEntitySwing(entityLiving, stack);
            }
        
            @Override
            public void addInformation(ItemStack stack,  World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
                tooltip.add(getmun(stack) + "/6 munitions");
        
                super.addInformation(stack, worldIn, tooltip, flagIn);
            }
        
            public void registerModels() {
                Main.proxy.registerItemRenderer(this, 0, "inventory");
            }
        
        }
        

        Crash report :

        java.lang.NullPointerException: Initializing game
        	at fr.saizone.space.item.event.gun.ItemWeapon.getmun(ItemWeapon.java:48)
        	at fr.saizone.space.item.event.gun.ItemWeapon.addInformation(ItemWeapon.java:126)
        	at net.minecraft.item.ItemStack.getTooltip(ItemStack.java:707)
        	at net.minecraft.client.Minecraft.lambda$populateSearchTreeManager$1(Minecraft.java:576)
        	at net.minecraft.client.util.SearchTree.index(SearchTree.java:59)
        	at net.minecraft.client.util.SearchTree.add(SearchTree.java:50)
        	at java.lang.Iterable.forEach(Iterable.java:75)
        	at net.minecraft.client.Minecraft.populateSearchTreeManager(Minecraft.java:590)
        	at net.minecraft.client.Minecraft.init(Minecraft.java:529)
        	at net.minecraft.client.Minecraft.run(Minecraft.java:378)
        	at net.minecraft.client.main.Main.main(Main.java:118)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:498)
        	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
        	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:498)
        	at net.minecraftforge.legacydev.Main.start(Main.java:86)
        	at net.minecraftforge.legacydev.MainClient.main(MainClient.java:29)
        
        
        A detailed walkthrough of the error, its code path and all known details is as follows:
        ---------------------------------------------------------------------------------------
        
        -- Head --
        Thread: Client thread
        Stacktrace:
        	at fr.saizone.space.item.event.gun.ItemWeapon.getmun(ItemWeapon.java:48)
        	at fr.saizone.space.item.event.gun.ItemWeapon.addInformation(ItemWeapon.java:126)
        	at net.minecraft.item.ItemStack.getTooltip(ItemStack.java:707)
        	at net.minecraft.client.Minecraft.lambda$populateSearchTreeManager$1(Minecraft.java:576)
        	at net.minecraft.client.util.SearchTree.index(SearchTree.java:59)
        	at net.minecraft.client.util.SearchTree.add(SearchTree.java:50)
        	at java.lang.Iterable.forEach(Iterable.java:75)
        	at net.minecraft.client.Minecraft.populateSearchTreeManager(Minecraft.java:590)
        	at net.minecraft.client.Minecraft.init(Minecraft.java:529)
        
        -- Initialization --
        Details:
        Stacktrace:
        	at net.minecraft.client.Minecraft.run(Minecraft.java:378)
        	at net.minecraft.client.main.Main.main(Main.java:118)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:498)
        	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
        	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:498)
        	at net.minecraftforge.legacydev.Main.start(Main.java:86)
        	at net.minecraftforge.legacydev.MainClient.main(MainClient.java:29)
        
        1 réponse Dernière réponse Répondre Citer 0
        • robin4002R Hors-ligne
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
          dernière édition par

          Tu essaies d’accéder a une valeur d’un tag NBT null.
          Avant chaque utilisation de stack.getTagCompound() il faut que tu t’assures que le tag n’est pas null, en vérifiant avec stack.hasTagCompound()

          GwarG 1 réponse Dernière réponse Répondre Citer 0
          • GwarG Hors-ligne
            Gwar @robin4002
            dernière édition par

            @robin4002 Merci beaucoup , c’était la première fois que j’utilisais les nbt tag et je suis encore pas très bon en dev en java.

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002R Hors-ligne
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
              dernière édition par

              De rien ! Le problème est résolu ?

              GwarG 1 réponse Dernière réponse Répondre Citer 0
              • GwarG Hors-ligne
                Gwar @robin4002
                dernière édition par

                @robin4002 enfaite je viens de remarquer un autre problème , c’est que ça enregistre les nbt tag sur l’item qui se trouve dans l’inventaire , le plus à gauche

                public class ItemWeapon extends Item  {
                
                public int maxAmmo;
                public int cooldown;
                public int timer ;
                public Item bullet;
                
                    Minecraft mc = Minecraft.getMinecraft();
                   public ItemWeapon(String name, int munition,Item itembullet,int cooldown){
                
                    this.setUnlocalizedName(name);
                    this.setRegistryName(name);
                    this.setCreativeTab(Main.SpaceTab);
                    Items.ITEMS.add(this);
                    this.cooldown = cooldown*20;
                    this.maxStackSize = 1;
                    bullet = itembullet;
                    this.maxAmmo = munition;
                
                }
                private void setmun(ItemStack stack,int mun){
                    if(!stack.hasTagCompound()){
                        stack.setTagCompound(new NBTTagCompound());
                    }
                    {
                        stack.getTagCompound().setInteger("mun", mun);
                    }
                }
                private int getmun(ItemStack stack){
                    if(!stack.hasTagCompound()){
                        stack.setTagCompound(new NBTTagCompound());
                    }
                    {
                        int getmun = stack.getTagCompound().getInteger("mun");
                        return getmun;
                    }
                }
                private boolean setCooldown(int x){
                    return timer>= x * cooldown;
                }
                private void Cooldown(){
                    mc.player.getCooldownTracker().setCooldown(this, cooldown);
                }
                @Override
                public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
                    timer++;
                
                    KeyBinding[] keyBindings = ClientProxy.keyBindings;
                    if(!stack.hasTagCompound()){
                        stack.setTagCompound(new NBTTagCompound());
                    }
                    {
                        if (keyBindings[0].isPressed()) {
                            findammo(stack);
                        }
                    }
                    super.onUpdate(stack, worldIn, entityIn, itemSlot, isSelected);
                }
                private void findammo(ItemStack stack){
                
                    if(!stack.hasTagCompound()) {
                        stack.setTagCompound(new NBTTagCompound());
                    }else {
                    NBTTagCompound nbt = stack.getTagCompound();
                        if(setCooldown(2) && mc.player.getHeldItem(EnumHand.MAIN_HAND).getItem() == this) {
                            timer = 0;
                
                            if (mc.player.inventory.hasItemStack(new ItemStack(Items.Bullet)) && nbt.getInteger("mun") <= this.maxAmmo) {
                
                                if (nbt.hasKey("mun")) {
                                    setmun(stack, getmun(stack) + 1);
                                } else {
                                    setmun(stack, 0);
                                }
                                stack.setTagCompound(nbt);
                                mc.player.inventory.clearMatchingItems(this.bullet, 0, 1, null);
                                Cooldown();
                                System.out.println(nbt.getInteger("mun") + "tir");
                            }
                        }
                    }
                }
                @Override
                public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) {
                
                    Minecraft mc = Minecraft.getMinecraft();
                            if(entityLiving instanceof EntityPlayer)
                    {
                        if(!entityLiving.world.isRemote)
                        {
                            if(!stack.hasTagCompound()){
                                stack.setTagCompound(new NBTTagCompound());
                            }
                            {
                                if (getmun(stack) >= 1) {
                                    if (setCooldown(2)) {
                                        EntityBullet entitysnowball = new EntityBullet(entityLiving.world, mc.player);
                                        entitysnowball.shoot(mc.player, mc.player.rotationPitch + 5.0f, mc.player.rotationYaw + 5.0f, 0.0F, 1.5F, 1.0F);
                                        entityLiving.world.spawnEntity(entitysnowball);
                                        Cooldown();
                                        setmun(stack, getmun(stack) - 1);
                                    }
                                } else {
                                    findammo(stack);
                
                                }
                            }
                        }
                    }
                    return super.onEntitySwing(entityLiving, stack);
                }
                
                1 réponse Dernière réponse Répondre Citer 0
                • robin4002R Hors-ligne
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                  dernière édition par

                  Étrange, je ne vois pas ce qui peut expliquer ce comportement 😕

                  GwarG 3 réponses Dernière réponse Répondre Citer 0
                  • GwarG Hors-ligne
                    Gwar @robin4002
                    dernière édition par

                    @robin4002 j’ai finalement réussi en utilisant la fonction :

                    findammo(mc.player.inventory.getCurrentItem());

                    1 réponse Dernière réponse Répondre Citer 0
                    • GwarG Hors-ligne
                      Gwar @robin4002
                      dernière édition par

                      @robin4002 Enfaite je viens de regarder j’ai rien changer à mon code , mais le problème c’est que je ne sais pas pourquoi mais quand je relance le monde il y a 1 arme qui est rechargé a 1/6 et les autres à 0/6 à chaque fois que je reviens dans le monde e je ne sais pas d’ou ça viens
                      Le problème avait été résolu mais je ne sais pas pourquoi il est revenue :

                      public class ItemWeapon extends Item  {
                      
                      public int maxAmmo;
                      public int cooldown;
                      public int timer ;
                      public Item bullet;
                      
                      Minecraft mc = Minecraft.getMinecraft();
                      public ItemWeapon(String name, int munition,Item itembullet,int cooldown){
                      
                          this.setUnlocalizedName(name);
                          this.setRegistryName(name);
                          this.setCreativeTab(Main.SpaceTab);
                          Items.ITEMS.add(this);
                          this.cooldown = cooldown*20;
                          this.maxStackSize = 1;
                          bullet = itembullet;
                          this.maxAmmo = munition;
                      
                      }
                      private void setmun(ItemStack stack,int mun){
                          if(!stack.hasTagCompound()){
                              stack.setTagCompound(new NBTTagCompound());
                          }
                          {
                              stack.getTagCompound().setInteger("mun", mun);
                          }
                      }
                      private int getmun(ItemStack stack){
                          if(!stack.hasTagCompound()){
                              stack.setTagCompound(new NBTTagCompound());
                          }
                          {
                              int getmun = stack.getTagCompound().getInteger("mun");
                              return getmun;
                          }
                      }
                      private boolean setCooldown(int x){
                          return timer>= x * cooldown;
                      }
                      private void Cooldown(){
                          mc.player.getCooldownTracker().setCooldown(this, cooldown);
                      }
                      @Override
                      public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
                          timer++;
                      
                          KeyBinding[] keyBindings = ClientProxy.keyBindings;
                          if(!stack.hasTagCompound()){
                              stack.setTagCompound(new NBTTagCompound());
                          }
                          {
                              if (keyBindings[0].isPressed()) {
                                  findammo(mc.player.inventory.getCurrentItem());
                      
                              }
                          }
                          super.onUpdate(stack, worldIn, entityIn, itemSlot, isSelected);
                      }
                      private void findammo(ItemStack stack){
                      
                          if(!stack.hasTagCompound()) {
                              stack.setTagCompound(new NBTTagCompound());
                          }else {
                              NBTTagCompound nbt = stack.getTagCompound();
                              if(setCooldown(2) && mc.player.getHeldItem(EnumHand.MAIN_HAND).getItem() == this) {
                                  timer = 0;
                      
                                  if (mc.player.inventory.hasItemStack(new ItemStack(Items.Bullet)) && nbt.getInteger("mun") <= this.maxAmmo) {
                      
                                      if (nbt.hasKey("mun")) {
                                          setmun(stack, getmun(stack) + 1);
                                      } else {
                                          setmun(stack, 0);
                                      }
                                      stack.setTagCompound(nbt);
                                      mc.player.inventory.clearMatchingItems(this.bullet, 0, 1, null);
                                      Cooldown();
                                      System.out.println(nbt.getInteger("mun") + "tir");
                                  }
                              }
                          }
                      }
                      @Override
                      public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) {
                      
                          Minecraft mc = Minecraft.getMinecraft();
                          if(entityLiving instanceof EntityPlayer)
                          {
                              if(!entityLiving.world.isRemote)
                              {
                                  if(!stack.hasTagCompound()){
                                      stack.setTagCompound(new NBTTagCompound());
                                  }
                                  {
                                      if (getmun(stack) >= 1) {
                                          if (setCooldown(2)) {
                                              EntitySnowball entitysnowball = new EntitySnowball(entityLiving.world, mc.player);
                                              entitysnowball.shoot(mc.player, mc.player.rotationPitch + 5.0f, mc.player.rotationYaw + 5.0f, 0.0F, 1.5F, 1.0F);
                                              entityLiving.world.spawnEntity(entitysnowball);
                                              Cooldown();
                                              setmun(stack, getmun(stack) - 1);
                                          }
                                      } else {
                                          findammo(mc.player.inventory.getCurrentItem());
                      
                      
                                      }
                                  }
                              }
                          }
                          return super.onEntitySwing(entityLiving, stack);
                      }
                      
                      @Override
                      public void addInformation(ItemStack stack,  World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
                          if(!stack.hasTagCompound()){
                              stack.setTagCompound(new NBTTagCompound());
                          }
                          {
                              tooltip.add(getmun(stack) + "/6 munitions");
                          }
                          super.addInformation(stack, worldIn, tooltip, flagIn);
                      }
                      
                      public void registerModels() {
                          Main.proxy.registerItemRenderer(this, 0, "inventory");
                      }
                      

                      }

                      1 réponse Dernière réponse Répondre Citer 0
                      • GwarG Hors-ligne
                        Gwar @robin4002
                        dernière édition par

                        @robin4002 tu en penses quoi robin ?

                        1 réponse Dernière réponse Répondre Citer 0
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          Je ne sais pas

                          GwarG 1 réponse Dernière réponse Répondre Citer 0
                          • GwarG Hors-ligne
                            Gwar @robin4002
                            dernière édition par

                            @robin4002 car j’ai essayé de voir de regarder mais a chaque fois ça se remet à 0 mais je ne comprend pas pourquoi

                            1 réponse Dernière réponse Répondre Citer 0
                            • robin4002R robin4002 a déplacé ce sujet de Support pour les moddeurs sur
                            • 1 / 1
                            • Premier message
                              Dernier message
                            Design by Woryk
                            ContactMentions Légales

                            MINECRAFT FORGE FRANCE © 2024

                            Powered by NodeBB