Progressive Mechanics Library

Progressive Mechanics Library

旨在为模组创作者提供深度伤害机制控制的库模组。

这是一个库模组,旨在让我的模组和其他模组能够对伤害和一些战斗机制拥有强大的控制能力。
默认情况下,此模组会做以下事情:
修改造成暴击时所产生的伤害类型,使模组能轻松追踪攻击是否为暴击。伤害类型为“pml:player_critical”。
修改造成横扫攻击时所产生的伤害类型。伤害类型为“pml:sweeping_damage”。

对于模组开发者:
它提供了一种新方式来注册和添加伤害加成与伤害减免,并且可与 First Aid 模组协同工作,从而对受伤的身体部位进行控制。

DamageControl 类是一个核心组件。它提供了一种结构化的方式,用于在游戏中应用伤害之前修改、控制并计算伤害值。

该系统支持多种修改器,包括固定加成、基于百分比的加成,以及来自护甲、附魔和特殊机制的减免。


🔧 工作原理:

  • 系统从原始基础伤害开始。

  • 应用武器特定缩放(在进行进一步计算前减少伤害)。

  • 首先应用基础加成(固定和基于百分比的)。

  • 接下来应用额外加成(固定和基于百分比的)。

  • 系统计算减免(护甲、附魔、特殊减免)。

  • 最终伤害会被存储,并可在 LivingDamageEvent 中检索或修改。


📊 变量详解:

🛠️ 增加伤害的修改器

变量 描述
baseFlatBonus 在百分比倍率之前添加的固定加成(例如,+10 伤害)。
basePercentBonus 在其他计算之前应用的基于百分比的加成(例如,1.2 倍乘数)。
flatBonus 在基础加成之后添加的固定加成(例如,+5 伤害)。
percentBonus 在基础计算之后应用的基于百分比的加成。

🛡️ 减少伤害的修改器

变量 描述
weapondamagecontrol 在所有计算之前控制基于武器的缩放。
armorReduction 由护甲减少的伤害(单独处理)。
enchReduction 由附魔减少的伤害(单独处理)。
specialReduction 直接减少最终伤害,因此必须谨慎使用。

📌 参考原始值

变量 描述
originalDamage 存储所有计算后的最终伤害,可用于LivingDamageEvent。
originalAbsorption 存储修改前的吸收值。

🛠️ 关键方法

  • 🛡️ getArmorReduction()
    ✅ 返回:护甲造成的伤害减免数值。
    💡 用途:此值由 setArmorReduction(float value) 设置,表示基于护甲机制(例如,原版护甲计算或其他模组的自定义护甲效果)所阻挡的伤害量。
  • 🔮 getEnchantmentReduction()
    ✅ 返回:附魔造成的伤害减免数值。
    💡 用途:用于追踪防御性附魔(例如,保护或自定义附魔)减少了多少最终伤害。模组可以使用此数值来平衡附魔效果或在工具提示中显示它们。
  • ⚠️ getSpecialReduction()
    ✅ 返回:通过特殊机制应用的直接伤害减免数值。
    💡 用途:这是最强力的伤害减免形式,因为它会在伤害计算的最末端被减去。模组应谨慎使用,因为此值过高会完全抵消伤害。

📌 First Aid 模组兼容系统

该系统集成了 First Aid 模组,该模组通过引入特定身体部位的伤害来改变伤害的处理方式。以下代码有助于在使用 First Aid 模组时跟踪哪个身体部位受到了伤害,并确保与 DamageControl 系统的兼容性。

添加了一个新事件:FirstAidHurtEvent,其工作方式类似于 LivingHurtEvent,但会跟踪装备槽位。

允许访问伤害修改和方法

getDamagedSlot() — 当添加 First Aid 时,在计算护甲和附魔之前,返回受损的装备槽位。

🛠️ 关键方法

🔍 getDamagedBodyPart(Player player)

✅ 目的:检索受损的身体部位。返回一个对应于受损身体部位的 EquipmentSlot 变量。
💡 用途:

  • 此方法只能在 LivingDamageEvent 期间且存在 First Aid 时使用。

此模组还修复了 SpartanWeaponry 与许多模组(包括本模组)存在冲突行为的问题。
使用示例之一是在 Forgotten Nunchakus 模组内部。