Fix missing mob target block

This commit is contained in:
KHobbits 2012-11-04 16:45:02 +00:00
parent 7369155166
commit 6f1a70dc8b

View file

@ -38,33 +38,27 @@ public class EssentialsProtectEntityListener implements Listener
} }
final User user = ess.getUser(target); final User user = ess.getUser(target);
final DamageCause cause = event.getCause();
if (event instanceof EntityDamageByBlockEvent) if (event instanceof EntityDamageByBlockEvent)
{ {
final DamageCause cause = event.getCause();
if (prot.getSettingBool(ProtectConfig.disable_contactdmg) if (prot.getSettingBool(ProtectConfig.disable_contactdmg)
&& cause == DamageCause.CONTACT && cause == DamageCause.CONTACT
&& !(target instanceof Player && !(target instanceof Player && shouldBeDamaged(user, "contact")))
&& user.isAuthorized("essentials.protect.damage.contact")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (prot.getSettingBool(ProtectConfig.disable_lavadmg) if (prot.getSettingBool(ProtectConfig.disable_lavadmg)
&& cause == DamageCause.LAVA && cause == DamageCause.LAVA
&& !(target instanceof Player && !(target instanceof Player && shouldBeDamaged(user, "lava")))
&& user.isAuthorized("essentials.protect.damage.lava")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (prot.getSettingBool(ProtectConfig.prevent_tnt_explosion) if (prot.getSettingBool(ProtectConfig.prevent_tnt_explosion)
&& cause == DamageCause.BLOCK_EXPLOSION && cause == DamageCause.BLOCK_EXPLOSION
&& !(target instanceof Player && !(target instanceof Player && shouldBeDamaged(user, "tnt")))
&& user.isAuthorized("essentials.protect.damage.tnt")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -77,6 +71,39 @@ public class EssentialsProtectEntityListener implements Listener
final Entity eAttack = edEvent.getDamager(); final Entity eAttack = edEvent.getDamager();
final User attacker = ess.getUser(eAttack); final User attacker = ess.getUser(eAttack);
//Creeper explode prevention
if (eAttack instanceof Creeper
&& (prot.getSettingBool(ProtectConfig.prevent_creeper_explosion)
|| prot.getSettingBool(ProtectConfig.prevent_creeper_playerdmg))
&& !(target instanceof Player && shouldBeDamaged(user, "creeper")))
{
event.setCancelled(true);
return;
}
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg)
&& !(target instanceof Player && shouldBeDamaged(user, "fireball")))
{
event.setCancelled(true);
return;
}
if (event.getEntity() instanceof WitherSkull
&& prot.getSettingBool(ProtectConfig.prevent_witherskull_playerdmg)
&& !(target instanceof Player && shouldBeDamaged(user, "witherskull")))
{
event.setCancelled(true);
return;
}
if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg)
&& !(target instanceof Player && shouldBeDamaged(user, "tnt")))
{
event.setCancelled(true);
return;
}
// PVP Settings // PVP Settings
if (target instanceof Player && eAttack instanceof Player if (target instanceof Player && eAttack instanceof Player
&& prot.getSettingBool(ProtectConfig.disable_pvp) && prot.getSettingBool(ProtectConfig.disable_pvp)
@ -86,59 +113,9 @@ public class EssentialsProtectEntityListener implements Listener
return; return;
} }
//Creeper explode prevention
if (eAttack instanceof Creeper && prot.getSettingBool(ProtectConfig.prevent_creeper_explosion)
&& !(target instanceof Player
&& user.isAuthorized("essentials.protect.damage.creeper")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{
event.setCancelled(true);
return;
}
if (eAttack instanceof Creeper && prot.getSettingBool(ProtectConfig.prevent_creeper_playerdmg)
&& !(target instanceof Player
&& user.isAuthorized("essentials.protect.damage.creeper")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{
event.setCancelled(true);
return;
}
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg)
&& !(target instanceof Player
&& user.isAuthorized("essentials.protect.damage.fireball")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{
event.setCancelled(true);
return;
}
if ((event.getEntity() instanceof WitherSkull
&& prot.getSettingBool(ProtectConfig.prevent_witherskull_playerdmg)
&& !(target instanceof Player
&& user.isAuthorized("essentials.protect.damage.witherskull")
&& !user.isAuthorized("essentials.protect.damage.disable"))))
{
event.setCancelled(true);
return;
}
if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg)
&& !(target instanceof Player
&& user.isAuthorized("essentials.protect.damage.tnt")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{
event.setCancelled(true);
return;
}
if (edEvent.getDamager() instanceof Projectile if (edEvent.getDamager() instanceof Projectile
&& target instanceof Player && target instanceof Player
&& ((prot.getSettingBool(ProtectConfig.disable_projectiles) && ((prot.getSettingBool(ProtectConfig.disable_projectiles) && !shouldBeDamaged(user, "projectiles"))
&& !(user.isAuthorized("essentials.protect.damage.projectiles")
&& !user.isAuthorized("essentials.protect.damage.disable")))
|| (((Projectile)edEvent.getDamager()).getShooter() instanceof Player || (((Projectile)edEvent.getDamager()).getShooter() instanceof Player
&& prot.getSettingBool(ProtectConfig.disable_pvp) && prot.getSettingBool(ProtectConfig.disable_pvp)
&& (!user.isAuthorized("essentials.protect.pvp") && (!user.isAuthorized("essentials.protect.pvp")
@ -149,13 +126,11 @@ public class EssentialsProtectEntityListener implements Listener
} }
} }
final DamageCause cause = event.getCause();
if (target instanceof Player) if (target instanceof Player)
{ {
if (cause == DamageCause.FALL if (cause == DamageCause.FALL
&& prot.getSettingBool(ProtectConfig.disable_fall) && prot.getSettingBool(ProtectConfig.disable_fall)
&& !(user.isAuthorized("essentials.protect.damage.fall") && !shouldBeDamaged(user, "fall"))
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -163,41 +138,35 @@ public class EssentialsProtectEntityListener implements Listener
if (cause == DamageCause.SUFFOCATION if (cause == DamageCause.SUFFOCATION
&& prot.getSettingBool(ProtectConfig.disable_suffocate) && prot.getSettingBool(ProtectConfig.disable_suffocate)
&& !(user.isAuthorized("essentials.protect.damage.suffocation") && !shouldBeDamaged(user, "suffocation"))
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if ((cause == DamageCause.FIRE if ((cause == DamageCause.FIRE || cause == DamageCause.FIRE_TICK)
|| cause == DamageCause.FIRE_TICK)
&& prot.getSettingBool(ProtectConfig.disable_firedmg) && prot.getSettingBool(ProtectConfig.disable_firedmg)
&& !(user.isAuthorized("essentials.protect.damage.fire") && !shouldBeDamaged(user, "fire"))
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (cause == DamageCause.DROWNING if (cause == DamageCause.DROWNING
&& prot.getSettingBool(ProtectConfig.disable_drown) && prot.getSettingBool(ProtectConfig.disable_drown)
&& !(user.isAuthorized("essentials.protect.damage.drowning") && !shouldBeDamaged(user, "drowning"))
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (cause == DamageCause.LIGHTNING if (cause == DamageCause.LIGHTNING
&& prot.getSettingBool(ProtectConfig.disable_lightning) && prot.getSettingBool(ProtectConfig.disable_lightning)
&& !(user.isAuthorized("essentials.protect.damage.lightning") && !shouldBeDamaged(user, "lightning"))
&& !user.isAuthorized("essentials.protect.damage.disable")))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (cause == DamageCause.WITHER if (cause == DamageCause.WITHER
&& prot.getSettingBool(ProtectConfig.disable_wither) && prot.getSettingBool(ProtectConfig.disable_wither)
&& !(user.isAuthorized("essentials.protect.damage.wither")) && !shouldBeDamaged(user, "wither"))
&& !user.isAuthorized("essentials.protect.damage.disable"))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -205,6 +174,12 @@ public class EssentialsProtectEntityListener implements Listener
} }
} }
private boolean shouldBeDamaged(final User user, final String type)
{
return (user.isAuthorized("essentials.protect.damage.".concat(type))
&& !user.isAuthorized("essentials.protect.damage.disable"));
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityExplode(final EntityExplodeEvent event) public void onEntityExplode(final EntityExplodeEvent event)
{ {
@ -253,12 +228,12 @@ public class EssentialsProtectEntityListener implements Listener
return; return;
} }
else if ((event.getEntity() instanceof WitherSkull) else if ((event.getEntity() instanceof WitherSkull)
&& prot.getSettingBool(ProtectConfig.prevent_witherskull_explosion)) && prot.getSettingBool(ProtectConfig.prevent_witherskull_explosion))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
// This code will prevent explosions near protected rails, signs or protected chests // This code will prevent explosions near protected rails, signs or protected chests
// TODO: Use protect db instead of this code // TODO: Use protect db instead of this code
@ -325,6 +300,7 @@ public class EssentialsProtectEntityListener implements Listener
|| event.getReason() == TargetReason.TARGET_ATTACKED_ENTITY || event.getReason() == TargetReason.TARGET_ATTACKED_ENTITY
|| event.getReason() == TargetReason.PIG_ZOMBIE_TARGET || event.getReason() == TargetReason.PIG_ZOMBIE_TARGET
|| event.getReason() == TargetReason.RANDOM_TARGET || event.getReason() == TargetReason.RANDOM_TARGET
|| event.getReason() == TargetReason.DEFEND_VILLAGE
|| event.getReason() == TargetReason.TARGET_ATTACKED_OWNER || event.getReason() == TargetReason.TARGET_ATTACKED_OWNER
|| event.getReason() == TargetReason.OWNER_ATTACKED_TARGET) || event.getReason() == TargetReason.OWNER_ATTACKED_TARGET)
&& prot.getSettingBool(ProtectConfig.prevent_entitytarget) && prot.getSettingBool(ProtectConfig.prevent_entitytarget)