添加女仆饰品
约 689 字大约 2 分钟
2025-11-05
女仆饰品是女仆物品栏中的特殊槽位,放入的物品通常能为女仆带来特殊能力。例如,各类伤害保护饰品,或可以大范围吸取掉落物的饰品。
本例中,为了演示方便,我们将原版木棍设计成一个女仆饰品:当木棍被放入女仆饰品栏时,将为女仆赋予原版的发光 效果。此外,若女仆佩戴木棍饰品并受到火焰伤害时,将再次赋予发光效果并损坏饰品。
一、新建 IMaidBauble 子类
首先,创建一个继承自 IMaidBauble 的子类 CustomBauble:
public class CustomBauble implements IMaidBauble {
}仔细观察 IMaidBauble 类,你会发现其中有一个 onTick 方法。该方法会在女仆佩戴饰品后每 tick 执行一次。除此之外还有许多其他方法,可以根据需要进行重写。
为了避免频繁检测带来的性能损耗,我们可以每隔一段时间为女仆添加发光效果。例如:
public class CustomBauble implements IMaidBauble {
/**
* 每 tick 调用的方法,为女仆定期添加发光效果。
*
* @param maid 女仆实体
* @param baubleItem 饰品物品实例
*/
@Override
public void onTick(EntityMaid maid, ItemStack baubleItem) {
// 每 150 tick 检查一次,减少性能消耗
if (maid.tickCount % 150 == 0) {
maid.addEffect(new MobEffectInstance(MobEffects.GLOWING, 200));
}
}
}此外,我们还希望女仆在佩戴饰品且受到火焰伤害时获得发光效果并损坏饰品。这可以通过重写 onInjured 方法来实现:
public class CustomBauble implements IMaidBauble {
@Override
// onInjured 方法在女仆受到伤害时调用
public boolean onInjured(EntityMaid maid, ItemStack baubleItem, DamageSource source, MutableFloat damage) {
// 仅检测火焰伤害类型
if (source.is(DamageTypeTags.IS_FIRE)) {
// 损坏饰品(木棍本身无耐久,hurtAndBreak 不起作用)
baubleItem.hurtAndBreak(1, maid, m -> maid.sendItemBreakMessage(baubleItem));
// 赋予发光效果
maid.addEffect(new MobEffectInstance(MobEffects.GLOWING, 200));
// 返回 true,表示取消此次伤害
return true;
}
return false;
}
}注意
说明:由于木棍本身没有耐久度,因此上述 hurtAndBreak 方法不会实际损坏物品。
除此之外我们还可以使用 ItemsUtil 工具类方便地检索女仆身上的物品、饰品等。
二、将饰品与物品绑定
接下来,需要将自定义饰品与物品绑定。回到 LittleMaidCompat 类,重写 bindMaidBauble 方法,将木棍与自定义饰品进行绑定:
@LittleMaidExtension
public class LittleMaidCompat implements ILittleMaid {
// 绑定女仆饰品,将自定义饰品与物品关联
@Override
public void bindMaidBauble(BaubleManager manager) {
// 将木棍与自定义饰品绑定
manager.bind(Items.STICK, new CustomBauble());
}
}此时,进入游戏,鼠标悬浮于木棍之上即可看到相关提示:
将木棍放入女仆饰品栏,即可体验相应效果!
