diff --git a/MobArena.jar b/MobArena.jar index ab4cdd9..1fe1b82 100644 Binary files a/MobArena.jar and b/MobArena.jar differ diff --git a/bin/com/garbagemule/MobArena/ArenaManager.class b/bin/com/garbagemule/MobArena/ArenaManager.class new file mode 100644 index 0000000..ba4c596 Binary files /dev/null and b/bin/com/garbagemule/MobArena/ArenaManager.class differ diff --git a/bin/com/garbagemule/MobArena/EntityPosition.class b/bin/com/garbagemule/MobArena/EntityPosition.class new file mode 100644 index 0000000..c72ef1e Binary files /dev/null and b/bin/com/garbagemule/MobArena/EntityPosition.class differ diff --git a/bin/com/garbagemule/MobArena/MABlockListener.class b/bin/com/garbagemule/MobArena/MABlockListener.class new file mode 100644 index 0000000..1531219 Binary files /dev/null and b/bin/com/garbagemule/MobArena/MABlockListener.class differ diff --git a/bin/com/garbagemule/MobArena/MACommands.class b/bin/com/garbagemule/MobArena/MACommands.class new file mode 100644 index 0000000..f731ea5 Binary files /dev/null and b/bin/com/garbagemule/MobArena/MACommands.class differ diff --git a/bin/com/garbagemule/MobArena/MADamageListener.class b/bin/com/garbagemule/MobArena/MADamageListener.class new file mode 100644 index 0000000..7c50ceb Binary files /dev/null and b/bin/com/garbagemule/MobArena/MADamageListener.class differ diff --git a/bin/com/garbagemule/MobArena/MADisabledCommands.class b/bin/com/garbagemule/MobArena/MADisabledCommands.class new file mode 100644 index 0000000..dcfb4cb Binary files /dev/null and b/bin/com/garbagemule/MobArena/MADisabledCommands.class differ diff --git a/bin/com/garbagemule/MobArena/MADisconnectListener$1.class b/bin/com/garbagemule/MobArena/MADisconnectListener$1.class new file mode 100644 index 0000000..c85858d Binary files /dev/null and b/bin/com/garbagemule/MobArena/MADisconnectListener$1.class differ diff --git a/bin/com/garbagemule/MobArena/MADisconnectListener.class b/bin/com/garbagemule/MobArena/MADisconnectListener.class new file mode 100644 index 0000000..952a4ab Binary files /dev/null and b/bin/com/garbagemule/MobArena/MADisconnectListener.class differ diff --git a/bin/com/garbagemule/MobArena/MALobbyListener.class b/bin/com/garbagemule/MobArena/MALobbyListener.class new file mode 100644 index 0000000..cdac627 Binary files /dev/null and b/bin/com/garbagemule/MobArena/MALobbyListener.class differ diff --git a/bin/com/garbagemule/MobArena/MAMonsterListener$1.class b/bin/com/garbagemule/MobArena/MAMonsterListener$1.class new file mode 100644 index 0000000..478c08e Binary files /dev/null and b/bin/com/garbagemule/MobArena/MAMonsterListener$1.class differ diff --git a/bin/com/garbagemule/MobArena/MAMonsterListener.class b/bin/com/garbagemule/MobArena/MAMonsterListener.class new file mode 100644 index 0000000..3aa6109 Binary files /dev/null and b/bin/com/garbagemule/MobArena/MAMonsterListener.class differ diff --git a/bin/com/garbagemule/MobArena/MASpawnThread.class b/bin/com/garbagemule/MobArena/MASpawnThread.class new file mode 100644 index 0000000..4bb92be Binary files /dev/null and b/bin/com/garbagemule/MobArena/MASpawnThread.class differ diff --git a/bin/com/garbagemule/MobArena/MATeleportListener.class b/bin/com/garbagemule/MobArena/MATeleportListener.class new file mode 100644 index 0000000..147a329 Binary files /dev/null and b/bin/com/garbagemule/MobArena/MATeleportListener.class differ diff --git a/bin/com/garbagemule/MobArena/MAUtils.class b/bin/com/garbagemule/MobArena/MAUtils.class new file mode 100644 index 0000000..041b2a9 Binary files /dev/null and b/bin/com/garbagemule/MobArena/MAUtils.class differ diff --git a/bin/com/garbagemule/MobArena/MobArena.class b/bin/com/garbagemule/MobArena/MobArena.class new file mode 100644 index 0000000..a45f462 Binary files /dev/null and b/bin/com/garbagemule/MobArena/MobArena.class differ diff --git a/bin/plugin.yml b/bin/plugin.yml index 67c25a8..d0edc4e 100644 --- a/bin/plugin.yml +++ b/bin/plugin.yml @@ -1,6 +1,6 @@ name: MobArena main: com.garbagemule.MobArena.MobArena -version: 0.90 +version: 0.90.1 commands: ma: description: Base command for MobArena diff --git a/src/com/garbagemule/MobArena/ArenaManager.java b/src/com/garbagemule/MobArena/ArenaManager.java index 4ee1c11..9833d45 100644 --- a/src/com/garbagemule/MobArena/ArenaManager.java +++ b/src/com/garbagemule/MobArena/ArenaManager.java @@ -3,7 +3,6 @@ package com.garbagemule.MobArena; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -161,6 +160,9 @@ public class ArenaManager isRunning = true; readySet.clear(); + // Clear the floor for good measure. + clearEntities(); + for (Player p : playerSet) { p.teleport(arenaLoc); @@ -293,11 +295,8 @@ public class ArenaManager p.setHealth(20); tellAll(p.getName() + " died!"); - //if (playerSet.contains(p)) - playerSet.remove(p); - - //if (classMap.keySet().contains(p)) - classMap.remove(p); + playerSet.remove(p); + classMap.remove(p); if (isRunning && playerSet.isEmpty()) endArena(); @@ -384,10 +383,9 @@ public class ArenaManager return; } - Iterator iterator = ArenaManager.playerSet.iterator(); - while (iterator.hasNext()) + Set set = new HashSet(playerSet); + for (Player player : set) { - Player player = iterator.next(); if (!ArenaManager.readySet.contains(player)) ArenaManager.playerLeave(player); } @@ -407,9 +405,9 @@ public class ArenaManager return; } - Iterator iterator = ArenaManager.playerSet.iterator(); - while (iterator.hasNext()) - ArenaManager.playerLeave(iterator.next()); + Set set = new HashSet(playerSet); + for (Player player : set) + ArenaManager.playerLeave(player); // Just for good measure. endArena(); diff --git a/src/com/garbagemule/MobArena/MABlockListener.java b/src/com/garbagemule/MobArena/MABlockListener.java index bf2cf46..1f80376 100644 --- a/src/com/garbagemule/MobArena/MABlockListener.java +++ b/src/com/garbagemule/MobArena/MABlockListener.java @@ -19,24 +19,6 @@ public class MABlockListener extends BlockListener public MABlockListener(MobArena instance) { } - - /* Removed for testing purposes. - public void onBlockDamage(BlockDamageEvent event) - { - if (!ArenaManager.isSetup || !ArenaManager.isProtected) - return; - - Block b = event.getBlock(); - - if (ArenaManager.blockSet.contains(b)) - return; - - System.out.println("This is block damage."); - - if (MAUtils.inRegion(b.getLocation())) - event.setCancelled(true); - } - */ /** * Prevents blocks from breaking if block protection is on. @@ -51,8 +33,6 @@ public class MABlockListener extends BlockListener if (ArenaManager.blockSet.remove(b) || b.getType() == Material.TNT) return; - System.out.println("This is block break."); - if (MAUtils.inRegion(b.getLocation())) event.setCancelled(true); } diff --git a/src/com/garbagemule/MobArena/MACommands.java b/src/com/garbagemule/MobArena/MACommands.java index 0665e35..c89adec 100644 --- a/src/com/garbagemule/MobArena/MACommands.java +++ b/src/com/garbagemule/MobArena/MACommands.java @@ -223,7 +223,7 @@ public class MACommands implements CommandExecutor } // ma setregion [p1|p2] - if (cmd.equalsIgnoreCase("setregion")) + if (cmd.equals("setregion")) { if (!arg.equals("p1") && !arg.equals("p2")) { @@ -240,7 +240,7 @@ public class MACommands implements CommandExecutor } // ma expandregion [up|down|out] - if (cmd.equalsIgnoreCase("expandregion")) + if (cmd.equals("expandregion")) { if (ArenaManager.p1 == null || ArenaManager.p2 == null) { diff --git a/src/com/garbagemule/MobArena/MADamageListener.java b/src/com/garbagemule/MobArena/MADamageListener.java index 910977e..dce0450 100644 --- a/src/com/garbagemule/MobArena/MADamageListener.java +++ b/src/com/garbagemule/MobArena/MADamageListener.java @@ -4,8 +4,6 @@ import org.bukkit.entity.Player; import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.EntityListener; import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.CreatureSpawnEvent; /** * This listener acts as a type of death-listener. @@ -22,28 +20,9 @@ public class MADamageListener extends EntityListener { } - public void onEntityDamage(EntityDamageEvent event) - { - if (!ArenaManager.isRunning) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player p = (Player) event.getEntity(); - - if (!ArenaManager.playerSet.contains(p)) - return; - - if (p.getHealth() > event.getDamage()) - return; - - event.setCancelled(true); - ArenaManager.playerDeath(p); - } - /** - * Clears all player/monster drops on death. + * Clears all player/monster drops on death. Also handles + * player death events. */ public void onEntityDeath(EntityDeathEvent event) { @@ -71,19 +50,4 @@ public class MADamageListener extends EntityListener } } - /** - * Prevents monsters from spawning inside the arena unless - * it's running. - */ - public void onCreatureSpawn(CreatureSpawnEvent event) - { - if (!MAUtils.inRegion(event.getLocation())) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (!ArenaManager.isRunning) - event.setCancelled(true); - } } \ No newline at end of file diff --git a/src/com/garbagemule/MobArena/MAMonsterListener.java b/src/com/garbagemule/MobArena/MAMonsterListener.java index b6f25a0..78a1976 100644 --- a/src/com/garbagemule/MobArena/MAMonsterListener.java +++ b/src/com/garbagemule/MobArena/MAMonsterListener.java @@ -4,6 +4,8 @@ import java.util.HashMap; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityListener; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityCombustEvent; @@ -24,15 +26,41 @@ public class MAMonsterListener extends EntityListener plugin = instance; } + /** + * Prevents monsters from spawning inside the arena unless + * it's running. + */ + public void onCreatureSpawn(CreatureSpawnEvent event) + { + if (!MAUtils.inRegion(event.getLocation())) + return; + + if (!(event.getEntity() instanceof LivingEntity)) + return; + + if (!ArenaManager.isRunning) + event.setCancelled(true); + } + /** * Handles all explosion events, also from TNT. */ public void onEntityExplode(EntityExplodeEvent event) { - /* This could be done by simply cancelling the event, but that - * also cancels the explosion animation. This is a workaround. */ + // Check if any of the block "victims" are in the region. if (!MAUtils.inRegion(event.getLocation())) - return; + { + boolean inRegion = false; + for (Block b : event.blockList()) + { + if (!MAUtils.inRegion(b.getLocation())) + continue; + inRegion = true; + break; + } + if (!inRegion) + return; + } // Don't drop any blocks from the explosion. event.setYield(0); diff --git a/src/com/garbagemule/MobArena/MASpawnThread.java b/src/com/garbagemule/MobArena/MASpawnThread.java index b026c54..2a4e01e 100644 --- a/src/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/com/garbagemule/MobArena/MASpawnThread.java @@ -5,6 +5,7 @@ import org.bukkit.Location; import org.bukkit.entity.Wolf; import org.bukkit.entity.Ghast; import org.bukkit.entity.Slime; +import org.bukkit.entity.Creeper; import org.bukkit.entity.Player; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; @@ -146,9 +147,10 @@ public class MASpawnThread implements Runnable ran = random.nextInt(dGhasts); int count; - boolean slime = false; - boolean wolf = false; - boolean ghast = false; + boolean slime = false; + boolean wolf = false; + boolean ghast = false; + boolean creeper = false; if (ran < dPoweredCreepers) mob = CreatureType.CREEPER; else if (ran < dPigZombies) mob = CreatureType.PIG_ZOMBIE; @@ -164,6 +166,7 @@ public class MASpawnThread implements Runnable { case CREEPER: count = noOfPlayers * 3; + creeper = true; break; case PIG_ZOMBIE: count = noOfPlayers * 2; @@ -202,9 +205,10 @@ public class MASpawnThread implements Runnable else System.out.println("MASpawnThread - monsterSet contains this entity"); - if (slime) ((Slime)e).setSize(2); - if (wolf) ((Wolf)e).setAngry(true); - if (ghast) ((Ghast)e).setHealth(Math.min(noOfPlayers*25, 200)); + if (slime) ((Slime)e).setSize(2); + if (wolf) ((Wolf)e).setAngry(true); + if (ghast) ((Ghast)e).setHealth(Math.min(noOfPlayers*25, 200)); + if (creeper) ((Creeper)e).setPowered(true); // Slimes can't have targets, apparently. if (!(e instanceof Creature)) diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index b855c3e..d64512d 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -421,6 +421,9 @@ public class MAUtils if (!loc.getWorld().getName().equals(ArenaManager.world.getName())) return false; + if (!ArenaManager.isSetup) + return false; + Location p1 = ArenaManager.p1; Location p2 = ArenaManager.p2; @@ -593,6 +596,7 @@ public class MAUtils (ArenaManager.dSkeletons != -1) && (ArenaManager.dSpiders != -1) && (ArenaManager.dCreepers != -1) && + (ArenaManager.dWolves != -1) && (ArenaManager.classes.size() > 0) && (ArenaManager.spawnpoints.size() > 0)); } diff --git a/src/com/garbagemule/MobArena/MobArena.java b/src/com/garbagemule/MobArena/MobArena.java index 6713315..501120b 100644 --- a/src/com/garbagemule/MobArena/MobArena.java +++ b/src/com/garbagemule/MobArena/MobArena.java @@ -55,21 +55,20 @@ public class MobArena extends JavaPlugin // Register events. pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, commandListener, Priority.Monitor, this); - pm.registerEvent(Event.Type.PLAYER_INTERACT, lobbyListener, Priority.Normal, this); - pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, lobbyListener, Priority.Normal, this); - pm.registerEvent(Event.Type.PLAYER_BUCKET_EMPTY, lobbyListener, Priority.Normal, this); - pm.registerEvent(Event.Type.PLAYER_TELEPORT, teleportListener, Priority.Normal, this); - pm.registerEvent(Event.Type.PLAYER_QUIT, discListener, Priority.Normal, this); - pm.registerEvent(Event.Type.PLAYER_KICK, discListener, Priority.Normal, this); - pm.registerEvent(Event.Type.PLAYER_JOIN, discListener, Priority.Normal, this); - pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Normal, this); - //pm.registerEvent(Event.Type.BLOCK_DAMAGE, blockListener, Priority.Normal, this); - pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this); - pm.registerEvent(Event.Type.ENTITY_DAMAGE, damageListener, Priority.Normal, this); - pm.registerEvent(Event.Type.ENTITY_DEATH, damageListener, Priority.Normal, this); - pm.registerEvent(Event.Type.ENTITY_EXPLODE, monsterListener, Priority.Normal, this); - pm.registerEvent(Event.Type.ENTITY_COMBUST, monsterListener, Priority.Normal, this); - pm.registerEvent(Event.Type.ENTITY_TARGET, monsterListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_INTERACT, lobbyListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, lobbyListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_BUCKET_EMPTY, lobbyListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_TELEPORT, teleportListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_QUIT, discListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_KICK, discListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_JOIN, discListener, Priority.Normal, this); + pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Normal, this); + pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this); + pm.registerEvent(Event.Type.ENTITY_DEATH, damageListener, Priority.Normal, this); + pm.registerEvent(Event.Type.ENTITY_EXPLODE, monsterListener, Priority.Normal, this); + pm.registerEvent(Event.Type.ENTITY_COMBUST, monsterListener, Priority.Normal, this); + pm.registerEvent(Event.Type.ENTITY_TARGET, monsterListener, Priority.Normal, this); + pm.registerEvent(Event.Type.CREATURE_SPAWN, monsterListener, Priority.Normal, this); System.out.println(pdfFile.getName() + " v" + pdfFile.getVersion() + " enabled." ); }