1. 投掷物(例如雪球)
这个涉及到一点实体的内容。关于实体的细节会在后面的章节中讲到。
public class ItemInfiniteSnowball extends Item {
public ItemSnowball() {
this.setCreativeTab(CreativeTabs.MISC);
}
// 当玩家拿着这无限雪球右键的时候会调用这个方法。我们在这里实现丢雪球的效果。
@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
ItemStack item = player.getHeldItem(hand);
// 播放雪球被抛出去的声音——这个会在后面的章节中详细解释
world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
// world.isRemote 用于判断是服务端还是客户端,这里我们要做的逻辑显然应该只在服务端执行
// 这个字段的细节在第七章有详细阐述。
if (!world.isRemote) {
//生成雪球实体——关于实体的内容在第八章会详细解释,我们现在丢雪球就好了
EntitySnowball snowball = new EntitySnowball(world, player);
snowball.shoot(player, player.rotationPitch, player.rotationYaw, 0.0F, 1.5F, 1.0F);
world.spawnEntity(snowball);
}
// 互动成功,返回EnumActionResult.SUCCESS,item 是互动结束以后的 item
// 因为这是个可以无限丢的雪球,所以这里数量没有减去 1。减去 1 的话丢出去就会少一个。
// item.shrink(1); // 数量 - 1
// 自然地,减去 2 的话丢出去就会少两个。
return new ActionResult<>(EnumActionResult.SUCCESS, item);
}
}
`