Added support for projectile damage events (by Dispenser for example).

This commit is contained in:
t3hk0d3 2011-08-02 02:29:21 +04:00
parent 31a1cec963
commit 1a056e7fc6
2 changed files with 29 additions and 13 deletions

View File

@ -101,6 +101,8 @@ public abstract class ModifyworldListener implements Listener {
entityName = "monster." + entityName;
} else if (Animals.class.isAssignableFrom(entity.getClass())) {
entityName = "animal." + entityName;
} else if (Projectile.class.isAssignableFrom(entity.getClass())) {
entityName = "projectile." + entityName;
}
return entityName;

View File

@ -64,37 +64,51 @@ public class EntityListener extends ModifyworldListener {
if (event instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent edbe = (EntityDamageByEntityEvent) event;
Player player;
if (edbe.getDamager() instanceof Player) { // Prevent from damaging by player
Player player = (Player) edbe.getDamager();
player = (Player) edbe.getDamager();
if (!canMessWithEntity(player, "modifyworld.damage.deal.", event.getEntity())) {
informPlayerAboutDenial(player);
event.setCancelled(true);
event.setDamage(0);
cancelDamageEvent(player, event);
return;
}
}
if (!event.isCancelled() && edbe.getEntity() instanceof Player && edbe.getDamager() != null) { // Prevent from taking damage by player
Player player = (Player) edbe.getEntity();
player = (Player) edbe.getEntity();
if (edbe.getEntity() instanceof Player && edbe.getDamager() != null) { // Prevent from taking damage by player
if (!canMessWithEntity(player, "modifyworld.damage.take.", edbe.getDamager())) {
informPlayerAboutDenial(player);
event.setCancelled(true);
event.setDamage(0);
cancelDamageEvent(player, event);
return;
}
}
if (edbe instanceof EntityDamageByProjectileEvent && edbe.getDamager() == null){
EntityDamageByProjectileEvent edpe = (EntityDamageByProjectileEvent)edbe;
if (!canMessWithEntity(player, "modifyworld.damage.take.", edpe.getProjectile())) {
cancelDamageEvent(player, event);
return;
}
}
} else if (event.getEntity() instanceof Player) { // player are been damaged by enviroment
Player player = (Player) event.getEntity();
String cause = event.getCause().name().toLowerCase().replace("_", "");
if (!permissionsManager.has(player, "modifyworld.damage.take." + cause)) {
event.setCancelled(true);
informPlayerAboutDenial(player);
event.setDamage(0);
cancelDamageEvent(player, event);
return;
}
}
}
protected void cancelDamageEvent(Player player, EntityDamageEvent event) {
informPlayerAboutDenial(player);
event.setCancelled(true);
event.setDamage(0);
}
@EventHandler(Type.ENTITY_TAME)
public void onEntityTame(EntityTameEvent event) {
if (!(event.getOwner() instanceof Player)) {