1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-20 21:41:32 +02:00

Merge pull request #429 from GunfighterJ/master

[Fix] Update Essentials Protect
This commit is contained in:
Iaccidentally
2013-04-01 10:54:25 -07:00
4 changed files with 332 additions and 304 deletions

View File

@@ -18,14 +18,20 @@ public class Prevent implements StorageObject
private boolean lavaFirespread = true; private boolean lavaFirespread = true;
private boolean lightningFirespread = true; private boolean lightningFirespread = true;
private boolean portalCreation = false; private boolean portalCreation = false;
private boolean tntExplosion = false; private boolean tntBlockdamage = false;
private boolean fireballExplosion = false; private boolean tntPlayerdamage = false;
private boolean tntMinecartBlockdamage = false;
private boolean tntMinecartPlayerdamage = false;
private boolean fireballBlockdamage = false;
private boolean fireballPlayerdamage = false;
private boolean fireballFire = false; private boolean fireballFire = false;
private boolean creeperExplosion = false;
private boolean creeperBlockdamage = false; private boolean creeperBlockdamage = false;
private boolean creeperPlayerdamage = false;
private boolean enderdragonBlockdamage = false; private boolean enderdragonBlockdamage = false;
private boolean witherSpawnExplosion = false; private boolean witherSpawnBlockdamage = false;
private boolean witherskullExplosion = false; private boolean witherSpawnPlayerdamage = false;
private boolean witherskullBlockdamage = false;
private boolean witherskullPlayerdamage = false;
private boolean witherBlockreplace = false; private boolean witherBlockreplace = false;
private boolean endermanPickup = false; private boolean endermanPickup = false;
private boolean villagerDeath = false; private boolean villagerDeath = false;

View File

@@ -10,7 +10,7 @@ import net.ess3.storage.StorageObject;
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class Protect implements StorageObject public class Protect implements StorageObject
{ {
@Comment("General physics/behavior modifications") @Comment("General entity/physics behavior.")
private Prevent prevent = new Prevent(); private Prevent prevent = new Prevent();
@Comment( @Comment(
{ {

View File

@@ -1,6 +1,8 @@
package net.ess3.protect; package net.ess3.protect;
import net.ess3.settings.protect.Prevent;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.entity.minecart.ExplosiveMinecart;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@@ -10,7 +12,6 @@ import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent;
//TODO: remove unnecessary return statements
public class EssentialsProtectEntityListener implements Listener public class EssentialsProtectEntityListener implements Listener
{ {
private final IProtect prot; private final IProtect prot;
@@ -21,13 +22,17 @@ public class EssentialsProtectEntityListener implements Listener
this.prot = prot; this.prot = prot;
} }
private Prevent getSettings()
{
return prot.getSettings().getData().getPrevent();
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityDamage(final EntityDamageEvent event) public void onEntityDamage(final EntityDamageEvent event)
{ {
final ProtectHolder settings = prot.getSettings();
final Entity target = event.getEntity(); final Entity target = event.getEntity();
if (target instanceof Villager && settings.getData().getPrevent().isVillagerDeath()) if (target instanceof Villager && getSettings().isVillagerDeath())
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -48,8 +53,7 @@ public class EssentialsProtectEntityListener implements Listener
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (cause == DamageCause.BLOCK_EXPLOSION && (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized( if (cause == DamageCause.BLOCK_EXPLOSION && (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
user)))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -69,22 +73,36 @@ public class EssentialsProtectEntityListener implements Listener
return; return;
} }
//Creeper explode prevention //Player damage prevention section
if (eAttack instanceof Creeper && settings.getData().getPrevent().isCreeperExplosion() || (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized( if (eAttack instanceof Creeper && getSettings().isCreeperPlayerdamage() || (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized(
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))) user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized( if (eAttack instanceof ExplosiveMinecart && getSettings().isTntMinecartPlayerdamage() || (Permissions.PREVENTDAMAGE_TNTMINECART.isAuthorized(
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))) user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if ((event.getEntity() instanceof WitherSkull && Permissions.PREVENTDAMAGE_WITHERSKULL.isAuthorized( if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball || event.getEntity() instanceof LargeFireball) && (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized(
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if ((eAttack instanceof WitherSkull && Permissions.PREVENTDAMAGE_WITHERSKULL.isAuthorized(
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if ((eAttack instanceof Wither && event.getCause() == DamageCause.ENTITY_EXPLOSION) && getSettings().isWitherSpawnPlayerdamage() || (Permissions.PREVENTDAMAGE_WITHER.isAuthorized(
user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))) user) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -141,47 +159,46 @@ public class EssentialsProtectEntityListener implements Listener
if (cause == DamageCause.WITHER && (Permissions.PREVENTDAMAGE_WITHER.isAuthorized(user)) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)) if (cause == DamageCause.WITHER && (Permissions.PREVENTDAMAGE_WITHER.isAuthorized(user)) && !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
} }
} }
// return statements are probably not needed here
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityExplode(final EntityExplodeEvent event) public void onEntityExplode(final EntityExplodeEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final int maxHeight = prot.getSettings().getData().getCreeperMaxHeight();
final int maxHeight = settings.getData().getCreeperMaxHeight(); Entity entity = event.getEntity();
if (event.getEntity() instanceof EnderDragon && settings.getData().getPrevent().isEnderdragonBlockdamage()) //Block damage prevention section
if (entity instanceof EnderDragon && getSettings().isEnderdragonBlockdamage())
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
else if (event.getEntity() instanceof Wither && settings.getData().getPrevent().isWitherSpawnExplosion()) else if (entity instanceof Wither && getSettings().isWitherSpawnBlockdamage())
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
else if (event.getEntity() instanceof Creeper && (settings.getData().getPrevent().isCreeperExplosion() || settings.getData().getPrevent().isCreeperBlockdamage() || (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight))) else if (entity instanceof Creeper && (getSettings().isCreeperBlockdamage() || getSettings().isCreeperBlockdamage()
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
{ {
event.setCancelled(true); event.setCancelled(true);
event.getLocation().getWorld().createExplosion(event.getLocation(), 0F); event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
return;
} }
else if (event.getEntity() instanceof TNTPrimed && settings.getData().getPrevent().isTntExplosion()) else if (entity instanceof TNTPrimed && getSettings().isTntBlockdamage())
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
else if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && settings.getData().getPrevent().isFireballExplosion()) else if ((entity instanceof Fireball || entity instanceof SmallFireball) && getSettings().isFireballBlockdamage())
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
else if ((event.getEntity() instanceof WitherSkull) && settings.getData().getPrevent().isWitherskullExplosion()) else if ((entity instanceof WitherSkull) && getSettings().isWitherskullBlockdamage())
{
event.setCancelled(true);
}
else if ((entity instanceof ExplosiveMinecart) && getSettings().isTntMinecartBlockdamage())
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
} }
@@ -197,7 +214,10 @@ public class EssentialsProtectEntityListener implements Listener
if (entity.getType() == EntityType.PLAYER) if (entity.getType() == EntityType.PLAYER)
{ {
final Player user = (Player) event.getTarget(); final Player user = (Player) event.getTarget();
if ((event.getReason() == TargetReason.CLOSEST_PLAYER || event.getReason() == TargetReason.TARGET_ATTACKED_ENTITY || event.getReason() == TargetReason.PIG_ZOMBIE_TARGET || event.getReason() == TargetReason.RANDOM_TARGET || event.getReason() == TargetReason.TARGET_ATTACKED_OWNER || event.getReason() == TargetReason.OWNER_ATTACKED_TARGET) && !prot.getSettings().getData().getPrevent().isEntitytarget() && !Permissions.ENTITY_TARGET_BYPASS.isAuthorized( if ((event.getReason() == TargetReason.CLOSEST_PLAYER || event.getReason() == TargetReason.TARGET_ATTACKED_ENTITY || event.getReason() == TargetReason.PIG_ZOMBIE_TARGET
|| event.getReason() == TargetReason.RANDOM_TARGET || event.getReason() == TargetReason.TARGET_ATTACKED_OWNER
|| event.getReason() == TargetReason.OWNER_ATTACKED_TARGET)
&& !prot.getSettings().getData().getPrevent().isEntitytarget() && !Permissions.ENTITY_TARGET_BYPASS.isAuthorized(
user, event.getEntity().getType().getName().toLowerCase())) user, event.getEntity().getType().getName().toLowerCase()))
{ {
event.setCancelled(true); event.setCancelled(true);
@@ -208,8 +228,7 @@ public class EssentialsProtectEntityListener implements Listener
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onExplosionPrime(final ExplosionPrimeEvent event) public void onExplosionPrime(final ExplosionPrimeEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && getSettings().isFireballFire())
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball) && settings.getData().getPrevent().isFireballFire())
{ {
event.setFire(false); event.setFire(false);
} }
@@ -218,15 +237,13 @@ public class EssentialsProtectEntityListener implements Listener
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityChangeBlock(final EntityChangeBlockEvent event) public void onEntityChangeBlock(final EntityChangeBlockEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); if (event.getEntityType() == EntityType.ENDERMAN && getSettings().isEndermanPickup())
if (event.getEntityType() == EntityType.ENDERMAN && settings.getData().getPrevent().isEndermanPickup())
{ {
event.setCancelled(true); event.setCancelled(true);
} }
if (event.getEntityType() == EntityType.WITHER && settings.getData().getPrevent().isWitherBlockreplace()) if (event.getEntityType() == EntityType.WITHER && getSettings().isWitherBlockreplace())
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
} }
@@ -234,12 +251,16 @@ public class EssentialsProtectEntityListener implements Listener
public void onPaintingBreak(final HangingBreakByEntityEvent event) public void onPaintingBreak(final HangingBreakByEntityEvent event)
{ {
final ProtectHolder settings = prot.getSettings(); final ProtectHolder settings = prot.getSettings();
if (event.getCause() == HangingBreakEvent.RemoveCause.ENTITY Entity remover = event.getRemover();
&& event.getRemover() instanceof Creeper if ((event.getCause() == HangingBreakEvent.RemoveCause.ENTITY)
&& settings.getData().getPrevent().isCreeperBlockdamage() ) && ((remover instanceof Creeper) && getSettings().isCreeperBlockdamage())
|| ((remover instanceof Wither) && getSettings().isWitherSpawnBlockdamage())
|| ((remover instanceof Fireball) && getSettings().isFireballBlockdamage())
|| ((remover instanceof TNTPrimed) && getSettings().isTntBlockdamage())
|| ((remover instanceof WitherSkull) && getSettings().isWitherskullBlockdamage())
|| ((remover instanceof ExplosiveMinecart) && getSettings().isTntMinecartBlockdamage()))
{ {
event.setCancelled(true); event.setCancelled(true);
return;
} }
} }
} }

View File

@@ -18,6 +18,7 @@ public enum Permissions implements IPermission
PREVENTDAMAGE_PROJECTILES(PermissionDefault.FALSE), PREVENTDAMAGE_PROJECTILES(PermissionDefault.FALSE),
PREVENTDAMAGE_LAVADAMAGE(PermissionDefault.FALSE), PREVENTDAMAGE_LAVADAMAGE(PermissionDefault.FALSE),
PREVENTDAMAGE_TNT(PermissionDefault.FALSE), PREVENTDAMAGE_TNT(PermissionDefault.FALSE),
PREVENTDAMAGE_TNTMINECART(PermissionDefault.FALSE),
PREVENTDAMAGE_SUFFOCATION(PermissionDefault.FALSE), PREVENTDAMAGE_SUFFOCATION(PermissionDefault.FALSE),
PREVENTDAMAGE_FIRE(PermissionDefault.FALSE), PREVENTDAMAGE_FIRE(PermissionDefault.FALSE),
PREVENTDAMAGE_DROWNING(PermissionDefault.FALSE), PREVENTDAMAGE_DROWNING(PermissionDefault.FALSE),