Minecraft 1.19 MCP中IN_FIRE与ON_FIRE变量的差异问询
Minecraft 1.19 MCP中IN_FIRE与ON_FIRE伤害源的差异解析
这两个静态常量虽然代码声明几乎一致,但核心差异和适用场景是明确的:
核心区别
二者的唯一本质差异是伤害源的字符串标识符:IN_FIRE对应"inFire",ON_FIRE对应"onFire"。这个标识符是区分它们的关键,用于游戏内的多场景逻辑区分。
适用场景
- IN_FIRE:专门用于实体处于火焰类方块(火、岩浆块等)的范围内时,受到的持续伤害。比如玩家直接站在火方块上每秒触发的伤害。
- ON_FIRE:用于实体自身被点燃后(比如被火焰弹击中、接触火焰方块后身上附着火焰效果)的持续伤害,也就是"身上着火"状态下的每秒伤害。
存在原因
- 场景区分与统计:游戏可以通过不同标识符统计两种火焰伤害的触发次数,比如在玩家死亡统计里区分"死于火中"和"死于身上着火"。
- 本地化文本适配:不同场景的伤害提示可以对应不同的本地化字符串,比如
inFire对应"你在火焰中被烧伤",onFire对应"你被火焰灼烧",通过标识符加载对应文本。 - 模组/插件扩展:第三方开发者可以针对这两个不同的伤害源编写差异化逻辑,比如给站在火里的实体添加临时抗性,对身上着火的实体触发特殊debuff,无需额外判断伤害触发场景。
需要注意的是,虽然二者都具备bypassArmor()和setIsFire()的特性,但游戏底层在触发伤害时会严格根据场景调用对应的常量,不会出现混用情况。
内容的提问来源于stack exchange,提问作者ByRuss X
相关产品推荐
相关产品推荐

