MFF

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

    Rendu 3D différent avec clic gauche / Rendu Custom d'Item

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    18 Messages 4 Publieurs 2.4k 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.
    • FolganskyF Hors-ligne
      Folgansky Correcteurs
      dernière édition par

      Chui nul avec les nbt (y’a qu’avec les entités que j’arrive à faire qqs trucs seulement).

      Alors du coup, j’en suis rendu -blagounette- à ces codes là, non fonctionnels:

      :::

      public void writeToNBT(NBTTagCompound nbt) 
      {
      nbt.setBoolean("onUse", true);
      }
      
      public void readFromNBT(NBTTagCompound nbt) 
      {
      nbt.getBoolean("onUse");
      }
      

      :::

      :::

      
      @SubscribeEvent
      public void mouseInput(InputEvent.MouseInputEvent event)
      {
      ItemStack itemstack = Minecraft.getMinecraft().thePlayer.getCurrentEquippedItem();
      if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPompe && Minecraft.getMinecraft().currentScreen == null)
      {
          itemstack.getTagCompound().setBoolean("onUse", true);
          System.out.println(itemstack.getTagCompound().getBoolean("onUse"));
          System.out.println("Eh eh, alors?");
      }
      }
      
      

      :::
      Même pas appelée visiblement

      :::

      case EQUIPPED:
              {
                  if(item.getTagCompound().getBoolean("onUse") == true)
                  {
                  GL11.glPushMatrix();
                      GL11.glRotatef(90.F, 1.0F, 0.2F, 0.0F);
                      GL11.glRotatef(100.F, 1.0F, 0.0F, 0.0F);
                      GL11.glTranslatef(0.5F, -0.35F, -0.75F);
                      GL11.glScaled(0.5F, 0.5F, 0.5F);
                      Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                      model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                      GL11.glPopMatrix();
                      break;
                  }
                  else
                  {
                  GL11.glPushMatrix();
                      GL11.glRotatef(90.F, 1.0F, 0.2F, 0.0F);
                      GL11.glRotatef(100.F, 1.0F, 0.0F, 0.0F);
                      GL11.glTranslatef(0.5F, -0.35F, -0.75F);
                      GL11.glScaled(2.5F, 2.5F, 2.5F);
                      Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                      model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                      GL11.glPopMatrix();
                      break;
                  }
              }
      

      :::

      J’ai voulu tenter un boolean dans la classe principale
      " public static boolean zoom4;"

      puis:
      :::

      
      ```@SubscribeEvent
      public void mouseInput(InputEvent.MouseInputEvent event)
      {
      ItemStack itemstack = Minecraft.getMinecraft().thePlayer.getCurrentEquippedItem();
      if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemRailGun && Minecraft.getMinecraft().currentScreen == null)
      {
      ModPg2.zoom2 = !ModPg2.zoom2;
      }
      if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPlasmaGun && Minecraft.getMinecraft().currentScreen == null)
      {
      ModPg2.zoom3 = !ModPg2.zoom3;
      }
      if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPompe)
      {
      ModPg2.zoom4 = !ModPg2.zoom4;
      }
      }
      :::
      
      :::
      ```java
      
      MinecraftForgeClient.registerItemRenderer(ModPg2.itemRailGun, (IItemRenderer)new RenderRailGun());
      MinecraftForgeClient.registerItemRenderer(ModPg2.itemPlasmaGun, (IItemRenderer)new RenderPlasmaGun());
      MinecraftForgeClient.registerItemRenderer(ModPg2.itemThomson, (IItemRenderer)new RenderThomson());
      if(!ModPg2.zoom4)
      {
            MinecraftForgeClient.registerItemRenderer(ModPg2.itemPompe, (IItemRenderer)new RenderPompe());
      }
      if(ModPg2.zoom4)
      {
            MinecraftForgeClient.registerItemRenderer(ModPg2.itemPompe, (IItemRenderer)new RenderPompe2());
      }
      

      :::

      Mais ça marche pas non plus

      1 réponse Dernière réponse Répondre Citer 0
      • DeletedD Hors-ligne
        Deleted
        dernière édition par

        itemstack.getTagCompound().setBoolean(“onUse”, true); –> itemstack.getTagCompound().setBoolean(“onUse”, !(itemstack.getTagCompound().getBoolean(“onUse”));

        Mais n’oublie pas de check si les tag ont bien été initialisés, sinon charge-toi en :

        if(stack.getTagCompound == null)
        stack.setTagCompound(new NBTTagCompound());
        else
        //ton code pour set la valeur actuelle inverse

        1 réponse Dernière réponse Répondre Citer 0
        • FolganskyF Hors-ligne
          Folgansky Correcteurs
          dernière édition par

          :::

          
          public class ItemPompe extends Item 
          {
              public void onUsingTick(ItemStack stack, EntityPlayer player, int count)
              {
              if(!stack.hasTagCompound())
                  {
                  stack.setTagCompound(new NBTTagCompound());
                  }
              else
              stack.getTagCompound().setBoolean("onUse", !(stack.getTagCompound().getBoolean("onUse")));
          if (count % 10 == 1 && player.inventory.hasItem(ModPg2.itemBullet2) && count > 69)
          {
          player.worldObj.playSoundAtEntity(player, "modPg2:thomson", 0.5F, 0.5F);
          }
              for(int j = 0 ; j < 8; ++j)
          {  
              if (count % 10 == 1 && player.inventory.hasItem(ModPg2.itemBullet2) && count > 69)
              {
              EntityBulletPompe entityBulletPompe = new EntityBulletPompe(player.worldObj, player);
              if(!player.capabilities.isCreativeMode)
              {
              player.inventory.consumeInventoryItem(ModPg2.itemBullet2);      
              }
              if (!player.worldObj.isRemote)
              {
              player.worldObj.spawnEntityInWorld(entityBulletPompe);
              }
              }
          }
              }
          
              public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player)
              {
                  return stack;
              }
          
          public int getMaxItemUseDuration(ItemStack stack)
              {
                  return 100;
              }
          
          public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity)
          {
          return true;
          }
          
          public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
          {
          player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
          return stack;
          }
          
          public void writeToNBT(NBTTagCompound nbt) 
          {
          nbt.setBoolean("onUse", true);
          }
          
          public void readFromNBT(NBTTagCompound nbt) 
          {
          nbt.getBoolean("onUse");
          }
          }
          
          

          :::

          J’avoue ne pas être sûr de tout avoir compris.

          1 réponse Dernière réponse Répondre Citer 0
          • DeletedD Hors-ligne
            Deleted
            dernière édition par

            En fait tout se passe dans ton event InputEvent.MouseInputEvent

            Dès que tu fais clic droit, on va vérifier si l’itemstack de l’item tenu par le joueur a bien init ses tags, d’où ma condition :

            
            if(stack.getTagCompound == null)
            //Si ils sont nuls, tu les sets
            itemstack.setTagCompound(new NBTTagCompound());
            else
            //Sinon c'est qu'ils sont bien déjà initialisés, donc il suffit juste d'inverser leur valeur de boolean, qui agira directement sur le model à rendre
            itemstack.getTagCompound().setBoolean("onUse", !(itemstack.getTagCompound().getBoolean("onUse"));
            
            

            Pour la gestion d’un des 2 modèles à rendre, c’est à voir avec ce tuto
            Crées un tableau de ModelBase puis voies avec les tags de ton itemstack, lequel tu souhaites rendre, ce n’est vraiment pas compliqué 😃

            1 réponse Dernière réponse Répondre Citer 0
            • FolganskyF Hors-ligne
              Folgansky Correcteurs
              dernière édition par

              Du coup,

              :::

              @SubscribeEvent
              public void mouseInput(InputEvent.MouseInputEvent event)
              {
              ItemStack itemstack = Minecraft.getMinecraft().thePlayer.getCurrentEquippedItem();
              if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemRailGun && Minecraft.getMinecraft().currentScreen == null)
              {
              ModPg2.zoom2 = !ModPg2.zoom2;
              }
              if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPlasmaGun && Minecraft.getMinecraft().currentScreen == null)
              {
              ModPg2.zoom3 = !ModPg2.zoom3;
              }
              if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPompe && Minecraft.getMinecraft().currentScreen == null)
              {
              if(itemstack.getTagCompound() == null)
              itemstack.setTagCompound(new NBTTagCompound());
              else
                 itemstack.getTagCompound().setBoolean("onUse", !(itemstack.getTagCompound().getBoolean("onUse")));
                 System.out.println(itemstack.getTagCompound().getBoolean("onUse"));
                 System.out.println("Eh eh, alors?");
              }
              }
              

              :::

              La méthode semble appelée 2 fois et le rendu reste le même.

              :::

              public class RenderPompe implements IItemRenderer
              {
              protected ModelPompe model;
              protected static final ResourceLocation texture = new ResourceLocation("ModPg2:textures/models/items/Pompe.png");
              
                  public RenderPompe()
                  {
              model = new ModelPompe();
                  }
              
              @Override
              public boolean handleRenderType(ItemStack item, ItemRenderType type)
              {
              switch(type)
              {
                      case EQUIPPED:
                          return true;
                      case EQUIPPED_FIRST_PERSON:
                          return true;
                      default:
                          return false;
              }
              }
              
              @Override
              public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
              {
              return false;
              }
              
              @Override
              public void renderItem(ItemRenderType type, ItemStack item, Object… data)
              {
              switch(type)
              {
              case EQUIPPED:
                      {
                      if(item.getTagCompound().getBoolean("onUse") == true)
                          {
                          GL11.glPushMatrix();
                              GL11.glRotatef(90.F, 1.0F, 0.2F, 0.0F);
                              GL11.glRotatef(100.F, 1.0F, 0.0F, 0.0F);
                              GL11.glTranslatef(0.5F, -0.35F, -0.75F);
                              GL11.glScaled(0.5F, 0.5F, 0.5F);
                              Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                              model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                              GL11.glPopMatrix();
                              break;
                          }
                          else
                          {
                          GL11.glPushMatrix();
                              GL11.glRotatef(90.F, 1.0F, 0.2F, 0.0F);
                              GL11.glRotatef(100.F, 1.0F, 0.0F, 0.0F);
                              GL11.glTranslatef(0.5F, -0.35F, -0.75F);
                              GL11.glScaled(2.5F, 2.5F, 2.5F);
                              Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                              model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                              GL11.glPopMatrix();
                              break;
                          }      
                      }
                      case EQUIPPED_FIRST_PERSON:
                      {
                          GL11.glPushMatrix();
                          GL11.glRotatef(90.F, 1.0F, -0.2F, 0.0F);
                          GL11.glRotatef(100.F, 0.5F, -0.2F, -0.65F);
                          GL11.glRotatef(30.F, -0.2F, -1.2F, 0.0F);
                          GL11.glTranslatef(-0.25F, 0.55F, -2.8F);
                          GL11.glScaled(1F, 1F, 1F);
                          Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                          model.render((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                          GL11.glPopMatrix();
                          break;
                      }
                      default:
                          break;
                      }
              }
              }
              
              

              :::

              Edit: La méthode est appelée quand j’appuie et quand je relâche (c’est le fontionnement que j’espérais alors ce n’est pas un problème). Reste le rendu Xd

              1 réponse Dernière réponse Répondre Citer 0
              • DeletedD Hors-ligne
                Deleted
                dernière édition par

                Que dit la console, la valeur change bien ? Check aussi si les tag son bien init ou si ils sont toujours nuls…
                Quant aux models, il me faudrait ta classe implémentant IItemRenderer pour voir de + près 🙂

                1 réponse Dernière réponse Répondre Citer 0
                • FolganskyF Hors-ligne
                  Folgansky Correcteurs
                  dernière édition par

                  Résolu!

                  Erreur de manip’ avec la fatigue. Je modifiais le mauvais type de rendu (3ème personne_ EQUIPED)

                  Du coup, un grand merci pour ce gros coup de pouce pour les nbt ^^

                  1 réponse Dernière réponse Répondre Citer 0
                  • DeletedD Hors-ligne
                    Deleted
                    dernière édition par

                    Que dit la console, la valeur change bien ? Check aussi si les tag son bien init ou si ils sont toujours nuls…
                    Quant aux models, il me faudrait ta classe implémentant IItemRenderer pour voir de + près 🙂

                    EDIT = Normal que ton modèle ne change pas, tu n’en as pas ajouté de deuxième…Si aucun changement, print et debug à fond, c’est la meilleure solution

                    1 réponse Dernière réponse Répondre Citer 0
                    • FolganskyF Hors-ligne
                      Folgansky Correcteurs
                      dernière édition par

                      Bon avec un item ça va, avec plusieurs ça crash. Je ne comprends pas le soucis (qui est un NPE: pastebin)

                      :::

                      
                      @SubscribeEvent
                      public void mouseInput(InputEvent.MouseInputEvent event)
                      {
                         ItemStack itemstack = Minecraft.getMinecraft().thePlayer.getCurrentEquippedItem();
                         if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemRailGun && Minecraft.getMinecraft().currentScreen == null)
                         {
                               ModPg2.zoom2 = !ModPg2.zoom2;
                         }
                         if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPlasmaGun && Minecraft.getMinecraft().currentScreen == null)
                         {
                                ModPg2.zoom3 = !ModPg2.zoom3;
                         }
                         if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPompe && Minecraft.getMinecraft().currentScreen == null)
                         {
                                if(itemstack.getTagCompound() == null)
                                itemstack.setTagCompound(new NBTTagCompound());
                                else
                                itemstack.getTagCompound().setBoolean("onUse1", !(itemstack.getTagCompound().getBoolean("onUse1")));
                         }
                         if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemThomson && Minecraft.getMinecraft().currentScreen == null)
                         {
                                if(itemstack.getTagCompound() == null)
                                itemstack.setTagCompound(new NBTTagCompound());
                                else
                                itemstack.getTagCompound().setBoolean("onUse2", !(itemstack.getTagCompound().getBoolean("onUse2")));
                         }
                         if(Mouse.getEventButton() == 0 && itemstack != null && itemstack.getItem() == ModPg2.itemPistolet && Minecraft.getMinecraft().currentScreen == null)
                         {
                               if(itemstack.getTagCompound() == null)
                               itemstack.setTagCompound(new NBTTagCompound());
                               else
                               itemstack.getTagCompound().setBoolean("onUse3", !(itemstack.getTagCompound().getBoolean("onUse3")));
                         }
                      }
                      

                      :::

                      :::

                      public class ItemPompe extends Item 
                      {
                          public void onUsingTick(ItemStack stack, EntityPlayer player, int count)
                          {
                      if (count % 10 == 1 && player.inventory.hasItem(ModPg2.itemBullet2) && count > 69)
                      {
                      player.worldObj.playSoundAtEntity(player, "modPg2:thomson", 0.5F, 0.5F);
                      }
                          for(int j = 0 ; j < 8; ++j)
                      {  
                          if (count % 10 == 1 && player.inventory.hasItem(ModPg2.itemBullet2) && count > 69)
                          {
                          EntityBulletPompe entityBulletPompe = new EntityBulletPompe(player.worldObj, player);
                          if(!player.capabilities.isCreativeMode)
                          {
                          player.inventory.consumeInventoryItem(ModPg2.itemBullet2);      
                          }
                          if (!player.worldObj.isRemote)
                          {
                          player.worldObj.spawnEntityInWorld(entityBulletPompe);
                          }
                          }
                      }
                          }
                      
                          public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player)
                          {
                              return stack;
                          }
                      
                      public int getMaxItemUseDuration(ItemStack stack)
                          {
                              return 100;
                          }
                      
                      public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity)
                      {
                      return true;
                      }
                      
                      public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
                      {
                      player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
                      return stack;
                      }
                      
                      public void writeToNBT(NBTTagCompound nbt) 
                      {
                      nbt.setBoolean("onUse1", false);
                      }
                      
                      public void readFromNBT(NBTTagCompound nbt) 
                      {
                      nbt.getBoolean("onUse1");
                      }
                      }
                      

                      :::

                      :::

                      public class RenderPompe implements IItemRenderer
                      {
                      protected ModelPompe model;
                      protected static final ResourceLocation texture = new ResourceLocation("ModPg2:textures/models/items/Pompe.png");
                      
                          public RenderPompe()
                          {
                      model = new ModelPompe();
                          }
                      
                      @Override
                      public boolean handleRenderType(ItemStack item, ItemRenderType type)
                      {
                      switch(type)
                      {
                              case EQUIPPED:
                                  return true;
                              case EQUIPPED_FIRST_PERSON:
                                  return true;
                              default:
                                  return false;
                      }
                      }
                      
                      @Override
                      public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
                      {
                      return false;
                      }
                      
                      @Override
                      public void renderItem(ItemRenderType type, ItemStack item, Object… data)
                      {
                      switch(type)
                      {
                      case EQUIPPED:
                              {
                                  GL11.glPushMatrix();
                                  GL11.glRotatef(90.F, 1.0F, 0.2F, 0.0F);
                                  GL11.glRotatef(100.F, 1.0F, 0.0F, 0.0F);
                                  GL11.glTranslatef(0.5F, -0.35F, -0.75F);
                                  GL11.glScaled(0.5F, 0.5F, 0.5F);
                                  Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                                  model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                                  GL11.glPopMatrix();
                                  break;   
                              }
                              case EQUIPPED_FIRST_PERSON:
                              {
                              if(item.getTagCompound().getBoolean("onUse1") == true)
                                  {
                              GL11.glPushMatrix();
                                      GL11.glRotatef(90.F, 1.0F, -0.2F, 0.0F);
                                      GL11.glRotatef(100.F, 0.5F, -0.2F, -0.65F);
                                      GL11.glRotatef(30.F, -0.2F, -1.2F, 0.0F);
                                      GL11.glTranslatef(-0.25F, 0.55F, -2.8F);
                                      GL11.glScaled(1F, 1F, 1F);
                                      Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                                      model.render((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                                      GL11.glPopMatrix();
                                      break;
                                  }
                                  else
                                  {
                              GL11.glPushMatrix();
                                      GL11.glRotatef(90.F, 1.0F, -0.2F, 0.0F);
                                      GL11.glRotatef(100.F, 0.59F, -0.2F, -0.7F);
                                      GL11.glRotatef(30.F, 0F, -1.0F, 0.0F);
                                      GL11.glTranslatef(1F, 0.1F, -2.0F);
                                      GL11.glScaled(1F, 1F, 1F);
                                      Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                                      model.render((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                                      GL11.glPopMatrix();
                                      break;
                                  }      
                              }
                              default:
                                  break;
                              }
                      }
                      }
                      

                      :::

                      Voilà donc, tout marchait, quand j’ai voulu m’attaquer aux items suivant j’ai simplement refais tout pareil en changeant simplement le nom du nbt (onUse1/2/3, changé correctement partout), mais visiblement il ne suffit pas de vouloir.

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

                        Lorsque tu as une erreur, met aussi les imports, ici tu as un NPE dans la classe RenderPistolet, dans la méthode renderItem à la ligne 60, ce pendant sans les imports la ligne 60 c’est GL11.glPopMatrix(); et ça m’étonnerai que ce soit ça qui pose problème

                        1 réponse Dernière réponse Répondre Citer 0
                        • FolganskyF Hors-ligne
                          Folgansky Correcteurs
                          dernière édition par

                          Nope en effet c’est

                                   if(item.getTagCompound().getBoolean("onUse3") == true)
                          
                          

                          edit: je mettrai les imports à l’avenir ^^

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

                            Essai, au début de ta fonction renderItem de mettre :

                            
                            if(item.getTagCompound() == null) {
                            itemstack.setTagCompound(new NBTTagCompound());
                            }
                            else {
                            ton code
                            }
                            
                            
                            1 réponse Dernière réponse Répondre Citer 1
                            • FolganskyF Hors-ligne
                              Folgansky Correcteurs
                              dernière édition par

                              Décidément, faut en mettre partout de ces nullCheck.

                              Soirée de +2, merci les gars.

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

                                Dès que tu utilise les NBT d’un item il faut que tu vérifie si l’item si il en a, il si il en a pas tu lui en met, faut vraiment pas oublier

                                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