电话
400 9058 355
在minecraft 1.19源码中,`damagesource.in_fire`与`damagesource.on_fire`虽同为火系伤害源且均绕过护甲、标记为火焰类型,但语义与触发场景截然不同:前者表示实体**处于火焰方块中**(如站在火堆里),后者表示实体**自身正在燃烧**(如被火把点燃后持续掉血)。
这两个常量定义于 net.minecraft.world.damagesource.DamageSource 类中:
public static final DamageSource IN_FIRE = (new DamageSource("inFire")).bypassArmor().setIsFire();
public static final DamageSource ON_FIRE = (new DamageSource("onFire")).bypassArmor().setIsFire();表面上看,二者行为高度相似——都调用 .bypassArmor()(无视护甲减免)和 .setIsFire()(启用火焰相关逻辑,如对凋灵造成伤害、触发防火药水效果等)。但其设计核心在于语义分离与上下文精确性,这是Minecraft死亡消息系统、成就判定及模组兼容性的关键基础。
IN_FIRE:用于实体直接接触火焰方块(Fire Block)或熔岩时的即时伤害。
例如:玩家跳入火堆、僵尸卡在燃烧的草方块中、掉落进岩浆池边缘的火焰层。该伤害每秒触发一次,且仅当实体的碰撞箱完全或部分位于火焰方块内时生效。
ON_FIRE:用于实体已被点燃(setOnFireFor(int ticks))后,每刻(20 ticks/秒)持续承受的燃烧伤害。
例如:被烈焰人火球击中、手持打火石点燃自己、受“着火”状态效果影响。此伤害独立于环境方块,即使玩家瞬移出火堆,只要燃烧倒计时未结束,ON_FIRE 仍会持续造成伤害。

你可以在 en_us.json 资源文件中查到这两条独立翻译,证实它们面向不同事件语义。若合并为同一 DamageSource,则无法实现精准死亡反馈——比如“在火里烤焦”和“自燃成灰”在游戏叙事中具有明确区分。
简言之,IN_FIRE 是环境致害,ON_FIRE 是状态致害;名称差异不是冗余,而是Minecraft底层伤害系统语义严谨性的直接体现。理解这一点,是读懂原版逻辑、编写健壮模组的基础。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...