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
                        
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
    • Enum Constant Summary

      Enum Constants 
      Enum Constant Description
    • Method Summary

      Modifier and Type Method Description
      final LivingEntity getAttacker()
      final LivingEntity getEntity()
      Map<String, DoubleArray> getProjectileAttributeValues() 抛射物携带的属性加成值映射表。键:属性名称 值:该属性的数值范围 min, max,用于后续随机取值或叠加计算。此数据通常在抛射物发射时由弓、弩或技能注入。
      Double getBowForce() 弓类武器的蓄力强度(仅适用于弓/弩发射的抛射物)。
      • 范围通常为 0.0(未蓄力)到 100.0(完全蓄力);

      • 可用于动态调整伤害、速度或特效强度;

      • 若非弓类抛射物(如投掷雪球),则为 null。

      final <Error class: unknown class> getDamageIntensity()
      final Unit )>setDamageIntensity(<Error class: unknown class> damageIntensity)
      AttributeType getType() 此处理器关联的属性类型。
      Boolean isCancelled() 标识当前操作是否已被取消。
      • 当值为 true 时,通常表示应跳过该操作的执行(如阻止伤害、技能释放、属性应用等);

      • 当值为 false(默认)时,表示操作正常进行。

      此字段可读可写,允许监听器或处理器动态决定是否中断流程。
      Unit setCancelled(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 AttributeData getAttackerData()
      final AttributeData getEntityData()
      final EntityDamageByEntityEvent getEvent()
      Boolean isProjectile() 标识当前上下文是否由抛射物触发。例如:玩家被箭击中时,此值应为 true;直接近战攻击则为 false。
      Projectile getProjectile() 当前关联的抛射物实体(如果存在)。若 isProjectile 为 true,则此字段通常指向实际的 Projectile 对象(如 Arrow、Egg 等); 否则为 null。
      final DoubleArray resolveAttributeValue(LivingEntity livingEntity, String name) 根据当前上下文解析属性数值范围。若当前为抛射物上下文且 livingEntity 正是该抛射物, 则返回抛射物携带的属性值;否则返回实体自身的属性值。
      final Double resolveRandomValue(LivingEntity livingEntity, String name) 在解析后的属性范围内生成一个随机值。行为与 resolveAttributeValue 一致,确保随机值来源与属性定义一致。
      Boolean handle() 执行属性处理逻辑。子类应在此方法中:
      • 获取目标实体(或实体对);

      • 调用 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

      • getProjectileAttributeValues

         Map<String, DoubleArray> getProjectileAttributeValues()

        抛射物携带的属性加成值映射表。

        键:属性名称 值:该属性的数值范围 min, max,用于后续随机取值或叠加计算。

        此数据通常在抛射物发射时由弓、弩或技能注入。

      • getBowForce

         Double getBowForce()

        弓类武器的蓄力强度(仅适用于弓/弩发射的抛射物)。

        • 范围通常为 0.0(未蓄力)到 100.0(完全蓄力);

        • 可用于动态调整伤害、速度或特效强度;

        • 若非弓类抛射物(如投掷雪球),则为 null。

      • 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),可存储数字、字符串、布尔值、自定义对象等

      • 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:

        解析后范围内的随机属性值

      • handle

         Boolean handle()

        执行属性处理逻辑。

        子类应在此方法中:

        • 获取目标实体(或实体对);

        • 调用 filterAttributes 筛选有效组件;

        • 遍历组件并调用其对应钩子方法。

        Returns:

        是否未取消