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

    Solved Texture 'pulling' arc

    1.8.x
    1.8
    3
    12
    2343
    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.
    • Eryah
      Eryah last edited by

      Bonjour, je me présente Eryah, et je vais aller vite cette fois, droit au problème

      J’ai codé un arc ( Vegetal bow ) qui est 2x plus résistant. Donc voila, explication inutile, mais bon. J’aimerai faire sa proprement, ( pas comme certain mod) et faire l’animation de l’arc quand on tir

      Le .java de l’arc ( C’est le même que celui de base, mais modifié légèrement )

      package eryah.usefulthings.init;
      
      import eryah.usefulthings.CreativeTab;
      import eryah.usefulthings.Reference;
      import eryah.usefulthings.UsefulthingsMod;
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.resources.model.ModelResourceLocation;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.enchantment.Enchantment;
      import net.minecraft.enchantment.EnchantmentHelper;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.entity.projectile.EntityArrow;
      import net.minecraft.init.Items;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.stats.StatList;
      import net.minecraft.world.World;
      import net.minecraftforge.fml.common.registry.GameRegistry;
      
      public class VegeBow extends Item {
      
      public static final String[] bowPullIconNameArray = new String[] {"pulling_0", "pulling_1", "pulling_2"};
         private static final String __OBFID = "CL_00001777";
      
         public static Item vegetal_bow;
      
         public VegeBow()
         {
             this.maxStackSize = 1;
             this.setMaxDamage(768);
             this.setCreativeTab(UsefulthingsMod.UTTab);
         }
      
         public static void init(){
      vegetal_bow = new Item().setUnlocalizedName("vegetal_bow").setCreativeTab(UsefulthingsMod.UTTabMat);
      }
      
      public static void register()
      {
      GameRegistry.registerItem(vegetal_bow,vegetal_bow.getUnlocalizedName().substring(5));
      }
      
      public static void registerRenders()
      {
      registerRender(vegetal_bow);
      }
      
      public static void registerRender(Item item)
      {
      Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
      }
      
         /**
          * Called when the player stops using an Item (stops holding the right mouse button).
          *  
          * @param timeLeft The amount of ticks left before the using would have been complete
          */
         public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft)
         {
             int j = this.getMaxItemUseDuration(stack) - timeLeft;
             net.minecraftforge.event.entity.player.ArrowLooseEvent event = new net.minecraftforge.event.entity.player.ArrowLooseEvent(playerIn, stack, j);
             if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return;
             j = event.charge;
      
             boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;
      
             if (flag || playerIn.inventory.hasItem(Items.arrow))
             {
                 float f = (float)j / 20.0F;
                 f = (f * f + f * 2.0F) / 3.0F;
      
                 if ((double)f < 0.1D)
                 {
                     return;
                 }
      
                 if (f > 1.0F)
                 {
                     f = 1.0F;
                 }
      
                 EntityArrow entityarrow = new EntityArrow(worldIn, playerIn, f * 2.0F);
      
                 if (f == 1.0F)
                 {
                     entityarrow.setIsCritical(true);
                 }
      
                 int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack);
      
                 if (k > 0)
                 {
                     entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
                 }
      
                 int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack);
      
                 if (l > 0)
                 {
                     entityarrow.setKnockbackStrength(l);
                 }
      
                 if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0)
                 {
                     entityarrow.setFire(100);
                 }
      
                 stack.damageItem(1, playerIn);
                 worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
      
                 if (flag)
                 {
                     entityarrow.canBePickedUp = 2;
                 }
                 else
                 {
                     playerIn.inventory.consumeInventoryItem(Items.arrow);
                 }
      
                 playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]);
      
                 if (!worldIn.isRemote)
                 {
                     worldIn.spawnEntityInWorld(entityarrow);
                 }
             }
         }
      }
      
      

      J’ai des hypothèse, mais j’ai pas trop envie d’expérimenter maintenant, je dois régler quelques problèmes prioritaires :
      Les textures de l’arc de base se nomment bow_pulling_1, dans le code on voit qu’elles s’apelle juste pulling_1…
      Je pense que c’est grâce à ceci : [font=Monaco, Consolas, Courier, monospacebowPullIconNameArray]
      Donc, je pense que si je marque ceci : V[font=Monaco, Consolas, Courier, monospacebowPullIconNameArray ][font=ArialMes textures devront s’apeller Vbow_pulling_1, Vbow_standby … etc]

      Membre fantôme
      Je développe maintenant un jeu sur UnrealEngine4


      Contact :…

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

        La texture de l’arc de Minecraft n’est pas du tout géré dans la classe de l’arc. Ça passe par une autre classe, qu’on ne peut bien sûr pas modifier. C’est pour ça que forge ajoute la fonction getModel, à utiliser comme ça :

           @Override
           public ModelResourceLocation getModel(ItemStack stack, EntityPlayer player, int useRemaining)
           {
               ModelResourceLocation modelresourcelocation = new ModelResourceLocation(NanotechHungerGames.MODID + ":bomber_bow", "inventory");
        
               if(stack.getItem() == this && player.getItemInUse() != null)
               {
                   if(useRemaining >= 18)
                   {
                       modelresourcelocation = new ModelResourceLocation(NanotechHungerGames.MODID + ":bomber_bow_pull2", "inventory");
                   }
                   else if(useRemaining > 13)
                   {
                       modelresourcelocation = new ModelResourceLocation(NanotechHungerGames.MODID + ":bomber_bow_pull1", "inventory");
                   }
                   else if(useRemaining > 0)
                   {
                       modelresourcelocation = new ModelResourceLocation(NanotechHungerGames.MODID + ":bomber_bow_pull0", "inventory");
                   }
               }
               return modelresourcelocation;
           }
        

        C’est le code de NHG, ça fait un moment que j’y ai pas touché, ça date du début de la 1.8, il me semble qu’il y a juste eu un petit changement dessus :
        https://github.com/MinecraftForge/MinecraftForge/issues/1623
        https://github.com/MinecraftForge/MinecraftForge/commit/64bf7bb3bef588d414561b638a945e8653df6dc5
        Donc il faudrait faire int useTime = this.getMaxDuration() - useRemaining; puis changer la texture en fonction de useTime et non de useRemaining.

        Attention à bien enregistrer les textures dans une fonction côté client (proxy ou directement classe principale avec un if(event.getSide().isClient()) :

               registerItem(NHGItems.bomberBow, 0, NanotechHungerGames.MODID + ":bomber_bow");
               registerItem(NHGItems.bomberBow, 1, NanotechHungerGames.MODID + ":bomber_bow_pull0");
               registerItem(NHGItems.bomberBow, 2, NanotechHungerGames.MODID + ":bomber_bow_pull1");
               registerItem(NHGItems.bomberBow, 3, NanotechHungerGames.MODID + ":bomber_bow_pull2");
        
               ModelBakery.addVariantName(NHGItems.bomberBow, new String[] {NanotechHungerGames.MODID + ":bomber_bow", NanotechHungerGames.MODID + ":bomber_bow_pull0", NanotechHungerGames.MODID + ":bomber_bow_pull1", NanotechHungerGames.MODID + ":bomber_bow_pull2"});
        

        La fonction registerItem :

           public static void registerItem(Item item, int metadata, String identifier)
           {
               ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
               mesher.register(item, metadata, new ModelResourceLocation(identifier, "inventory"));
           }
        
        1 Reply Last reply Reply Quote 0
        • Eryah
          Eryah last edited by

          Pfiou, tous cela m’a l’air bien plus compliqué de ce que je pensait…
          Je pense que je vais abbandoner pour l’instant, je reprendrais plus tard, quand je serais assez expérimenté pour faire cela

          Membre fantôme
          Je développe maintenant un jeu sur UnrealEngine4


          Contact :…

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

            Bon, je me suis remis a ce topic
            J’ai tenté, et j’ai foiré

            Classe du Clientproxy

            ​ registerItem(BladedBowDiamond.diamond_bladed_bow, 0, Reference.MOD_ID + ":diamond_bladed_bow_standby");
                  registerItem(BladedBowDiamond.diamond_bladed_bow, 1, Reference.MOD_ID + ":diamond_bladed_bow_pulling_0");
                  registerItem(BladedBowDiamond.diamond_bladed_bow, 2, Reference.MOD_ID + ":diamond_bladed_bow_pulling_1");
                  registerItem(BladedBowDiamond.diamond_bladed_bow, 3, Reference.MOD_ID + ":diamond_bladed_bow_pulling_2");
            
                   ModelBakery.addVariantName(BladedBowDiamond.diamond_bladed_bow, new String[] {Reference.MOD_ID + ":diamond_bladed_bow_standby", Reference.MOD_ID + ":diamond_bladed_bow_pulling_0", Reference.MOD_ID + ":diamond_bladed_bow_pulling_1", Reference.MOD_ID + ":diamond_bladed_bow_pulling_2"});
            
            }
            
            private void registerItem(Item diamond_bladed_bow, int i, String identifier) {
            
                    ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
                    mesher.register(diamond_bladed_bow, i, new ModelResourceLocation(identifier, "inventory"));
            
            }
            

            J’ai du utilisé la méthode registerItem auto généré, car celle de robin ne fonctionnait pas.

            Classe de l’itme

            ​  @Override
                public ModelResourceLocation getModel(ItemStack stack, EntityPlayer player, int useRemaining)
                {
                    ModelResourceLocation modelresourcelocation = new ModelResourceLocation(Reference.MOD_ID + ":diamond_bladed_bow_standby", "inventory");
            
                    if(stack.getItem() == this && player.getItemInUse() != null)
                    {
                        if(useRemaining >= 18)
                        {
                            modelresourcelocation = new ModelResourceLocation(Reference.MOD_ID + ":diamond_bladed_bow_pulling_0", "inventory");
                        }
                        else if(useRemaining > 13)
                        {
                            modelresourcelocation = new ModelResourceLocation(Reference.MOD_ID + ":diamond_bladed_bow_pulling_1", "inventory");
                        }
                        else if(useRemaining > 0)
                        {
                            modelresourcelocation = new ModelResourceLocation(Reference.MOD_ID + ":diamond_bladed_bow_pulling_2", "inventory");
                        }
                    }
                    return modelresourcelocation;
                }
            

            Pour une fois, j’ai relu 3x mon code avant de demander de l’aide !

            Je me demande : Faudrait-il un .json pour chaque phase de l’arc ?
            Car l’arc de base à plusieurs .json

            • bow_standby.json
            • bow_pulling_0.json
            • bow_pulling_1.json
            • bow_pulling_2.json

            Il est assez tard à l’heure ou j’ecrit ce message ( 01:45 ), je vais dormir et je vais tester cela


            Cela focntionne, mais je n’ai qu’une animation ( La pulling_0 je croit )

            Membre fantôme
            Je développe maintenant un jeu sur UnrealEngine4


            Contact :…

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

              Ajoute des logs en mettant dedans la variable useRemaining pour voir jusqu’où cette valeur va.

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

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

                Euh… je n’ai pas trop compris ce que tu veut dire
                Je n’ai aps encore une troop grande expérience sur Java ( Mais je me lance sur OpenClassroom quand je serais en vacances ( Lieu )) donc je ne sais pas faire un logger
                j’ai tenter de mettre un PrintIn dans une méthode else if(useRemaining), mais cela fait crasher mon jeu

                Membre fantôme
                Je développe maintenant un jeu sur UnrealEngine4


                Contact :…

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

                  Si tu n’as pas de logger, fait un System.ou.println(useRemaining) dans la fonction getModel.

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

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

                    Déso, j’avais un crash, et je devais le regler
                    Quand je right click avec l’arc, ce la donne ça dans les logs

                    ​0
                    0
                    71993
                    71986
                    71981
                    71975
                    71969
                    71963
                    0
                    0
                    

                    Donc c’est bon, j’ai compris l’erreur, je vais faire des tests pour voir quels sont les meilleurs valeurs a mettre
                    (PS : j’ai un bug sur mon client Debug, sa me le lance en normal, idée de ce que cela pourrait être ? )

                    Membre fantôme
                    Je développe maintenant un jeu sur UnrealEngine4


                    Contact :…

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

                      C’est à dire ? Si tu cliques sur debug, çà lance en debug.

                      Site web contenant mes scripts : http://SCAREXgaming.github.io

                      Pas de demandes de support par MP ni par skype SVP.
                      Je n'accepte sur skype que l…

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

                        eh bien non, moi ca ne me lance pas les consoles suplémentaires du débug, et quand je modfie une valeur, elle n’est pas modfié en temps réel

                        Membre fantôme
                        Je développe maintenant un jeu sur UnrealEngine4


                        Contact :…

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

                          Il n’y a pas de console supplémentaire en debug, si tu as une autre page sur eclipse qui veut s’ouvrir c’est qu’il y a eu une erreur donc il faut que tu lances en version normale. çà arrive notamment quand un thread autre que celui principal crash.

                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                          Pas de demandes de support par MP ni par skype SVP.
                          Je n'accepte sur skype que l…

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

                            Ah non c’est bon, mon Debug fonctionne.
                            Je le clos le sujet, en espérent ne jamais avoir a le re-ouvrir

                            Membre fantôme
                            Je développe maintenant un jeu sur UnrealEngine4


                            Contact :…

                            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