跳到正文

Apothic Attributes x Brutality Compat

作者:d0ugdimmadome

兼容Brutality的护甲计算和Apothic Attributes的伤害计算

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

用途

此模组修复了 Brutality 与 Apothic Attributes / AttributesLib 之间的护甲穿透兼容性计算问题。

问题

在某些兼容性处理路径中,Brutality 的致命属性会在计算护甲减伤前,将有效护甲降至零以下。
如果未进行保护就将负护甲代入减伤公式,可能会产生无效结果(0、数值激增或非有限值)。

问题成因

Brutality 按以下公式计算有效护甲:

modifiedArmor = targetArmor * (2 – armorPenetration) – lethality

随后,护甲减伤会使用 Apothic 的伤害缩放常数 a:

if damage < 20: a = 10
if damage >= 20: a = 10 + (damage – 20) / 2

伤害倍率:
a / (a + modifiedArmor)

护甲阶段后的最终伤害:
finalDamageAfterArmor = damage * (a / (a + modifiedArmor))

如果 modifiedArmor 变为较大的负数:

分母可能趋近于 0,导致伤害值极高
分母可能等于 0,导致伤害为 inf / 未定义
分母可能为负数,导致最终伤害为负值(不会治疗目标,但在许多情况下会被限制为 0)

示例

情况 A(负数结果路径)

targetArmor = 1, armorPenetration = 1, lethality = 12, damage = 20

modifiedArmor = 1 * (2 – 1) – 12 = -11

a = 10

final = 20 * (10 / (10 + -11)) = -200

情况 B(除以零路径)

targetArmor = 1, armorPenetration = 1, lethality = 11, damage = 20

modifiedArmor = -10

a = 10

final = 20 * (10 / (10 + -10)) = 20 * (10 / 0)

修复方案

此模组采用两项保护措施:

在进行减伤计算前,将有效护甲下限限制为 0(不向护甲公式输入负护甲)。

通过将致命属性拆分为以下两部分,保留其高额数值带来的收益:

将护甲减至 0

将超出部分的致命属性转化为线性额外伤害:
bonus = unarmoredDamage * (excess * bonusPerExcessLethalityPoint)

默认值:
bonusPerExcessLethalityPoint = 0.10(每超出 1 点增加 10%,可在配置中调整)

超额加成示例

如果无护甲伤害基准值为 5,超额致命属性为 4,配置值为 0.10:

bonus = 5 * (4 * 0.10) = 2

总计 = 5 + 2 = 7

兼容性行为

如果存在 Apothic Attributes,则使用 ALCombatRules#getArmorDamageReduction
否则,回退到原版 CombatRules.getDamageAfterAbsorb

结果

不会出现除以零或伤害无限大的情况
不会将负数处理为零
致命性缩放效果可预测且可配置

适用于使用 Brutality + Apothic/AttributesLib 的整合包。

常见问题

Apothic Attributes x Brutality Compat 支持哪些 Minecraft 版本?

Apothic Attributes x Brutality Compat 支持 Minecraft Java 版 1.20.1,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。

Apothic Attributes x Brutality Compat 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

d0ugdimmadome 的其他作品

查看全部 →