325 words
2 minutes
11 一步十行
11 一步十行
/**
* 用于处理“一步登天”附魔效果的 mixin,该附魔可以增加玩家的步高。
*/
@EventBusSubscriber(modid = NeoMafishMod.MODID)
public class LivingEquipmentChange {
// 用于存储生物的默认步高值
private static final Map<LivingEntity, Double> defaultStepHeightMap = new HashMap<>();
/**
* 当玩家更换装备时触发,用于处理“一步登天”附魔效果。
*
* @param event 装备更换事件
*/
@SubscribeEvent
public static void onLivingEquipmentChange(LivingEquipmentChangeEvent event) {
LivingEntity entity = event.getEntity(); // 获取更换装备的生物实体
EquipmentSlot slot = event.getSlot(); // 获取更换的装备槽位
ItemStack from = event.getFrom(); // 获取被替换的装备
ItemStack to = event.getTo(); // 获取新的装备
// 如果更换的装备槽位是脚部装备槽
if (slot == EquipmentSlot.FEET) {
// 获取生物的步高属性
AttributeInstance stepHeightAttribute = entity.getAttribute(Attributes.STEP_HEIGHT);
// 如果是第一次更换装备,保存默认步高值
if (!defaultStepHeightMap.containsKey(entity) && stepHeightAttribute != null) {
defaultStepHeightMap.put(entity, stepHeightAttribute.getBaseValue());
}
// 如果被替换的装备有“一步登天”附魔
if (from.isEnchanted() && ModEnchantmentHelper.getEnchantmentLevel(ModEnchantments.ONE_STEP_TEN_LINE, from) > 0) {
// 重置步高属性为默认值
if (stepHeightAttribute != null) {
Double defaultStepHeight = defaultStepHeightMap.get(entity);
if (defaultStepHeight != null) {
stepHeightAttribute.setBaseValue(defaultStepHeight);
}
}
}
// 如果新的装备有“一步登天”附魔
if (to.isEnchanted() && ModEnchantmentHelper.getEnchantmentLevel(ModEnchantments.ONE_STEP_TEN_LINE, to) > 0) {
// 设置步高属性为 10.0D,增加玩家的步高
if (stepHeightAttribute != null) {
stepHeightAttribute.setBaseValue(10.0D);
}
}
}
}
}