java - 尝试检测玩家在我的 Minecraft mod 的库存中是否有特定元素

标签 java minecraft minecraft-forge

我正在制作我的《我的世界》模组,并尝试检测玩家是否拥有特定元素,如果拥有该元素就会给你带来效果。我试图通过使用 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
    }

简单来说,它不会检测玩家是否拥有该元素,而是仅在玩家拥有该元素时才运行代码。我所说的“我做错了”的意思是,这段代码应该放在元素的类中,这样它只有在元素位于你的库存中时才会触发。我不确定,但我认为如果将该元素交给僵尸等人,这不会起作用。

关于java - 尝试检测玩家在我的 Minecraft mod 的库存中是否有特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62287335/

相关文章:

javascript - 将 Minecraft 颜色代码转换为 HTML

java - 为什么我的区 block 没有出现 |我的世界锻造版 1.12.1

java - 如何在 Minecraft Forge 中注册 ItemBlock?

java - 我的世界 Forge 似乎没有调用 postInit

java - Android UDP 示例代码问题

java - Arrays.asList : when a set is used as the argument we get back a list<set<Integer>> instead of List<Integer>

Java - BungeeCord 关闭

java - 我如何让这个 IF 语句起作用?

java - 如何打印数组中出现的所有最大的两个整数?

java - 我如何检测 Bukkit 生成的鹅卵石?