如何获得本课程中的生物体? (我的世界模组 1.18.2)

问题描述 投票:0回答:1

我正在尝试制作一种食物(冰毒),当你吃它时,它每次都会叠加效果放大器。所以我制作这个方法是为了尝试弄清楚玩家是否已经具有该效果,如果是,则使效果放大器为 2 而不是默认的 0。我的大问题是,当我尝试使用该方法时,它当然需要一个 LivingEntity(玩家)使用该方法,我应该在方法参数中放入什么以及如何获取 LivingEntity。

package net.tyrique.banhammermod.item.custom;

import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodProperties;
import net.tyrique.banhammermod.effect.ModEffects;

public class MethFood {

    public static final FoodProperties METH = (new FoodProperties.Builder()).alwaysEat().nutrition(0).saturationMod(0F).effect(
            () -> new MobEffectInstance(ModEffects.METH_EFFECT.get(), 1500, isAlreadyHigh(**WHAT DO I PUT HERE!?**)), 1.0F).fast().build();



    private static int isAlreadyHigh(LivingEntity player) {
        int lvl = 0;
        if (player.hasEffect(ModEffects.METH_EFFECT.get())) {
            lvl = 2;
        }


        return lvl;
    }


}

我已经尝试使用其他一些技术或可能的方法来获取播放器,但我不知道还能做什么。我确信解决方案很简单。

java minecraft minecraft-forge
1个回答
0
投票

您无法在该声明中获得

LivingEntity
,因为它独立于任何实体。它在任何实体存在之前就已声明。 应用效果时,您需要找到您的实体。

一种方法是订阅

PotionAddedEvent
并将逻辑放入事件处理程序中。
PotionAddedEvent
甚至为您提供了一个方法
getOldPotionEffect()
,当且仅当实体尚不具有相同类型的效果时,该方法才为空。您可能必须在此处使用更高的放大器再次应用该效果,因为该事件不可取消,这不是超级干净。还要确保您不会在此处造成应用效果的无限循环。

或者,您可以创建自己的

MobEffectInstance
子类,它重写
update(MobEffectInstance)
方法。这是每当应用效果并且该实体上已存在相同效果时调用的方法。在这里您可以创建专门针对您的项目的自己的逻辑。然后,您可以在
METH
对象的声明中使用自定义类。这可能是更干净但可能更困难的方法。

© www.soinside.com 2019 - 2024. All rights reserved.