Персонализирана анимация за дърпане на лък не се показва - Minecraft Forge за 1.7.10

Създавам много основно разширение на ItemBow. В момента просто се опитвам да сменя текстурите за моя нов лък. Имам иконата за "готовност", работеща правилно, но когато стрелям с лък, не получавам иконите за "дърпане", които да преминават през анимацията.

По-долу е малък скрийнкаст на липсата на анимация. Както можете да видите, иконата "готовност" присъства през целия кадър. Анимацията никога не преминава през 3-те икони за "дърпане".

http://screencast-o-matic.com/watch/c2lfr0e0Ze

Ето моят клас:

package com.swatkins.firstmod;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemBow;
import net.minecraft.util.IIcon;

public class DiamondBow extends ItemBow {

   public static final String[] bowPullIconNameArray = new String[] {"diamond_bow_pulling_0", "diamond_bow_pulling_1", "diamond_bow_pulling_2"};
    @SideOnly(Side.CLIENT)
    private IIcon[] iconArray;

   public DiamondBow()
   {
      setUnlocalizedName(FirstMod.MODID + "_" + "diamond_bow");
   }

   @Override
   @SideOnly(Side.CLIENT)
    public void registerIcons(IIconRegister p_94581_1_)
    {
        this.itemIcon = p_94581_1_.registerIcon(FirstMod.MODID + ":" + "diamond_bow_standby");
        this.iconArray = new IIcon[bowPullIconNameArray.length];

        for (int i = 0; i < this.iconArray.length; ++i)
        {
            this.iconArray[i] = p_94581_1_.registerIcon(FirstMod.MODID + ":" + bowPullIconNameArray[i]);
        }
    }
}

Знам, че има метод getItemIconForUseDuration, но той никога не се извиква, когато задържите десния бутон на мишката, за да стреляте с лъка. Опитах също да внедря метод getIcon, но той също не се извиква.

Може ли някой да ми помогне да накарам тази анимация да работи? Оценявам вашата помощ!

FYI: Публикувах това във форумите на minecraft forge, но там изглежда мъртво.


person swatkins    schedule 04.12.2014    source източник


Отговори (1)


Преди малко направих лък по поръчка. Въпреки че двата метода може да не изглеждат необходими, те са. (Току-що ги изтрих, за да тествам върху моя собствен лък) Ето как кодирах методите:

@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon (ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
{
    if (usingItem != null)
    {
        int time = 72000 - useRemaining;
        if (time < 8)
            return iconArray[0];
        if (time < 14)
            return iconArray[1];
        return iconArray[2];
    }
    return getIcon(stack, renderPass);
}

@Override
public IIcon getItemIconForUseDuration(int par1)
{
    return this.iconArray[par1];
}

Надявам се това да помогне!

РЕДАКТИРАНЕ: Намерих къде се извиква getItemIconForUseDuration(). В EntityPlayer.class getItemIcon() го извиква.

person user4313659    schedule 06.12.2014
comment
Много благодаря. Просто добавянето на тези два метода (точно както ги имате тук) свърши работата. Благодаря много за помощта!! - person swatkins; 08.12.2014