Minecraft源码中IN_FIRE与ON_FIRE伤害源的本质区别解析
发布时间 - 2026-01-29 00:00:00 点击率:次在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 仍会持续造成伤害。
? 验证依据:死亡消息与日志表现
Minecraft通过 DamageSource.getLocalizedDeathMessage(LivingEntity) 方法生成死亡提示,而 IN_FIRE 与 ON_FIRE 对应不同本地化键:
- inFire → "death.attack.inFire" → "Player was burnt to a crisp"`
- onFire → "death.attack.onFire"
→ "Player went up in flames"`
你可以在 en_us.json 资源文件中查到这两条独立翻译,证实它们面向不同事件语义。若合并为同一 DamageSource,则无法实现精准死亡反馈——比如“在火里烤焦”和“自燃成灰”在游戏叙事中具有明确区分。
⚠️ 注意事项与开发建议
- 模组开发中切勿混用:若你的模组添加自定义火焰伤害逻辑,请根据实际触发条件选择对应 DamageSource。误用 ON_FIRE 替代 IN_FIRE 可能导致死亡消息错误,或与防火药水、抗火附魔等机制产生意外交互。
- 服务端同步安全:二者均为 public static final 常量,在多线程环境下安全共享,无需额外同步。
- 扩展性考量:MCP(Mod Coder Pack)或Yarn映射中,此类命名规范(inXxx vs onXxx)是Mojang惯用模式,类似还有 IN_WALL / WALL(挤压伤害)、FALLING_BLOCK / FALLING_ANVIL(下落物细分)等,体现其精细化伤害建模哲学。
简言之,IN_FIRE 是环境致害,ON_FIRE 是状态致害;名称差异不是冗余,而是Minecraft底层伤害系统语义严谨性的直接体现。理解这一点,是读懂原版逻辑、编写健壮模组的基础。
# js
# json
# 本地化
# 区别
# yarn
# Static
# 常量
# int
# 堆
# public
# 线程
# 多线程
# 事件
# 造成伤害
# 这是
# 站在
# 你可以
# 已被
# 均为
# 这两个
# 此类
# 自定义
# 上看
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
javascript基本数据类型及类型检测常用方法小结
怎么用AI帮你为初创公司进行市场定位分析?
Linux系统命令中tree命令详解
如何在IIS中新建站点并配置端口与IP地址?
JS实现鼠标移上去显示图片或微信二维码
*服务器网站为何频现安全漏洞?
简单实现Android文件上传
如何自定义建站之星模板颜色并下载新样式?
深圳网站制作的公司有哪些,dido官方网站?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何用好域名打造高点击率的自主建站?
如何在云指建站中生成FTP站点?
Laravel怎么在Blade中安全地输出原始HTML内容
如何自定义建站之星网站的导航菜单样式?
新三国志曹操传主线渭水交兵攻略
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
iOS发送验证码倒计时应用
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何快速搭建自助建站会员专属系统?
Laravel如何实现本地化和多语言支持?(i18n教程)
免费网站制作appp,免费制作app哪个平台好?
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel如何实现数据库事务?(DB Facade示例)
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
清除minerd进程的简单方法
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何挑选高效建站主机与优质域名?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
微信小程序 input输入框控件详解及实例(多种示例)
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Laravel如何使用Vite进行前端资源打包?(配置示例)
香港网站服务器数量如何影响SEO优化效果?
太平洋网站制作公司,网络用语太平洋是什么意思?
网站制作软件有哪些,制图软件有哪些?
长沙做网站要多少钱,长沙国安网络怎么样?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
潮流网站制作头像软件下载,适合母子的网名有哪些?
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
HTML 中如何正确使用模板变量为元素的 name 属性赋值
制作旅游网站html,怎样注册旅游网站?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
电商网站制作价格怎么算,网上拍卖流程以及规则?
香港服务器租用每月最低只需15元?
Android使用GridView实现日历的简单功能


