EntityDamage 事件

实体损坏时抛出 EntityDamage 事件。

EntityDamageEvent

@EventHandler
public void onEntityDamage(EntityDamageEvent e) {
    DamageCause cause = e.getCause();    //Get the event DamageCause
    double rawDamage = e.getDamage();    //Returns the damage before any calculation
    double damageModified = e.getDamage(DamageModifier.X);     //Returns the damage that would be caused with the specified modifier
    double finalDamage = e.getFinalDamage();    //Gets the final damage of this event, with all the calculations included

    e.setCancelled(boolean x);    //If for any reasons you want the event to not happen, you can cancel it
    e.setDamage(double damage);    //You can change the full damage the event will cause
    e.setDamage(DamageModifier modifier, double damage);    //Changes the damage considering any possible modifier
}

大多数情况下,不会使用 EntityDamageEvent。相反,将使用其中一个子类,例如 EntityDamageByEntityEventEntityDamageByBlockEvent 。两者都可以在下面看到。

EntityDamageByEntityEvent

@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
    //Retrieving the Entity that dealt damage
    Entity damageDealer = e.getDamager();

    //Retrieving the Entity that took damage
    Entity damageTaker = e.getEntity();

    //Retrieving the cause of the damage
    DamageCause cause = e.getDamageCause();

    //damage is the double value of the damage before all the resistances and modifiers have been applied
    double damage = e.getDamage();

    //FinalDamage is the double value of the damage after all the resistances and modifiers have been applied
    double finalDamage = e.getFinalDamage();

   //You can also set the raw damage (before modifiers) for the event to a different value
   e.setDamage(20.0);
}

EntityDamageByBlockEvent

EntityDamageEvent 的简单扩展,但有一个不同的方法:

Block b = event.getDamager();    //Returns the block that dealt damage to the entity