尝试检测玩家是否在我的Minecraft mod中的库存中有特定物品

时间:2020-06-09 16:26:19

标签: java eclipse minecraft minecraft-forge

我正在制作我的世界(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包的类中创建了此方法,因此我可以随时调用它,而不必复制粘贴该方法< / p>

1 个答案:

答案 0 :(得分:0)

我找到了一个简单得多的答案,但是它可能不适用于某些事情。我前一阵子发现了它,但是它似乎没有用,所以我寻找了另一种解决方案,但是现在我回到了它,我意识到我做错了。这是代码:

@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
    }

简单地输入,而不是检测玩家是否拥有该物品,它仅在玩家拥有该物品时运行代码。我所说的“我做错了”的意思是该代码应放在物料的类中,以便仅在物料在库存中时才触发。我不确定,但是我不认为如果给僵尸这样的物品,这是行不通的。