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。相反,将使用其中一个子类,例如 EntityDamageByEntityEvent 或 EntityDamageByBlockEvent 。两者都可以在下面看到。
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