From 5c59f4728d42d90ce1bae7068e3c2e277619e9a6 Mon Sep 17 00:00:00 2001 From: ementalo Date: Thu, 31 Mar 2011 22:20:53 +0000 Subject: Fix NPE where players trigger creature spawn git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1052 e251c2fe-e539-e718-e476-b85c1f46cddb --- .../essentials/protect/EssentialsProtect.java | 2 -- .../protect/EssentialsProtectEntityListener.java | 40 ++++++++++++++-------- 2 files changed, 25 insertions(+), 17 deletions(-) (limited to 'EssentialsProtect/src/com/earth2me') diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java index 798153b1c..ec93acc2c 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java @@ -49,8 +49,6 @@ public class EssentialsProtect extends JavaPlugin blockListener = new EssentialsProtectBlockListener(this); entityListener = new EssentialsProtectEntityListener(this); pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.Low, this); - // Why is this commented? - //pm.registerEvent(Type.BLOCK_DAMAGED, blockListener, Priority.High, this); pm.registerEvent(Type.BLOCK_PLACE, blockListener, Priority.Highest, this); pm.registerEvent(Type.BLOCK_FROMTO, blockListener, Priority.Highest, this); pm.registerEvent(Type.BLOCK_IGNITE, blockListener, Priority.Highest, this); diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java index 97b5c59e5..cad4389d6 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java @@ -10,6 +10,7 @@ import net.minecraft.server.Packet60Explosion; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -89,7 +90,7 @@ public class EssentialsProtectEntityListener extends EntityListener event.setCancelled(true); return; } - + if (eAttack instanceof Creeper && EssentialsProtect.guardSettings.get("protect.prevent.creeper-playerdamage")) { event.setCancelled(true); @@ -144,32 +145,36 @@ public class EssentialsProtectEntityListener extends EntityListener { //Nicccccccccce plaaacccccccccce.. int maxHeight = Essentials.getSettings().getEpCreeperMaxHeight(); - if ( EssentialsProtect.guardSettings.get("protect.prevent.creeper-explosion") || - EssentialsProtect.guardSettings.get("protect.prevent.creeper-blockdamage") || - (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)) + if (EssentialsProtect.guardSettings.get("protect.prevent.creeper-explosion") + || EssentialsProtect.guardSettings.get("protect.prevent.creeper-blockdamage") + || (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight)) { HashSet set = new HashSet(event.blockList().size()); Player[] players = parent.getServer().getOnlinePlayers(); List blocksUnderPlayers = new ArrayList(players.length); Location loc = event.getLocation(); - for (Player player : players) { - if (player.getWorld().equals(loc.getWorld())) { + for (Player player : players) + { + if (player.getWorld().equals(loc.getWorld())) + { blocksUnderPlayers.add( - new ChunkPosition( + new ChunkPosition( player.getLocation().getBlockX(), player.getLocation().getBlockY() - 1, player.getLocation().getBlockZ())); } } - for (Block block : event.blockList()) { + for (Block block : event.blockList()) + { ChunkPosition cp = new ChunkPosition(block.getX(), block.getY(), block.getZ()); - if (!blocksUnderPlayers.contains(cp)) { + if (!blocksUnderPlayers.contains(cp)) + { set.add(cp); } } - - ((CraftServer)parent.getServer()).getServer().f.a(loc.getX(), loc.getY(), loc.getZ(), 64.0D, - new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); + + ((CraftServer)parent.getServer()).getServer().f.a(loc.getX(), loc.getY(), loc.getZ(), 64.0D, + new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0f, set)); event.setCancelled(true); return; } @@ -185,12 +190,17 @@ public class EssentialsProtectEntityListener extends EntityListener } @Override - public void onCreatureSpawn(CreatureSpawnEvent event) { + public void onCreatureSpawn(CreatureSpawnEvent event) + { + if (event.getEntity() instanceof CraftPlayer) return; + if (event.isCancelled()) return; String creatureName = event.getCreatureType().toString().toLowerCase(); - if (creatureName == null || creatureName.isEmpty()) { + if (creatureName == null || creatureName.isEmpty()) + { return; } - if (EssentialsProtect.guardSettings.get("protect.prevent.spawn."+creatureName)) { + if (EssentialsProtect.guardSettings.get("protect.prevent.spawn." + creatureName)) + { event.setCancelled(true); } } -- cgit v1.2.3