Skip to content

Damage Event API

EmakiAttributeDamageEvent is a Bukkit event fired after EmakiAttribute finishes calculating attribute damage and before the damage is applied. External plugins can listen to it to cancel, modify, or record damage.

Event behavior

  • It is cancellable. If cancelled, no damage is applied.
  • The final damage can be changed with setFinalDamage.
  • Projectile damage also fires this event; use getProjectile() to check the projectile entity.

Main methods

MethodReturnDescription
getAttacker()LivingEntityAttacker, may be null for environmental damage.
getTarget()LivingEntityTarget entity.
getProjectile()EntityProjectile entity, may be null.
getDamageTypeId()StringDamage type id, such as physical or spell.
getBaseDamage()doubleBase damage before full calculation.
isCritical()booleanWhether the hit is critical.
getRoll()doubleCritical roll value.
getFinalDamage()doubleFinal calculated damage.
setFinalDamage(double)voidReplace final damage.
getCause()DamageCauseBukkit damage cause.
getDamageContext()DamageContextFull damage context.
getDamageResult()DamageResultFull calculation result including stage values.
getVariables()DamageContextVariablesContext control flags.
getContext()Map<String, Object>Context data map.
isCancelled()booleanWhether the event is cancelled.
setCancelled(boolean)voidCancel or restore the event.

Example

java
@EventHandler
public void onAttributeDamage(EmakiAttributeDamageEvent event) {
    event.setFinalDamage(event.getFinalDamage() * 0.9);

    if (event.isCritical()) {
        event.setCancelled(true);
    }

    Map<String, Double> stages = event.getDamageResult().stageValues();
    double defenseReduction = stages.getOrDefault("target_defense", 0.0);
}

Notes

  • The event is fired on the main thread.
  • setFinalDamage directly changes the value that will be applied.
  • If cancelled, the target receives no damage and no hit feedback from this event path.