伤害类型:哪19种无视护甲,以及为什么盾牌的防御力更弱
26.2 版本共有51种伤害类型。其中19种无视护甲,30种无视盾牌,而它们的重叠情况并非人们所想——所有能穿透护甲的类型也都能穿透盾牌。
伤害类型不仅仅是死亡信息。它还带有决定护甲是否有效、举起的盾牌是否有效以及抗性提升(Resistance)是否有效的标志——数据包通过 #minecraft:bypasses_armor 等命令读取这些相同的标志。以下所有数字均来自 Mojang 发布的 26.2 版本 damage_type 文件,也是本页面浏览器所渲染的内容。
统计数据
51种伤害类型。 其中,19种无视护甲,30种无视举起的盾牌。
第二个数字令人惊讶。盾牌看起来是更强的防御,因为它能直接格挡攻击,但它被绕过的频率更高——30种类型对护甲的19种。
重叠是单向的
这是值得深入理解的部分,它是一个严格的结构性规则,而非一种趋势:
所有能穿透护甲的伤害类型也都能穿透盾牌。无一例外。
直接统计:集合“穿透护甲但不穿透盾牌”是空的。因此,19种穿透护甲的类型是30种穿透盾牌的类型的严格子集,有11种类型处于这个空隙中——它们能穿透盾牌,但护甲仍然能减少它们的伤害:
cactus, campfire, dry_out, falling_anvil, falling_stalactite, hot_floor, in_fire, lava, lightning_bolt, sulfur_cube_hot, sweet_berry_bush
阅读这份列表,一旦理解其逻辑便会觉得显而易见:它们是环境或来自上方的伤害源。你无法用盾牌格挡你所站立的地面,也无法格挡落在你头上的铁砧(Anvil),但板甲仍然能吸收一部分伤害。
实际版本:如果一次攻击穿透了你的护甲,那么盾牌也永远帮不上忙。 摔落伤害(Fall damage)、溺水(drowning)、冰冻(freezing)、饥饿(starvation)、/kill ——护甲和盾牌都无关紧要。此时应选择摔落缓冲(Feather Falling)、水下呼吸(Respiration)或冰霜行者(Frost Walker),因为这些附魔是伤害标志不会跳过的。
只有一种类型无视所有防御
starve 是唯一一种同时无视护甲、盾牌和状态效果的伤害类型——因此抗性提升(Resistance)也无法抵御它。游戏中除了食物,没有任何东西能保护你免受空饥饿(Hunger)条的伤害。
饥饿值消耗是二元的
受到伤害会让你更饥饿,而且消耗量并非你所期望的那样分级。在所有51种类型中,26.2 版本中恰好只有两种饥饿值消耗值:0 和 0.1。51种中有32种会消耗0.1点;其余的则不消耗。
所以并没有“大伤害让你更饥饿”的规则。一点摔落伤害和苦力怕(Creeper)的正面爆炸消耗的饥饿值相同,而19种类型根本不消耗饥饿值。
伤害倍增只有两种设置,而非曲线
scaling 决定难度是否会使伤害倍增,它只取两个值之一:when_caused_by_living_non_player 或 always。没有针对每种类型的难度曲线可以调整——数据包要么选择一种类型进行难度倍增,要么不选择。
这对命令的重要性
/damage <target> <amount> <type> 可以接受51种伤害类型中的任何一种,而选择错误的类型会悄无声息地改变结果:
/damage @p 10 minecraft:fall # armour ignored, shield ignored
/damage @p 10 minecraft:lava # shield ignored, armour still reduces it
/damage @p 10 minecraft:starve # armour, shield and Resistance all ignored
三个命令,相同的10点伤害,对同一个标靶(Target)产生三种不同的结果。如果一张地图是针对穿着全套下界合金装备的玩家进行“平衡”的,那么你选择的伤害类型就决定了这套护甲是否参与了平衡。