🇨🇳 中文 (Chinese - China)
🇨🇳 中文 (Chinese - China)
外观
🇨🇳 中文 (Chinese - China)
🇨🇳 中文 (Chinese - China)
外观
This page is written for:
1.21
This page is written for:
1.21
状态效果,又称效果,是一种可以影响实体的状况, 可以是正面、负面或中性的。 游戏本体通过许多不同的方式应用这些效果,如食物和药水等等。
命令 /effect
可用来给实体应用效果。
在这篇教程中我们将加入一个叫 土豆 的新状态效果,每游戏刻给你 1 点经验。
StatusEffect
让我们通过继承所有状态效果的基类 StatusEffect
来创建一个自定义状态效果类。
public class TaterEffect extends StatusEffect {
protected TaterEffect() {
// category: StatusEffectCategory - describes if the effect is helpful (BENEFICIAL), harmful (HARMFUL) or useless (NEUTRAL)
// color: int - Color is the color assigned to the effect (in RGB)
super(StatusEffectCategory.BENEFICIAL, 0xe9b8b3);
}
// Called every tick to check if the effect can be applied or not
@Override
public boolean canApplyUpdateEffect(int duration, int amplifier) {
// In our case, we just make it return true so that it applies the effect every tick
return true;
}
// Called when the effect is applied.
@Override
public boolean applyUpdateEffect(LivingEntity entity, int amplifier) {
if (entity instanceof PlayerEntity) {
((PlayerEntity) entity).addExperience(1 << amplifier); // Higher amplifier gives you experience faster
}
return super.applyUpdateEffect(entity, amplifier);
}
}
与注册方块和物品类似,我们使用 Registry.register
将我们的自定义状态效果注册到 STATUS_EFFECT
注册表。 这可以在我们的初始化器内完成。
public class FabricDocsReferenceEffects implements ModInitializer {
public static final StatusEffect TATER_EFFECT;
static {
TATER_EFFECT = Registry.register(Registries.STATUS_EFFECT, Identifier.of("fabric-docs-reference", "tater"), new TaterEffect());
}
@Override
public void onInitialize() {
// ...
}
}
状态效果的图片是一个 18x18 的 PNG,显示在玩家的背包中。 将你的自定义图标放在:
resources/assets/fabric-docs-reference/textures/mob_effect/tater.png
像其它翻译一样,你可以在语言文件中添加一个 ID 格式的条目 "effect.<mod-id>.<effect-identifier>": "Value"
。
{
"effect.fabric-docs-reference.tater": "Tater"
}
使用命令 /effect give @p fabric-docs-reference:tater
为玩家提供 Tater 效果。 使用 /effect clear @p fabric-docs-reference:tater
移除效果。
INFO
要创建使用此效果的药水,请参阅药水指南。