Class AttackAndDefenseHandler
-
- All Implemented Interfaces:
-
cn.org.bukkit.craneattribute.api.attribute.handler.AttributeHandler,cn.org.bukkit.craneattribute.api.attribute.handler.AttributeTracker,cn.org.bukkit.craneattribute.api.attribute.handler.Cancellable,cn.org.bukkit.craneattribute.api.attribute.handler.DamageTracker,cn.org.bukkit.craneattribute.api.attribute.handler.MessageTracker,cn.org.bukkit.craneattribute.api.attribute.handler.MetadataTracker,cn.org.bukkit.craneattribute.api.attribute.handler.ProjectileTracker
public class AttackAndDefenseHandler implements AttributeHandler, DamageTracker, AttributeTracker, MessageTracker, MetadataTracker, ProjectileTracker, Cancellable
-
-
Field Summary
Fields Modifier and Type Field Description private final LivingEntityattackerprivate final LivingEntityentityprivate final Map<String, DoubleArray>projectileAttributeValuesprivate final DoublebowForceprivate <Error class: unknown class>damageIntensityprivate final AttributeTypetypeprivate BooleanisCancelledprivate final Map<UUID, Map<String, Double>>damageDataprivate final Map<UUID, AttributeData>dataMapprivate final Map<UUID, Map<String, DoubleArray>>tempAttributeprivate final Map<UUID, Set<String>>triggerAttributeprivate final Map<UUID, List<String>>messageDataprivate final Map<UUID, Map<String, Object>>metadataprivate final AttributeDataattackerDataprivate final AttributeDataentityDataprivate final EntityDamageByEntityEventeventprivate final BooleanisProjectileprivate final Projectileprojectile
-
Constructor Summary
Constructors Constructor Description AttackAndDefenseHandler(AttributeData attackerData, AttributeData entityData, EntityDamageByEntityEvent event, Boolean isProjectile, Projectile projectile)
-
Method Summary
Modifier and Type Method Description final LivingEntitygetAttacker()final LivingEntitygetEntity()Map<String, DoubleArray>getProjectileAttributeValues()抛射物携带的属性加成值映射表。键:属性名称 值:该属性的数值范围 min, max,用于后续随机取值或叠加计算。此数据通常在抛射物发射时由弓、弩或技能注入。 DoublegetBowForce()弓类武器的蓄力强度(仅适用于弓/弩发射的抛射物)。 范围通常为 0.0(未蓄力)到 100.0(完全蓄力);
可用于动态调整伤害、速度或特效强度;
若非弓类抛射物(如投掷雪球),则为 null。
final <Error class: unknown class>getDamageIntensity()final Unit)>setDamageIntensity(<Error class: unknown class> damageIntensity)AttributeTypegetType()此处理器关联的属性类型。 BooleanisCancelled()标识当前操作是否已被取消。 当值为
true时,通常表示应跳过该操作的执行(如阻止伤害、技能释放、属性应用等);当值为
false(默认)时,表示操作正常进行。
UnitsetCancelled(Boolean isCancelled)标识当前操作是否已被取消。 当值为
true时,通常表示应跳过该操作的执行(如阻止伤害、技能释放、属性应用等);当值为
false(默认)时,表示操作正常进行。
Map<UUID, Map<String, Double>>getDamageData()伤害数据存储结构。外层键:实体的唯一标识符(UUID) 内层键:伤害来源标识(如 "FIRE", "PLAYER", "GENERIC" 等自定义字符串) 值:该来源对该实体造成的累计伤害值(Double,最小为 0. Map<UUID, AttributeData>getDataMap()存储所有实体的完整属性数据映射表。 键:实体的唯一标识符(UUID) 值:该实体对应的 AttributeData 对象,包含基础值、百分比加成等结构化属性数据。 Map<UUID, Map<String, DoubleArray>>getTempAttribute()存储每个实体的临时属性值。 外层键:实体 UUID 内层键:属性名称 值:一个 DoubleArray,表示该临时属性的最小值和最大值(用于随机范围计算)。 Map<UUID, Set<String>>getTriggerAttribute()记录每个实体当前被“触发”的属性名称集合。 用于标记某些属性是否处于激活状态。 键:实体 UUID 值:被触发的属性名称集合(String 集合)。 Map<UUID, List<String>>getMessageData()消息存储结构。键:实体的唯一标识符(UUID) 值:该实体关联的消息列表(按添加顺序存储)注意:若某 UUID 未初始化列表,则对应值为 null,相关操作需做空安全处理。 Map<UUID, Map<String, Object>>getMetadata()元数据存储结构。外层键:实体的唯一标识符(UUID) 内层键:元数据的字符串键名(如 "last_attack_time", "immune_to_fire") 值:任意类型的对象(Any),可存储数字、字符串、布尔值、自定义对象等 final AttributeDatagetAttackerData()final AttributeDatagetEntityData()final EntityDamageByEntityEventgetEvent()BooleanisProjectile()标识当前上下文是否由抛射物触发。例如:玩家被箭击中时,此值应为 true;直接近战攻击则为 false。 ProjectilegetProjectile()当前关联的抛射物实体(如果存在)。若 isProjectile 为 true,则此字段通常指向实际的 Projectile 对象(如 Arrow、Egg 等); 否则为 null。 final DoubleArrayresolveAttributeValue(LivingEntity livingEntity, String name)根据当前上下文解析属性数值范围。若当前为抛射物上下文且 livingEntity 正是该抛射物, 则返回抛射物携带的属性值;否则返回实体自身的属性值。 final DoubleresolveRandomValue(LivingEntity livingEntity, String name)在解析后的属性范围内生成一个随机值。行为与 resolveAttributeValue 一致,确保随机值来源与属性定义一致。 Booleanhandle()执行属性处理逻辑。子类应在此方法中: 获取目标实体(或实体对);
调用 filterAttributes 筛选有效组件;
遍历组件并调用其对应钩子方法。
-
Methods inherited from class cn.org.bukkit.craneattribute.api.attribute.handler.AttributeHandler
filterAttributes, filterAttributes -
Methods inherited from class cn.org.bukkit.craneattribute.api.attribute.handler.DamageTracker
addDamage, addDamage, addDamage, addDamage, getDamage, getDamage, getDamage, getDamage, getDamageData, getDamageData, multiplyDamage, multiplyDamage, multiplyDamageData, setDamage, setDamage, setDamage, setDamage, takeDamage, takeDamage, takeDamage, takeDamage -
Methods inherited from class cn.org.bukkit.craneattribute.api.attribute.handler.AttributeTracker
addTempAttributeValue, addTempAttributeValue, addTempAttributeValue, addTempAttributeValue, getAttrData, getAttrData, getAttributeValue, getAttributeValue, getBasicRandomValue, getBasicRandomValue, getBasicValue, getBasicValue, getPercentRandomValue, getPercentRandomValue, getPercentValue, getPercentValue, getRandomValue, getRandomValue, getTempAttributeValue, getTempAttributeValue, getTempRandomValue, getTempRandomValue, isTrigger, isTrigger, isTrigger, isTrigger, setTempAttributeValue, setTempAttributeValue, setTempAttributeValue, setTempAttributeValue, takeTempAttributeValue, takeTempAttributeValue, takeTempAttributeValue, takeTempAttributeValue, trigger, trigger, trigger, trigger, trigger, trigger -
Methods inherited from class cn.org.bukkit.craneattribute.api.attribute.handler.MessageTracker
addMessage, addMessage, sendMessage -
Methods inherited from class cn.org.bukkit.craneattribute.api.attribute.handler.MetadataTracker
getMeta, getMeta, hasMeta, hasMeta, removeMeta, removeMeta, setMeta, setMeta -
Methods inherited from class cn.org.bukkit.craneattribute.api.attribute.handler.ProjectileTracker
getProj, getProjAttributeValue, getProjRandomValue, getProjectileAttributeValue, getProjectileRandomValue, isArrowProj, isProj -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
Constructor Detail
-
AttackAndDefenseHandler
AttackAndDefenseHandler(AttributeData attackerData, AttributeData entityData, EntityDamageByEntityEvent event, Boolean isProjectile, Projectile projectile)
-
-
Method Detail
-
getAttacker
final LivingEntity getAttacker()
-
getEntity
final LivingEntity getEntity()
-
getProjectileAttributeValues
Map<String, DoubleArray> getProjectileAttributeValues()
抛射物携带的属性加成值映射表。
键:属性名称 值:该属性的数值范围 min, max,用于后续随机取值或叠加计算。
此数据通常在抛射物发射时由弓、弩或技能注入。
-
getBowForce
Double getBowForce()
弓类武器的蓄力强度(仅适用于弓/弩发射的抛射物)。
范围通常为 0.0(未蓄力)到 100.0(完全蓄力);
可用于动态调整伤害、速度或特效强度;
若非弓类抛射物(如投掷雪球),则为 null。
-
getDamageIntensity
final <Error class: unknown class> getDamageIntensity()
-
setDamageIntensity
final Unit )>setDamageIntensity(<Error class: unknown class> damageIntensity)
-
getType
AttributeType getType()
此处理器关联的属性类型。
-
isCancelled
Boolean isCancelled()
标识当前操作是否已被取消。
当值为
true时,通常表示应跳过该操作的执行(如阻止伤害、技能释放、属性应用等);当值为
false(默认)时,表示操作正常进行。
此字段可读可写,允许监听器或处理器动态决定是否中断流程。
-
setCancelled
Unit setCancelled(Boolean isCancelled)
标识当前操作是否已被取消。
当值为
true时,通常表示应跳过该操作的执行(如阻止伤害、技能释放、属性应用等);当值为
false(默认)时,表示操作正常进行。
此字段可读可写,允许监听器或处理器动态决定是否中断流程。
-
getDamageData
Map<UUID, Map<String, Double>> getDamageData()
伤害数据存储结构。
外层键:实体的唯一标识符(UUID) 内层键:伤害来源标识(如 "FIRE", "PLAYER", "GENERIC" 等自定义字符串) 值:该来源对该实体造成的累计伤害值(Double,最小为 0.0,不会为负数)
-
getDataMap
Map<UUID, AttributeData> getDataMap()
存储所有实体的完整属性数据映射表。 键:实体的唯一标识符(UUID) 值:该实体对应的 AttributeData 对象,包含基础值、百分比加成等结构化属性数据。
-
getTempAttribute
Map<UUID, Map<String, DoubleArray>> getTempAttribute()
存储每个实体的临时属性值。 外层键:实体 UUID 内层键:属性名称 值:一个 DoubleArray,表示该临时属性的最小值和最大值(用于随机范围计算)。
-
getTriggerAttribute
Map<UUID, Set<String>> getTriggerAttribute()
记录每个实体当前被“触发”的属性名称集合。 用于标记某些属性是否处于激活状态。 键:实体 UUID 值:被触发的属性名称集合(String 集合)。
-
getMessageData
Map<UUID, List<String>> getMessageData()
消息存储结构。
键:实体的唯一标识符(UUID) 值:该实体关联的消息列表(按添加顺序存储)
注意:若某 UUID 未初始化列表,则对应值为 null,相关操作需做空安全处理。
-
getMetadata
Map<UUID, Map<String, Object>> getMetadata()
元数据存储结构。
外层键:实体的唯一标识符(UUID) 内层键:元数据的字符串键名(如 "last_attack_time", "immune_to_fire") 值:任意类型的对象(Any),可存储数字、字符串、布尔值、自定义对象等
-
getAttackerData
final AttributeData getAttackerData()
-
getEntityData
final AttributeData getEntityData()
-
getEvent
final EntityDamageByEntityEvent getEvent()
-
isProjectile
Boolean isProjectile()
标识当前上下文是否由抛射物触发。
例如:玩家被箭击中时,此值应为 true;直接近战攻击则为 false。
-
getProjectile
Projectile getProjectile()
当前关联的抛射物实体(如果存在)。
若 isProjectile 为 true,则此字段通常指向实际的 Projectile 对象(如 Arrow、Egg 等); 否则为 null。
-
resolveAttributeValue
final DoubleArray resolveAttributeValue(LivingEntity livingEntity, String name)
根据当前上下文解析属性数值范围。
若当前为抛射物上下文且 livingEntity 正是该抛射物, 则返回抛射物携带的属性值;否则返回实体自身的属性值。
- Parameters:
livingEntity- 目标实体name- 属性名称- Returns:
解析后的属性数值范围 min, max
-
resolveRandomValue
final Double resolveRandomValue(LivingEntity livingEntity, String name)
在解析后的属性范围内生成一个随机值。
行为与 resolveAttributeValue 一致,确保随机值来源与属性定义一致。
- Parameters:
livingEntity- 目标实体name- 属性名称- Returns:
解析后范围内的随机属性值
-
-
-