高级护甲伤害上限

高级护甲伤害上限

基于护甲耐久度和经验修补等级,通过传统百分比上限或自定义表达式限制每次命中造成的护甲耐久度损耗。

高级护甲伤害上限

高级护甲伤害上限可防止单次攻击对每件护甲物品造成过高的耐久度损耗。它专为高耐久护甲应保持相对更耐用的整合包设计,而非承受按比例放大的耐久度损失。

功能特性

  • 适用于简单设置的旧版百分比模式。
  • 自定义每件物品的耐久度伤害表达式。
  • 表达式可通过 max_durability 读取护甲物品的最大耐久度。
  • 表达式可通过 unbreaking 读取物品的“耐久”附魔等级。
  • 针对模组护甲的单件物品保护黑名单。
  • 无效表达式会记录在日志中,且不会阻止游戏启动。
  • 已发布的模组 JAR 文件内附 YiRan 表达式库;无需单独安装库文件。

自定义表达式

在 Forge 或 NeoForge 配置中设置 Armor Damage Expression,或在 Fabric 属性文件中设置 armor_damage_expression。表达式的计算结果即为单次攻击对单件护甲物品造成的最大耐久度伤害。实际耐久度伤害还受受到的伤害值限制。

可用变量:

  • max_durability:护甲物品的最大耐久度。
  • unbreaking:护甲物品上的“耐久”附魔等级。

示例:

min(15 - unbreaking, max_durability * 0.05)

此示例将单次攻击限制为 15 - unbreaking 和护甲物品最大耐久度 5% 中的较小值。低于零的值按零处理。

当表达式为空时,使用旧版百分比设置。旧版默认上限为每次攻击造成护甲物品最大耐久度的 20% 伤害。

表达式语法与示例

表达式库支持数字运算(+、-、*、/、%)、括号、比较(<、<=、>、>=、==、!=)以及三元条件运算符(condition ? when_true : when_false)。内置函数有 min、max、abs、sqrt 和 pow。

所有表达式均为数值型。比较结果为真时值为 1,为假时值为 0。当减法可能产生负数时,请使用 max(0, ...)。

按最大耐久度分段:

max_durability < 100 ? 4 : max_durability < 500 ? 10 : max_durability * 0.05

此表达式对最大耐久度低于 100 的护甲返回 4,对 100 至 499 的护甲返回 10,对 500 及以上的护甲返回其最大耐久度的 5%。

按“耐久”附魔等级分段:

unbreaking < 2 ? 12 : unbreaking < 4 ? 8 : 4

此表达式在“耐久”等级 0-1 时返回 12,等级 2-3 时返回 8,等级 4 或更高时返回 4。

结合耐久度等级与“耐久”附魔:

max(0, min(max_durability < 500 ? 10 : max_durability * 0.05, 15 - unbreaking))

对于一件 500 耐久度且附有“耐久 II”的物品,此表达式计算结果为 min(25, 13) = 13。对于一件 80 耐久度且无“耐久”附魔的物品,计算结果为 min(10, 15) = 10。

将表达式写在配置文件中的一行内:

Armor Damage Expression = "max_durability < 100 ? 4 : max_durability < 500 ? 10 : max_durability * 0.05"
armor_damage_expression=max(0, min(15 - unbreaking, max_durability * 0.05))

表达式结果是单次攻击对单件护甲物品的伤害上限。实际受到的伤害可能进一步降低最终值。结果为 0 时跳过耐久度伤害;正结果低于 1 时仍会造成 1 点伤害,因为物品耐久度伤害是整数值。如果表达式无效,错误会被记录,该次攻击将回退至无上限的原始耐久度伤害。

配置

Forge 和 NeoForge 使用 config/AdvancedArmorDamageLimit.toml。

Fabric 使用 config/AdvancedArmorDamageLimit.properties。

物品黑名单接受注册表 ID,例如 modid:item_name。被列入黑名单的护甲将保持原版 Minecraft 的耐久度行为。

支持版本

提供针对以下环境的独立构建版本:

  • Forge 1.19.2
  • Forge 1.20.1
  • NeoForge 1.21.1
  • NeoForge 1.26.1.2
  • Fabric 1.21.1

请安装与你的 Minecraft 版本和模组加载器匹配的 JAR 文件。

许可证

高级护甲伤害上限以 GNU Affero 通用公共许可证 v3.0 仅限(AGPL-3.0-only)发布。该项目包含基于 GNU AGPL v3 的 YiRanExpressionLib。完整的许可信息请参见 LICENSE、NOTICE.md 和 licenses/YiRanExpressionLib-LICENSE.txt。