diff --git a/MobArena.jar b/MobArena.jar index 7aa275a..0ab0b20 100644 Binary files a/MobArena.jar and b/MobArena.jar differ diff --git a/src/com/garbagemule/MobArena/ArenaManager.java b/src/com/garbagemule/MobArena/ArenaManager.java index cc59c15..a42a3b4 100644 --- a/src/com/garbagemule/MobArena/ArenaManager.java +++ b/src/com/garbagemule/MobArena/ArenaManager.java @@ -33,6 +33,7 @@ public class ArenaManager protected static Location spectatorLoc = null; protected static boolean isRunning = false; protected static boolean isSetup = false; + protected static boolean isProtected = true; // Location variables for the arena region. protected static Location p1 = null; @@ -145,7 +146,7 @@ public class ArenaManager } MASpawnThread thread = new MASpawnThread(); - plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin,thread,100,400); + server.getScheduler().scheduleSyncRepeatingTask(plugin,thread,100,400); tellAll("Let the slaughter begin!"); } diff --git a/src/com/garbagemule/MobArena/MABlockListener.java b/src/com/garbagemule/MobArena/MABlockListener.java index 839688a..cd67412 100644 --- a/src/com/garbagemule/MobArena/MABlockListener.java +++ b/src/com/garbagemule/MobArena/MABlockListener.java @@ -23,7 +23,10 @@ public class MABlockListener extends BlockListener public void onBlockDamage(BlockDamageEvent event) { - if (!ArenaManager.isSetup) + if (!ArenaManager.isSetup || !ArenaManager.isProtected) + return; + + if (ArenaManager.blockSet.contains(event.getBlock())) return; if (MAUtils.inRegion(event.getBlock().getLocation())) @@ -32,7 +35,10 @@ public class MABlockListener extends BlockListener public void onBlockBreak(BlockBreakEvent event) { - if (!ArenaManager.isSetup) + if (!ArenaManager.isSetup || !ArenaManager.isProtected) + return; + + if (ArenaManager.blockSet.contains(event.getBlock())) return; if (MAUtils.inRegion(event.getBlock().getLocation())) @@ -41,7 +47,7 @@ public class MABlockListener extends BlockListener public void onBlockPlace(BlockPlaceEvent event) { - if (!ArenaManager.isSetup) + if (!ArenaManager.isSetup || !ArenaManager.isProtected) return; if (MAUtils.inRegion(event.getBlock().getLocation())) diff --git a/src/com/garbagemule/MobArena/MACommands.java b/src/com/garbagemule/MobArena/MACommands.java index 3661d98..d3ded85 100644 --- a/src/com/garbagemule/MobArena/MACommands.java +++ b/src/com/garbagemule/MobArena/MACommands.java @@ -170,6 +170,19 @@ public class MACommands implements CommandExecutor return true; } + // ma protect true/false + if (cmd.equals("protect")) + { + if (!arg.equals("true") && !arg.equals("false")) + return false; + + // Set the boolean + ArenaManager.isProtected = Boolean.valueOf(arg); + + ArenaManager.tellPlayer(p, "Region protection: " + arg); + return true; + } + return false; } } \ No newline at end of file diff --git a/src/com/garbagemule/MobArena/MASpawnThread.java b/src/com/garbagemule/MobArena/MASpawnThread.java index c587522..124193f 100644 --- a/src/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/com/garbagemule/MobArena/MASpawnThread.java @@ -5,6 +5,7 @@ import java.util.Random; import org.bukkit.Location; import org.bukkit.entity.Slime; import org.bukkit.entity.Player; +import org.bukkit.entity.Creature; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.CreatureType; @@ -25,11 +26,16 @@ public class MASpawnThread implements Runnable private int wave, noOfSpawnPoints, noOfPlayers; private int dZombies, dSkeletons, dSpiders, dCreepers; private Random random; + private Player target; + private Object[] playerArray; + private String reward, currentRewards; public MASpawnThread() { + // Turn the set into an array for lookup with random numbers. + playerArray = ArenaManager.playerSet.toArray(); + noOfPlayers = playerArray.length; noOfSpawnPoints = ArenaManager.spawnpoints.size(); - noOfPlayers = ArenaManager.playerSet.size(); wave = 1; random = new Random(); @@ -41,10 +47,7 @@ public class MASpawnThread implements Runnable } public void run() - { - String reward; - String currentRewards; - + { // Check if we need to grant more rewards with the recurrent waves. for (Integer i : ArenaManager.everyWaveMap.keySet()) { @@ -98,9 +101,9 @@ public class MASpawnThread implements Runnable Location loc; int ran; - for (int i = 0; i < wave+noOfPlayers; i++) + for (int i = 0; i < wave + noOfPlayers; i++) { - loc = ArenaManager.spawnpoints.get(random.nextInt(noOfSpawnPoints)); + loc = ArenaManager.spawnpoints.get(i % noOfSpawnPoints); ran = random.nextInt(dCreepers); CreatureType mob; @@ -117,6 +120,11 @@ public class MASpawnThread implements Runnable LivingEntity e = ArenaManager.world.spawnCreature(loc,mob); ArenaManager.monsterSet.add(e); + + // Grab a random target. + ran = random.nextInt(noOfPlayers); + Creature c = (Creature) e; + c.setTarget((Player)playerArray[ran]); } } @@ -128,7 +136,7 @@ public class MASpawnThread implements Runnable Location loc; CreatureType mob; - int count; + int ran, count; boolean lightning = false; boolean slime = false; @@ -164,18 +172,27 @@ public class MASpawnThread implements Runnable for (int i = 0; i < count; i++) { - loc = ArenaManager.spawnpoints.get(random.nextInt(noOfSpawnPoints)); + loc = ArenaManager.spawnpoints.get(i % noOfSpawnPoints); LivingEntity e = ArenaManager.world.spawnCreature(loc,mob); - if (lightning) - { - ArenaManager.world.strikeLightningEffect(loc); - e.setFireTicks(0); - e.setHealth(20); - } - if (slime) ((Slime)e).setSize(2); - ArenaManager.monsterSet.add(e); + + if (slime) ((Slime)e).setSize(2); + + // Slimes can't have targets, apparently. + if (!(e instanceof Creature)) + continue; + + // Grab a random target. + ran = random.nextInt(noOfPlayers); + Creature c = (Creature) e; + c.setTarget((Player)playerArray[ran]); + } + + // Lightning, just for effect ;) + for (Location l : ArenaManager.spawnpoints) + { + ArenaManager.world.strikeLightningEffect(l); } } } \ No newline at end of file diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index 4bb2a05..2672f7f 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -196,7 +196,7 @@ public class MAUtils c.setProperty("classes.Knight.armor", "306,307,308,309"); c.setProperty("classes.Tank.items", "iron_sword, grilled_pork:2"); c.setProperty("classes.Tank.armor", "310,311,312,313"); - c.setProperty("classes.Oddjob.items", "stone_sword, flint_and_steal, netherrack:2, wood_door, fishing_rod, apple, grilled_pork:3"); + c.setProperty("classes.Oddjob.items", "stone_sword, flint_and_steel, netherrack:2, wood_pickaxe, wood_door, fishing_rod, apple, grilled_pork:3"); c.setProperty("classes.Oddjob.armor", "298,299,300,301"); c.setProperty("classes.Chef.items", "stone_sword, bread:6, grilled_pork:4, mushroom_soup, cake:3, cookie:12"); c.setProperty("classes.Chef.armor", "314,315,316,317");