2

我正在创建一个非常基本的扩展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方法,但也没有调用它。

谁能帮我让这个动画工作?我感谢您的帮助!

仅供参考:我已经在 minecraft forge 论坛上发布了这个,但它似乎死在那里。

4

1 回答 1

4

不久前我做了一个定制的弓。虽然这两种方法似乎没有必要,但它们确实是必要的。(我刚刚删除它们以在我自己的弓上进行测试)以下是我编写方法的方式:

@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() 调用它。

于 2014-12-06T01:25:30.707 回答