防护非点数

防护非点数

将护甲和韧性修改为可自定义的伤害抗性和减伤方式。

保护而非点数

保护而非点数赋予 Minecraft 原版防御属性直接、可读的含义:

  • 护甲值 变为递减百分比减伤:护甲值 / (护甲值 + K)
  • 护甲韧性 变为固定伤害减免:韧性 × 每点固定减免
  • 韧性优先计算,护甲其次,最后应用可配置的最小伤害下限。

该模组继续使用实体的有效 minecraft:generic.armorminecraft:generic.armor_toughness 值,包括装备、效果、命令、饰品以及其他属性修饰符。

它还将转换后的值作为属性暴露给角色界面和集成系统:

  • protectionnotpoints:damage_resistance — 护甲减伤,表示为 0.0–1.0 的小数。
  • protectionnotpoints:damage_reduction — 韧性的固定减伤,单位为伤害点数。

提供原版护甲或护甲韧性的物品也会通过这些属性暴露其转换后的贡献。它们注册的基础值保持为零。

转换后的属性不会显示在原版物品提示中。

显示属性描述的是装备贡献。实际战斗计算使用实体有效的原版护甲和护甲韧性值,因此非物品修饰符仍会影响减伤效果。

伤害流程

保护而非点数替换了原版护甲吸收机制,同时保留其周围的伤害处理流程不变。

顺序为:

  1. 护甲耐久度及更早的伤害处理。
  2. 韧性固定减免。
  3. 护甲百分比减伤。
  4. 配置的最小伤害下限。
  5. 抗性提升、保护附魔、吸收效果以及生命值损失。

盾牌格挡和其他发生在护甲之前的伤害处理保持不变。

带有 minecraft:bypasses_armor 标签的伤害默认会跳过护甲和韧性。

设置:

toughnessRespectsArmorBypass = false

可允许韧性减少无视护甲的伤害,而不会使护甲对其生效。

来自武器附魔的原版护甲效果修饰符会被保留。

配置

游戏玩法设置存储在:

config/protectionnotpoints-server.toml

服务器设置会同步到客户端,使客户端计算和 API 使用者遵循相同的规则。

[armor]
scalingConstant = 30.0
maximumReduction = 0.95

[toughness] flatReductionPerPoint = 0.25

[damage] minimumDamageFraction = 0.0 toughnessRespectsArmorBypass = true applyToMobs = true

护甲

scalingConstant 控制递减曲线:

护甲值 / (护甲值 + scalingConstant)

值越低,每点护甲的减伤效果越强。

maximumReduction 限制护甲能减免的所受伤害百分比上限。

韧性

flatReductionPerPoint 控制每点护甲韧性减少的固定伤害量:

韧性 × flatReductionPerPoint

伤害

minimumDamageFraction 设置在韧性和护甲计算后,原始所受伤害必须剩余的最小比例。

toughnessRespectsArmorBypass 控制 minecraft:bypasses_armor 是否同时也绕过韧性。

applyToMobs 控制替换后的护甲规则是否适用于非玩家的生物实体。

该模组不会替换 HUD 或添加额外的物品提示文本。

平衡命令

/armormath debug

显示实体的有效防御属性以及当前生效的保护而非点数规则。

/armormath testdamage <amount>

预览符合条件的普通攻击在韧性、护甲、最小伤害下限以及最终伤害阶段的处理结果。