FoodStatsMixin

基本信息

属性 值
目标类 net.minecraft.util.FoodStats
Mixin 阶段 EARLY
注入数 3(全部在 addStats)
挂载接口 FoodStatsExt
注册于 Mixins.MINECRAFT(common mixin)
启用版本 Minecraft 1.7.10

功能

本 mod 的核心事件总闸。原版 FoodStats 把进食、消耗、回血、掉血 全部塞在 addStats(int, float) 这一个方法里,因此全部 12 个 FoodEvent / ExhaustionEvent / HealthRegenEvent / StarvationEvent 子事件都在此处触发。

实现要点

  • 触发的事件(由源码实际调用确认):
    • FoodEvent.FoodStatsAddition、FoodEvent.FoodEaten
    • ExhaustionEvent.AllowExhaustion、ExhaustionEvent.Exhausted
    • HealthRegenEvent.AllowRegen、HealthRegenEvent.GetRegenTickPeriod、 HealthRegenEvent.Regen
    • StarvationEvent.AllowStarvation、StarvationEvent.GetStarveTickPeriod、 StarvationEvent.Starve
  • GetRegenTickPeriod / GetStarveTickPeriod / GetMaxExhaustion 的返回值被写回原版的 tickCount 与 foodExhaustionLevel 判定, 因此 IAppleCoreAccessor 里的 3 个 get*TickPeriod 方法最终读取的是这里被事件改写后的结果。
  • Exhausted 事件处读取 exhaustedEvent.deltaExhaustion、 deltaHunger、deltaSaturation 三个可写字段作为实际扣减量, 并检查 isCanceled()。
  • Starve 事件处读取可写的 starveDamage。
  • Regen 事件处读取 deltaHealth 与 deltaExhaustion。
  • 三个 Allow* 事件都通过 getResult() 决定是否继续 (Event.Result.DENY 即阻止)。
  • 隐藏字段的读写由 FoodStatsAccessor 提供通道, 本类只负责事件编排。

相关条目