伤害分源机制
Damagehandler 用于按 实体 和 伤害来源 两个维度记录并管理累计伤害。核心思路是 伤害分源:不仅知道“总共受了多少伤害”,还能精确区分这些伤害分别来自哪里。
伤害来源定义
伤害来源通过自定义 String 标签区分,由开发者在项目中统一约定。
预置来源:
GENERIC— 通用伤害,未明确来源时的默认类型。调用不含source参数的方法时,内部自动操作此来源。
接口方法
所有方法均围绕 (UUID, Source, Value) 三元组操作,同时提供面向 LivingEntity 的便捷方法。
累加伤害 — addDamage
Groovy
// 为实体记录 50 点火焰伤害
handler.addDamage(uuid, "FIRE", 50.0)
// 不指定来源则默认使用 GENERIC
handler.addDamage(uuid, 10.0)扣除伤害 — takeDamage
Groovy
// 吸收 20 点火焰伤害
handler.takeDamage(uuid, "FIRE", 20.0)
// 从通用伤害中扣除
handler.takeDamage(uuid, 5.0)设置伤害 — setDamage
Groovy
// 将火焰伤害设为 100
handler.setDamage(uuid, "FIRE", 100.0)
// 设置通用伤害
handler.setDamage(uuid, 200.0)查询伤害 — getDamage
Groovy
// 查询指定来源的伤害值
double fireDamage = handler.getDamage(uuid, "FIRE")
// 查询该实体的总伤害(所有来源求和)
double total = handler.getDamage(uuid)倍率伤害 — multiplyDamage
Groovy
// 将火焰伤害翻倍
handler.multiplyDamage(uuid, "FIRE", 2.0)
// 将通用伤害翻倍
handler.multiplyDamage(uuid, 2.0)
// 将实体所有伤害翻倍
handler.multiplyDamageData(uuid, 2.0)