Problème Texture Arc



  • Salut, j'ai beau cherché comment régler ce problème, je n'y arrive pas (pourtant sa doit être une erreur vraiment toute simple). En bref, la texture de mon arc à l'arrêt (nom de la texture : amethyst_bow_standby) fonctionne bien, mais lorsque je tire, l'animation commence mais n'affiche que la texture amethyst_bow_pulling_0, les deux autres ne s'affichent pas. Mais sinon l'arc fonctionne très bien, c'est juste un problème de texture. Je vais vous mettre tous les codes en lien avec cette arc (.JSON + .class)

    Le code de la classe ItemModBow (elle n'est pour l'instant qu'une copie d'ItemBow (avec une ligne de modifié) mais j'ai prévu de la modifier plus tard) :

    public class ItemModBow extends Item {
    public ItemModBow(int maxDamage) {
    this.maxStackSize = 1;
       this.setMaxDamage(maxDamage);
       this.setCreativeTab(CreativeTabs.COMBAT);
       this.addPropertyOverride(new ResourceLocation("pull"), new IItemPropertyGetter() {
           @SideOnly(Side.CLIENT)
           public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) {
               return entityIn == null ? 0.0F : (entityIn.getActiveItemStack().getItem() != Items.BOW ? 0.0F : (float)(stack.getMaxItemUseDuration() - entityIn.getItemInUseCount()) / 20.0F);
           }
       });
       this.addPropertyOverride(new ResourceLocation("pulling"), new IItemPropertyGetter() {
           @SideOnly(Side.CLIENT)
           public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) {
               return entityIn != null && entityIn.isHandActive() && entityIn.getActiveItemStack() == stack ? 1.0F : 0.0F;
           }
       });
    }
    
    private ItemStack findAmmo(EntityPlayer player) {
       if (this.isArrow(player.getHeldItem(EnumHand.OFF_HAND))) {
           return player.getHeldItem(EnumHand.OFF_HAND);
       }
       else if (this.isArrow(player.getHeldItem(EnumHand.MAIN_HAND))) {
           return player.getHeldItem(EnumHand.MAIN_HAND);
       }
       else {
           for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
               ItemStack itemstack = player.inventory.getStackInSlot(i);
    
               if (this.isArrow(itemstack)) {
                   return itemstack;
               }
           }
    
           return ItemStack.EMPTY;
       }
    }
    
    protected boolean isArrow(ItemStack stack) {
       return stack.getItem() instanceof ItemArrow;
    }
    
    public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft) {
       if (entityLiving instanceof EntityPlayer) {
           EntityPlayer entityplayer = (EntityPlayer)entityLiving;
           boolean flag = entityplayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantments.INFINITY, stack) > 0;
           ItemStack itemstack = this.findAmmo(entityplayer);
    
           int i = this.getMaxItemUseDuration(stack) - timeLeft;
           i = net.minecraftforge.event.ForgeEventFactory.onArrowLoose(stack, worldIn, entityplayer, i, !itemstack.isEmpty() || flag);
           if (i < 0) return;
    
           if (!itemstack.isEmpty() || flag) {
               if (itemstack.isEmpty()) {
                   itemstack = new ItemStack(Items.ARROW);
               }
    
               float f = getArrowVelocity(i);
    
               if ((double)f >= 0.1D) {
                   boolean flag1 = entityplayer.capabilities.isCreativeMode || (itemstack.getItem() instanceof ItemArrow && ((ItemArrow) itemstack.getItem()).isInfinite(itemstack, stack, entityplayer));
    
                   if (!worldIn.isRemote) {
                       ItemArrow itemarrow = (ItemArrow)((ItemArrow)(itemstack.getItem() instanceof ItemArrow ? itemstack.getItem() : Items.ARROW));
                       EntityArrow entityarrow = itemarrow.createArrow(worldIn, itemstack, entityplayer);
                       entityarrow.setAim(entityplayer, entityplayer.rotationPitch, entityplayer.rotationYaw, 0.0F, f * 3.0F, 1.0F);
    
                       if (f == 1.0F) {
                           entityarrow.setIsCritical(true);
                       }
    
                       int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack);
    
                       if (j > 0) {
                           entityarrow.setDamage(entityarrow.getDamage() + (double)j * 0.5D + 0.5D);
                       }
    
                       int k = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack);
    
                       if (k > 0) {
                           entityarrow.setKnockbackStrength(k);
                       }
    
                       if (EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, stack) > 0) {
                           entityarrow.setFire(100);
                       }
    
                       stack.damageItem(1, entityplayer);
    
                       if (flag1 || entityplayer.capabilities.isCreativeMode && (itemstack.getItem() == Items.SPECTRAL_ARROW || itemstack.getItem() == Items.TIPPED_ARROW)) {
                           entityarrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY;
                       }
    
                       worldIn.spawnEntity(entityarrow);
                   }
    
                   worldIn.playSound((EntityPlayer)null, entityplayer.posX, entityplayer.posY, entityplayer.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
    
                   if (!flag1 && !entityplayer.capabilities.isCreativeMode) {
                       itemstack.shrink(1);
    
                       if (itemstack.isEmpty()) {
                           entityplayer.inventory.deleteStack(itemstack);
                       }
                   }
    
                   entityplayer.addStat(StatList.getObjectUseStats(this));
               }
           }
       }
    }
    
    public static float getArrowVelocity(int charge) {
       float f = (float)charge / 20.0F;
       f = (f * f + f * 2.0F) / 3.0F;
    
       if (f > 1.0F) {
           f = 1.0F;
       }
    
       return f;
    }
    
    public int getMaxItemUseDuration(ItemStack stack) {
       return 72000;
    }
    
    public EnumAction getItemUseAction(ItemStack stack) {
       return EnumAction.BOW;
    }
    
    public ActionResult <itemstack>onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) {
       ItemStack itemstack = playerIn.getHeldItem(handIn);
       boolean flag = !this.findAmmo(playerIn).isEmpty();
    
       ActionResult <itemstack>ret = net.minecraftforge.event.ForgeEventFactory.onArrowNock(itemstack, worldIn, playerIn, handIn, flag);
       if (ret != null) return ret;
    
       if (!playerIn.capabilities.isCreativeMode && !flag) {
           return flag ? new ActionResult(EnumActionResult.PASS, itemstack) : new ActionResult(EnumActionResult.FAIL, itemstack);
       }
       else {
           playerIn.setActiveHand(handIn);
           return new ActionResult(EnumActionResult.SUCCESS, itemstack);
       }
    }
    
    public int getItemEnchantability() {
       return 1;
    }
    }
    

    et ici la classe de mes arcs:

    public class th_bow {
    
    public th_bow() {
    initItems();
    registerItems();
    registerRenders();
    }
    
    public static Item amethyst_bow;
    
    public void initItems() {
    amethyst_bow = new ItemModBow(800).setUnlocalizedName("amethyst_bow").setRegistryName("amethyst_bow");
    }
    
    public void registerItems() {
    registerItem(amethyst_bow);
    }
    
    @SideOnly(Side.CLIENT)
    public void registerRenders() {
    registerRender(amethyst_bow, 0);
    }
    
    private void registerItem(Item item) {
    GameRegistry.register(item);
    }
    
    private void registerRender(Item item, int meta) {
    ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(new ResourceLocation(References.MODID, item.getUnlocalizedName().substring(5)), "inventory"));
    }
    }
    
    

    Maintenant les JSON des textures :
    amethyst_bow :

    {
       "parent": "item/generated",
       "textures": {
           "layer0": "modtest:items/amethyst_bow_standby"
       },
       "display": {
           "thirdperson_righthand": {
               "rotation": [ -80, 260, -40 ],
               "translation": [ -1, -2, 2.5 ],
               "scale": [ 0.9, 0.9, 0.9 ]
           },
           "thirdperson_lefthand": {
               "rotation": [ -80, -280, 40 ],
               "translation": [ -1, -2, 2.5 ],
               "scale": [ 0.9, 0.9, 0.9 ]
           },
           "firstperson_righthand": {
               "rotation": [ 0, -90, 25 ],
               "translation": [ 1.13, 3.2, 1.13],
               "scale": [ 0.68, 0.68, 0.68 ]
           },
           "firstperson_lefthand": {
               "rotation": [ 0, 90, -25 ],
               "translation": [ 1.13, 3.2, 1.13],
               "scale": [ 0.68, 0.68, 0.68 ]
           }
       },
       "overrides": [
           {
               "predicate": {
                   "pulling": 1
               },
               "model": "modtest:item/amethyst_bow_pulling_0"
           },
           {
               "predicate": {
                   "pulling": 1,
                   "pull": 0.65
               },
               "model": "modtest:item/amethyst_bow_pulling_1"
           },
           {
               "predicate": {
                   "pulling": 1,
                   "pull": 0.9
               },
               "model": "modtest:item/amethyst_bow_pulling_2"
           }
       ]
    }
    
    

    amethyst_bow_pulling_0 & amethyst_bow_pulling_1 & amethyst_bow_pulling_2 (je n'en met qu'un[size=small, car juste une chiffre change)][size=small:]

    {
       "parent": "item/bow",
       "textures": {
           "layer0": "modtest:items/amethyst_bow_pulling_0"
       }
    }
    
    

    Les Textures s'appellent amethyst_bow_standby, amethyst_bow_pulling_0, amethyst_bow_pulling_1, amethyst_bow_pulling_2.
    J'espère que vous pourrez m'aidez.

    PS : Excusez-moi pour les fautes d'orthographe (s'il y en a).</itemstack></itemstack>



  • Salut, il y a pas mal d'erreurs dans ton code.
    Déjà, c'est une mauvaise idée de copier-coller le code de l'arc, tu aura des problèmes avec les enchantements. Il faut plutôt extends la class ItemBow.
    Ensuite, il y a une truc important à modifier quand on fait un arc, c'est le ''!= Items.BOW" qu'il faut bien, entendu modifier en mettant ton item.
    Ensuite ta class th_bow est vraiment pas bien faite, (déjà le nom qui ne respecte pas la convention Java) le problème principale est d'appeler registerRenders. Ça va crasher dés que le mod sera sur un serveur.



  • Merci pour l'info pour le crash serveur, je n'avais jamais essayer sur un serveur et en effet ça crash. Je réglerai cela plus tard.

    Et merci aussi, pour les autres infos, maintenant mon arc fonctionne bien.


Log in to reply