1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-12 09:35:26 +02:00

Less locks please

This commit is contained in:
snowleo
2012-10-06 16:49:40 +02:00
parent 463c4ff62d
commit fabd88dc25
75 changed files with 805 additions and 1618 deletions

View File

@@ -16,48 +16,40 @@ public class EssentialsProtectBlockListener implements Listener
public EssentialsProtectBlockListener(final IProtect parent)
{
this.prot = parent;
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockIgnite(BlockIgniteEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
final Block block = event.getBlock();
if (event.getBlock().getType() == Material.OBSIDIAN
|| event.getBlock().getRelative(BlockFace.DOWN).getType() == Material.OBSIDIAN)
{
final Block block = event.getBlock();
if (event.getBlock().getType() == Material.OBSIDIAN
|| event.getBlock().getRelative(BlockFace.DOWN).getType() == Material.OBSIDIAN)
{
event.setCancelled(settings.getData().getPrevent().isPortalCreation());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.SPREAD))
{
event.setCancelled(settings.getData().getPrevent().isFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL) && event.getPlayer() != null)
{
event.setCancelled(Permissions.USEFLINTSTEEL.isAuthorized(event.getPlayer()));
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LAVA))
{
event.setCancelled(settings.getData().getPrevent().isLavaFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LIGHTNING))
{
event.setCancelled(settings.getData().getPrevent().isLightningFirespread());
}
event.setCancelled(settings.getData().getPrevent().isPortalCreation());
return;
}
finally
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.SPREAD))
{
settings.unlock();
event.setCancelled(settings.getData().getPrevent().isFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL) && event.getPlayer() != null)
{
event.setCancelled(Permissions.USEFLINTSTEEL.isAuthorized(event.getPlayer()));
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LAVA))
{
event.setCancelled(settings.getData().getPrevent().isLavaFirespread());
return;
}
if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LIGHTNING))
{
event.setCancelled(settings.getData().getPrevent().isLightningFirespread());
}
}
@@ -65,47 +57,32 @@ public class EssentialsProtectBlockListener implements Listener
public void onBlockFromTo(final BlockFromToEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
final Block block = event.getBlock();
if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER)
{
final Block block = event.getBlock();
if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER)
{
event.setCancelled(settings.getData().getPrevent().isWaterFlow());
return;
}
event.setCancelled(settings.getData().getPrevent().isWaterFlow());
return;
}
if (block.getType() == Material.LAVA || block.getType() == Material.STATIONARY_LAVA)
{
event.setCancelled(settings.getData().getPrevent().isLavaFlow());
}
// TODO: Test if this still works
/*
* if (block.getType() == Material.AIR) {
* event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_water_bucket_flow)); return; }
*/
}
finally
if (block.getType() == Material.LAVA || block.getType() == Material.STATIONARY_LAVA)
{
settings.unlock();
event.setCancelled(settings.getData().getPrevent().isLavaFlow());
}
// TODO: Test if this still works
/*
* if (block.getType() == Material.AIR) {
* event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_water_bucket_flow)); return; }
*/
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBurn(final BlockBurnEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
if (settings.getData().getPrevent().isFirespread())
{
if (settings.getData().getPrevent().isFirespread())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
event.setCancelled(true);
}
}
}

View File

@@ -23,140 +23,132 @@ public class EssentialsProtectEntityListener implements Listener
public void onEntityDamage(final EntityDamageEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
{
final Entity target = event.getEntity();
final Entity target = event.getEntity();
if (target instanceof Villager && settings.getData().getPrevent().isVillagerDeath())
if (target instanceof Villager && settings.getData().getPrevent().isVillagerDeath())
{
event.setCancelled(true);
return;
}
final Player user = target instanceof Player ? (Player)target : null;
if (target instanceof Player && event instanceof EntityDamageByBlockEvent)
{
final DamageCause cause = event.getCause();
if (cause == DamageCause.CONTACT
&& (Permissions.PREVENTDAMAGE_CONTACT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LAVA
&& (Permissions.PREVENTDAMAGE_LAVADAMAGE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.BLOCK_EXPLOSION
&& (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
}
if (target instanceof Player && event instanceof EntityDamageByEntityEvent)
{
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
final Entity eAttack = edEvent.getDamager();
final Player attacker = eAttack instanceof Player ? (Player)eAttack : null;
// PVP Settings
if (target instanceof Player && eAttack instanceof Player
&& (!Permissions.PVP.isAuthorized(user) || !Permissions.PVP.isAuthorized(attacker)))
{
event.setCancelled(true);
return;
}
final Player user = target instanceof Player ? (Player)target : null;
if (target instanceof Player && event instanceof EntityDamageByBlockEvent)
//Creeper explode prevention
if (eAttack instanceof Creeper && settings.getData().getPrevent().isCreeperExplosion()
|| (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
final DamageCause cause = event.getCause();
if (cause == DamageCause.CONTACT
&& (Permissions.PREVENTDAMAGE_CONTACT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LAVA
&& (Permissions.PREVENTDAMAGE_LAVADAMAGE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.BLOCK_EXPLOSION
&& (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
event.setCancelled(true);
return;
}
if (target instanceof Player && event instanceof EntityDamageByEntityEvent)
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
final EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event;
final Entity eAttack = edEvent.getDamager();
final Player attacker = eAttack instanceof Player ? (Player)eAttack : null;
// PVP Settings
if (target instanceof Player && eAttack instanceof Player
&& (!Permissions.PVP.isAuthorized(user) || !Permissions.PVP.isAuthorized(attacker)))
{
event.setCancelled(true);
return;
}
//Creeper explode prevention
if (eAttack instanceof Creeper && settings.getData().getPrevent().isCreeperExplosion()
|| (Permissions.PREVENTDAMAGE_CREEPER.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& (Permissions.PREVENTDAMAGE_FIREBALL.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (eAttack instanceof TNTPrimed
&& (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (edEvent.getDamager() instanceof Projectile
&& ((Permissions.PREVENTDAMAGE_PROJECTILES.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))
|| (((Projectile)edEvent.getDamager()).getShooter() instanceof Player
&& (!Permissions.PVP.isAuthorized(user)
|| !Permissions.PVP.isAuthorized((Player)((Projectile)edEvent.getDamager()).getShooter())))))
{
event.setCancelled(true);
return;
}
event.setCancelled(true);
return;
}
final DamageCause cause = event.getCause();
if (target instanceof Player)
if (eAttack instanceof TNTPrimed
&& (Permissions.PREVENTDAMAGE_TNT.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
if (cause == DamageCause.FALL
&& (Permissions.PREVENTDAMAGE_FALL.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
event.setCancelled(true);
return;
}
if (cause == DamageCause.SUFFOCATION
&& (Permissions.PREVENTDAMAGE_SUFFOCATION.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if ((cause == DamageCause.FIRE
|| cause == DamageCause.FIRE_TICK)
&& (Permissions.PREVENTDAMAGE_FIRE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.DROWNING
&& (Permissions.PREVENTDAMAGE_DROWNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LIGHTNING
&& (Permissions.PREVENTDAMAGE_LIGHTNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
}
if (edEvent.getDamager() instanceof Projectile
&& ((Permissions.PREVENTDAMAGE_PROJECTILES.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user))
|| (((Projectile)edEvent.getDamager()).getShooter() instanceof Player
&& (!Permissions.PVP.isAuthorized(user)
|| !Permissions.PVP.isAuthorized((Player)((Projectile)edEvent.getDamager()).getShooter())))))
{
event.setCancelled(true);
return;
}
}
finally
final DamageCause cause = event.getCause();
if (target instanceof Player)
{
settings.unlock();
if (cause == DamageCause.FALL
&& (Permissions.PREVENTDAMAGE_FALL.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.SUFFOCATION
&& (Permissions.PREVENTDAMAGE_SUFFOCATION.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if ((cause == DamageCause.FIRE
|| cause == DamageCause.FIRE_TICK)
&& (Permissions.PREVENTDAMAGE_FIRE.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.DROWNING
&& (Permissions.PREVENTDAMAGE_DROWNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
return;
}
if (cause == DamageCause.LIGHTNING
&& (Permissions.PREVENTDAMAGE_LIGHTNING.isAuthorized(user)
&& !Permissions.PREVENTDAMAGE_NONE.isAuthorized(user)))
{
event.setCancelled(true);
}
}
}
@@ -164,42 +156,34 @@ public class EssentialsProtectEntityListener implements Listener
public void onEntityExplode(final EntityExplodeEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
{
final int maxHeight = settings.getData().getCreeperMaxHeight();
final int maxHeight = settings.getData().getCreeperMaxHeight();
if (event.getEntity() instanceof EnderDragon
&& settings.getData().getPrevent().isEnderdragonBlockdamage())
{
event.setCancelled(true);
return;
}
else if (event.getEntity() instanceof Creeper
&& (settings.getData().getPrevent().isCreeperExplosion()
|| settings.getData().getPrevent().isCreeperBlockdamage()
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
{
event.setCancelled(true);
event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
return;
}
else if (event.getEntity() instanceof TNTPrimed
&& settings.getData().getPrevent().isTntExplosion())
{
event.setCancelled(true);
return;
}
else if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& settings.getData().getPrevent().isFireballExplosion())
{
event.setCancelled(true);
return;
}
}
finally
if (event.getEntity() instanceof EnderDragon
&& settings.getData().getPrevent().isEnderdragonBlockdamage())
{
settings.unlock();
event.setCancelled(true);
return;
}
else if (event.getEntity() instanceof Creeper
&& (settings.getData().getPrevent().isCreeperExplosion()
|| settings.getData().getPrevent().isCreeperBlockdamage()
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)))
{
event.setCancelled(true);
event.getLocation().getWorld().createExplosion(event.getLocation(), 0F);
return;
}
else if (event.getEntity() instanceof TNTPrimed
&& settings.getData().getPrevent().isTntExplosion())
{
event.setCancelled(true);
return;
}
else if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& settings.getData().getPrevent().isFireballExplosion())
{
event.setCancelled(true);
return;
}
}
@@ -226,18 +210,10 @@ public class EssentialsProtectEntityListener implements Listener
public void onExplosionPrime(final ExplosionPrimeEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& settings.getData().getPrevent().isFireballFire())
{
if ((event.getEntity() instanceof Fireball || event.getEntity() instanceof SmallFireball)
&& settings.getData().getPrevent().isFireballFire())
{
event.setFire(false);
}
}
finally
{
settings.unlock();
event.setFire(false);
}
}
@@ -245,17 +221,9 @@ public class EssentialsProtectEntityListener implements Listener
public void onEntityChangeBlock(final EntityChangeBlockEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
if (event.getEntityType() == EntityType.ENDERMAN && settings.getData().getPrevent().isEndermanPickup())
{
if (event.getEntityType() == EntityType.ENDERMAN && settings.getData().getPrevent().isEndermanPickup())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
event.setCancelled(true);
}
}
}

View File

@@ -21,19 +21,12 @@ public class EssentialsProtectWeatherListener implements Listener
public void onWeatherChange(final WeatherChangeEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
if (!event.isCancelled()
&& settings.getData().isDisableStorm()
&& event.toWeatherState())
{
if (!event.isCancelled()
&& settings.getData().isDisableStorm()
&& event.toWeatherState())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
event.setCancelled(true);
}
}
@@ -41,18 +34,11 @@ public class EssentialsProtectWeatherListener implements Listener
public void onLightningStrike(final LightningStrikeEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
if (!event.isCancelled()
&& settings.getData().isDisableLighting())
{
if (!event.isCancelled()
&& settings.getData().isDisableLighting())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
event.setCancelled(true);
}
}
@@ -60,19 +46,12 @@ public class EssentialsProtectWeatherListener implements Listener
public void onThunderChange(final ThunderChangeEvent event)
{
final ProtectHolder settings = prot.getSettings();
settings.acquireReadLock();
try
if (!event.isCancelled()
&& settings.getData().isDisableThunder()
&& event.toThunderState())
{
if (!event.isCancelled()
&& settings.getData().isDisableThunder()
&& event.toThunderState())
{
event.setCancelled(true);
}
}
finally
{
settings.unlock();
event.setCancelled(true);
}
}
}