1. 状态效果与属性修饰符

虽然状态效果的具体逻辑是需要通过其他手段(事件订阅、方块更新、物品使用等)来实现的,但有一小部分原版状态效果的逻辑是直接利用生物实体属性实现的。 具体来说,这些状态效果的逻辑是通过在生物实体获得状态效果后,调用 Potion.applyAttributesModifiersToEntityfunc_111185_a)来实现的。原版有这些状态效果是通过这个方式实现的:

  • 速度(MobEffects.SPEED),提升生物移动速度(SharedMonsterAttributes.MOVEMENT_SPEED
  • 迟缓(MobEffects.SLOWNESS),降低生物移动速度
  • 急迫(MobEffects.HASTE),(忽略挖掘速度)提升攻击速度(SharedMonsterAttributes.ATTACK_SPEED
  • 挖掘疲劳(MobEffects.MINING_FATIGUE),(忽略挖掘速度)降低攻击速度
  • 力量(MobEffects.STRENGTH),提升攻击力(SharedMonsterAttributes.ATTACK_DAMAGE
  • 虚弱(MobEffects.WEAKNESS),降低攻击力
  • 生命提升(MobEffects.HEALTH_BOOST),提升生命值上限(SharedMonsterAttributes.MAX_HEALTH
  • 幸运(MobEffects.LUCK),提升幸运值(SharedMonsterAttributes.LUCK
  • 霉运(MobEffects.UNLUCK),降低幸运值

如果你的 Potion 的效果也是影响某个属性,可以考虑使用类似的方法实现。 只需要调用 Potion.registerPotionAttributeModifier 即可:

// 第一个参数 attribute 即 IAttribute 实例。
// 第二个参数 uuid 是 String 形态的 UUID。
// 第三个参数和第四个参数同 AttributeModifier 构造器的最后两个参数。
//
// registerPotionAttributeModifier 返回 Potion 它本身,可组成链式调用。
Potion myPotion = new Potion()
        .registerPotionAttributeModifier(attribute, uuid, amount, operation)
        .setRegistryName("my_mod:a_weird_potion");