我正在制作我的Minecraft模组,并试图检测玩家是否有特定物品,如果有,这会给你带来效果。我正在尝试通过使用PlayerTickEvent来执行此操作,但是我不知道如何使用它,因为我以前从未使用过它。我之前使用过一个检查附魔插槽已更改的函数,所以我尝试了一下,但是没有用。有任何想法吗?这是我最初尝试的代码:
@SubscribeEvent
public void testItemFunction(LivingEquipmentChangeEvent event)
{
boolean itemIsInInventory;
Object player = event.getEntityLiving();
if (event.getEntityLiving() instanceof EntityLivingBase)
{
EntityEquipmentSlot slotChanged = event.getSlot();
if (slotChanged.getSlotIndex() > -1 && slotChanged.getSlotIndex() < 36)
{
if(slotChanged != null && slotChanged.() == ModItems.TEST_ITEM)
{
itemIsInInventory = true;
}
}
else
{
itemIsInInventory = false;
}
}
而不是设置和删除效果,而是更改变量itemIsInInventory,因为我在util包中的类中创建了此方法,因此我可以在需要时调用它,而无需复制粘贴该方法
我找到了一个简单得多的答案,但可能不适用于某些事情。我前一阵子发现了它,但是它似乎没有用,所以我寻找了另一种解决方案,但是现在我回到了它,我意识到我做错了。这是代码:
@Override
public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag)
{
//Runs the method every tick the item is in the player's inventory
((EntityLivingBase) entity).addPotionEffect(new PotionEffect(MobEffects.INVISIBILITY, 10, 0, false, false));
//Gives the entity with the item the invisibility effect for half a second every tick
}
简单地说,不是检测玩家是否拥有该物品,而是仅在玩家拥有该物品时运行代码。