模组

方块耐久 v2.0(Block Durability):从枪火破障到重炮攻城

2464 字
12 分钟

当前版本:v2.0.0
支持平台:NeoForge 1.21.1 / Forge 1.20.1
可选联动:TaCZ、Create Big Cannons
代码开源:GitHub v2.0.0
模组下载:Modrinth 发布页
累计下载:5k+

“葡萄美酒夜光杯,你和掩体一起飞。”

在 Minecraft 里,方块面对攻击时通常只有两个结果:瞬间消失,或者毫发无损。

端着枪对墙面倾泻火力,除了粒子效果,墙体可能连一道划痕都没有;RPG 或火炮落下去,爆炸中心以内的普通方块直接消失,仅仅相隔一格的边缘方块却像没被波及;如果对方用黑曜石围了一圈基地,常规爆炸更是很难打开缺口。

方块耐久(Block Durability) 要解决的就是这种割裂感。它给方块加入生命值、裂纹进度和逐渐失效的过程,让“掩体正在被打坏”变成看得见、算得出的结果,而不只是一个全有或全无的开关。

到了 v2.0.0,这个模组不再只服务 TaCZ 的枪械命中。枪弹、范围爆炸和机械动力火炮都被拉进同一套耐久系统,TaCZ 也从必需前置变成了可选联动。

NOTE

如果你是从 v1 回来看这篇文章,最需要更新的是两件事:没装 TaCZ 时模组依然可以处理原版及第三方爆炸;配置里新增了独立的 [explosion] 分组。


方块为什么需要“血量”#

如果把方块看成掩体,那么它至少应该有三个阶段:完整、受损、失效。

原版对大多数攻击只提供最后一个阶段。模组要做的是在中间补上“受损”,让多次命中能够累积。子弹每打中一次就扣一点耐久,爆炸根据距离造成不同程度的伤害,方块则用原版挖矿裂纹展示自己还剩多少余量。

这带来两个直接变化:

  • 一堵墙不是被第一发子弹判定一次,而是会在持续火力下慢慢开裂,直到某个位置率先被打穿。
  • 爆炸边缘不再只负责添粒子。中心区域可能直接崩碎,外围方块会留下浅裂纹,再挨几轮火力后才彻底倒下。

它不会让所有方块都变成可破坏对象。只有进入白名单的方块才会启用这套机制,既控制玩法范围,也避免把整个世界的方块都塞进耐久计算。

v2.0:爆炸也进入耐久系统#

v2.0 的核心改动是接管爆炸后的“余波”。

TaCZ 爆炸物#

TaCZ 的 RPG、榴弹等爆炸物现在会根据自己的爆炸范围,对周围白名单方块追加距离衰减的耐久伤害。

原本只造成实体冲击的爆炸,现在也能留下真实的地形破坏:中心区域直接被炸掉,外围方块出现裂纹,需要后续攻击才能彻底破坏。

RPG 击中地面后炸开,周围方块出现不同阶段裂纹
RPG 爆炸中心直接破坏,外围方块保留不同的受损阶段。

原版与第三方爆炸#

TNT、苦力怕以及其他模组产生的爆炸,仍然保留原本“直接炸毁”的逻辑。已经被原版爆炸选中的方块会正常消失,不会重复扣一次耐久;没有被直接炸掉的范围内方块,则会继续受到余波伤害。

这意味着爆炸不只是向外删掉一圈方块,还会在弹坑边缘继续制造层层裂纹。开启 handleVanillaExplosions 后,这类原版及模组爆炸都会进入同一套余波结算。

掩体开始真的有用#

只有距离衰减还不够,否则爆炸容易隔着墙继续伤到后方方块。

模组会从爆炸中心向目标方块做碰撞射线检测。如果路径上存在其他实心碰撞体,冲击波就会被挡住,后方方块不再继续吃这次余波伤害。厚墙、双层墙和专门铺出来的防爆掩体,也就有了实际战术价值。

连续爆炸在墙面造成深浅不同的裂纹和破坏范围
连续爆炸下,中心、近处和边缘方块会呈现不同的破坏进度。

重炮攻城:机械动力火炮的连续破坏#

机械动力火炮的炮弹爆炸同样可以进入耐久结算。

第一发高爆弹落下时,墙面可能出现一大片密集裂纹;接下来的炮弹继续命中同一区域,中心砖石先被炸掉,外围方块的裂纹进一步加深,最后在连续炮火中打开缺口。

重型爆炸轰击大面积墙体,方块逐层破坏
重型爆炸不再只是瞬间删掉中心方块,还会让周围结构继续受损。

这种手感更适合攻城战和派系服:进攻方需要用持续火力覆盖同一片区域,防守方也能通过加厚墙体、增加层数来拖延被打开的时间。

枪火仍然保留:子弹一寸寸啃开掩体#

爆炸是 v2.0 的主角,但原来的枪击破坏并没有消失。

TaCZ 子弹命中白名单方块后,会按 damagePerHit 扣除耐久,也可以开启 useBulletDamage,改用子弹自身伤害乘以 bulletDamageMultiplier。受击时同步裂纹、碎屑粒子和打击音效,耐久耗尽后再破坏方块。

栅栏命中的修复#

v2.0 当前实现不再依赖 Mixin,而是通过数据包覆盖 tacz:bullet_ignore 标签,把栅栏和栅栏门从忽略列表中移出。铁栏杆和树叶仍然保留在忽略项里。

这样栅栏能正常参与命中与耐久结算,同时尽量少碰 TaCZ 的内部逻辑,整合包里的冲突面也更小。

使用枪械持续射击木石掩体,方块逐渐出现裂纹并被击碎
枪弹连续命中同一面掩体时,裂纹会随着耐久下降逐级加深。

给方块一个可计算的 HP#

模组没有为每种方块手写固定血量。默认情况下,最大 HP 由原版硬度和配置倍率共同决定:

HPmax⁡=max⁡(minHP, H×M)HP_{\max} = \max(\text{minHP},\ H \times M)

其中 H 是方块的原版硬度,M 对应配置里的 hardnessMultiplier。

默认 hardnessMultiplier = 1.5、minBlockHP = 1.0。所以在默认设置下,黑曜石按 50 × 1.5 计算是 75 HP,而不是直接给成 150 HP。

如果你希望黑曜石成为需要重炮持续轰击的顶级建材,可以在白名单里追加 minecraft:obsidian,再把这次测试的倍率调成 3.0。

[whitelist]
blockWhitelist = [
# 保留配置文件里原有的白名单条目
"minecraft:obsidian"
]
[hp_calculation]
minBlockHP = 1.0
hardnessMultiplier = 3.0
blockHPOverrides = []

代入公式后,黑曜石就是:

max⁡(1.0, 50×3.0)=150 HP\max(1.0,\ 50 \times 3.0) = 150\text{ HP}

在这样的设置下,开启默认爆炸参数,大约需要 20~30 发机械动力火炮的高爆弹才能打穿黑曜石。实际数量会受命中位置、爆炸范围、伤害倍率和服务器配置影响,不需要把测试数字当成固定值。

3x3x3 高爆弹在测试场地持续轰击,展示范围破坏效果
3×3×3 高爆弹的范围测试。最终破坏规模取决于爆炸半径、距离和方块 HP。
CAUTION

白名单采用覆盖式配置。追加黑曜石时请保留你原有的 Tag 和方块 ID,不要把默认的玻璃、木板等条目一起删掉。

服主和整合包作者能调什么#

v2.0 的配置重点不是把强度写死,而是让服务器自己决定破坏节奏。

配置项默认值作用
damageMultiplier1.0爆炸造成的耐久伤害倍率
maxRadius16.0单次爆炸最多扫描的半径,限制大型爆炸的额外开销
handleVanillaExplosionstrue是否处理 TNT、苦力怕和其他模组爆炸
healTimeoutSeconds120方块停止受伤后恢复满血的时间

白名单支持三种写法:

  • 方块标签:tag:minecraft:planks、tag:c:glass_blocks
  • 精确 ID:minecraft:obsidian
  • 通配符:minecraft:*glass

使用 Tag 时,遵循同一标签规范的其他模组方块会自动纳入白名单。个别方块还可以在 blockHPOverrides 中用 "modid:block_id=hp" 单独覆盖血量。

管理员可以在游戏内动态调整恢复时间:

/gamerule blockDurabilityHealSeconds 60

设为 0 就会关闭自愈,让受损裂纹长期留在世界里。配置支持热重载,白名单和 HP 缓存会在重载后更新。

从 v1 升级时#

  • TaCZ 现在是可选依赖。没有安装 TaCZ 时,模组仍能处理原版和其他模组的爆炸耐久。
  • master 主分支面向 NeoForge 1.21.1,forge-1.20.1 分支继续维护 Forge 1.20.1。
  • 主分支要求 NeoForge 21.1.80+,Forge 分支对应 47.3.0+。
  • 大型整合包升级前建议备份世界和现有配置文件。旧配置会自动补齐新增项,但每个整合包的爆炸倍率和白名单仍然值得重新检查。

版本、下载与源码#

Minecraft加载器文件
1.21.1NeoForgeblockdurability-2.0.0-neoforge.jar
1.20.1Forgeblockdurability-1.20.1-2.0.0-forge.jar

项目采用 MIT 协议开源,源码和完整配置说明都在 GitHub。

如果你正在做现代战争、末日生存或阵营对抗整合包,欢迎带着配置和实机反馈来 GitHub 提 Issue。掩体怎样从完整到坍塌,应该由玩法和服务器节奏决定,而不是被一个“炸得掉 / 炸不掉”的开关锁死。

方块耐久 v2.0(Block Durability):从枪火破障到重炮攻城
https://www.zhuimeng.fun/posts/block-durability/
作者
坠梦
发布于
2026-10-07
许可协议
CC BY-NC-SA 4.0