给物品添加一些其他功能

本章主要介绍给物品添加一些更多的功能,功能如下:

右击事件

mc的item提供了onItemRightClick方法,来表示物品的右击事件,我们只要在item中重写这个方法就可以了。
Rubber类中添加如下代码:

    @Override
    public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn)
    {
        ItemStack itemstack = playerIn.getHeldItem(handIn);
        if (!playerIn.capabilities.isCreativeMode){
            itemstack.shrink(1);
        }
        worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_ARROW_HIT_PLAYER, SoundCategory.PLAYERS, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
        return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, itemstack);
    }
  • playerIn.getHeldItem(handIn);:获得右击的物品getHeldItem方法传入手的类型(主,副),返回拿的东西。
  • playerIn.capabilities.isCreativeMode:检测玩家是否是创造模式。
  • worldIn.playSound:播放一个音效。
  • return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, itemstack):返回状态(成功),和现在的物品堆。 演示如下图:
  • PS:缩手是右击的效果,声音无法体现,请大家自行试验。

攻击实体事件

mc的item提供了hitEntity方法,来表示物品的右击事件,我们只要在item中重写这个方法就可以了。
Rubber类中添加如下代码:

    @Override
    public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker)
    {
        if(target instanceof EntityMob){
            stack.grow(1);
        }
        return true;
    }
  • target instanceof EntityMob如果目标是怪物的话返回true。
  • stack.grow(1);该物品堆物品数量加一。

演示如下图:

results matching ""

    No results matching ""