From 276d7a8c11a9b78322f1043f7c8019ec3ff70835 Mon Sep 17 00:00:00 2001 From: Garbage Mule Date: Tue, 31 May 2011 17:11:43 +0200 Subject: [PATCH] 0.72 - wolves, protect and tweaks --- MobArena.jar | Bin 23273 -> 26190 bytes .../garbagemule/MobArena/ArenaManager.java | 2 +- .../garbagemule/MobArena/MABlockListener.java | 22 +++-- src/com/garbagemule/MobArena/MACommands.java | 9 +- .../MobArena/MACreeperListener.java | 24 ------ .../MobArena/MADisconnectListener.java | 40 +++++++++ .../MobArena/MAMonsterListener.java | 77 ++++++++++++++++++ .../garbagemule/MobArena/MASpawnThread.java | 30 ++++--- src/com/garbagemule/MobArena/MAUtils.java | 13 ++- src/com/garbagemule/MobArena/MobArena.java | 10 ++- 10 files changed, 178 insertions(+), 49 deletions(-) delete mode 100644 src/com/garbagemule/MobArena/MACreeperListener.java create mode 100644 src/com/garbagemule/MobArena/MADisconnectListener.java create mode 100644 src/com/garbagemule/MobArena/MAMonsterListener.java diff --git a/MobArena.jar b/MobArena.jar index 44542fca4ed0c28dd6d1665319aa330763ea1bb2..2794e4c41ee0c2a71eb2db3b90b14570a0472670 100644 GIT binary patch delta 19861 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 blockMap = new HashMap(); + for (Block b : event.blockList()) + { + blockMap.put(b, b.getTypeId()); + } + + // Wait a couple of ticks, then rebuild the blocks. + ArenaManager.server.getScheduler().scheduleSyncDelayedTask(plugin, + new Runnable() + { + public void run() + { + for (Block b : blockMap.keySet()) + { + b.getLocation().getBlock().setTypeId(blockMap.get(b)); + } + } + }, 3); + } + } + + // Zombie/skeleton combustion from the sun. + public void onEntityCombust(EntityCombustEvent event) + { + if (ArenaManager.monsterSet.contains(event.getEntity())) + event.setCancelled(true); + } + + // Monsters losing their targets. + public void onEntityTarget(EntityTargetEvent event) + { + if (!ArenaManager.isRunning) + return; + + if (!ArenaManager.monsterSet.contains(event.getEntity())) + return; + + if (event.getReason() == TargetReason.FORGOT_TARGET) + event.setCancelled(true); + } +} \ No newline at end of file diff --git a/src/com/garbagemule/MobArena/MASpawnThread.java b/src/com/garbagemule/MobArena/MASpawnThread.java index 124193f..58f3947 100644 --- a/src/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/com/garbagemule/MobArena/MASpawnThread.java @@ -3,6 +3,7 @@ package com.garbagemule.MobArena; import java.util.List; import java.util.Random; import org.bukkit.Location; +import org.bukkit.entity.Wolf; import org.bukkit.entity.Slime; import org.bukkit.entity.Player; import org.bukkit.entity.Creature; @@ -17,10 +18,9 @@ import org.bukkit.entity.CreatureType; * host chooses. It is possible to create default waves that consist of * only one type of monster, or ones that have no creepers, for example. */ -// TO-DO: Allow custom special wave modulus. +// TO-DO: Allow custom special wave interval. // TO-DO: Allow custom special wave monsters. // TO-DO: Allow additional "default" waves. -// TO-DO: public class MASpawnThread implements Runnable { private int wave, noOfSpawnPoints, noOfPlayers; @@ -48,6 +48,7 @@ public class MASpawnThread implements Runnable public void run() { + long start = System.nanoTime(); // Check if we need to grant more rewards with the recurrent waves. for (Integer i : ArenaManager.everyWaveMap.keySet()) { @@ -91,6 +92,7 @@ public class MASpawnThread implements Runnable } wave++; + System.out.println("Spawns and rewards took " + (System.nanoTime() - start) + " ns"); } /** @@ -124,7 +126,8 @@ public class MASpawnThread implements Runnable // Grab a random target. ran = random.nextInt(noOfPlayers); Creature c = (Creature) e; - c.setTarget((Player)playerArray[ran]); + c.setTarget(MAUtils.getRandomPlayer()); + //c.setTarget((Player)playerArray[ran]); // This is faster, but unstable } } @@ -137,15 +140,15 @@ public class MASpawnThread implements Runnable CreatureType mob; int ran, count; - boolean lightning = false; - boolean slime = false; + boolean slime = false; + boolean wolf = false; - switch (random.nextInt(4)) + // 5 on purpose - Ghasts act weird in Overworld. + switch (random.nextInt(5)) { case 0: mob = CreatureType.CREEPER; count = noOfPlayers * 3; - lightning = true; break; case 1: mob = CreatureType.PIG_ZOMBIE; @@ -153,14 +156,19 @@ public class MASpawnThread implements Runnable break; case 2: mob = CreatureType.SLIME; - count = noOfPlayers * 5; + count = noOfPlayers * 4; slime = true; break; case 3: mob = CreatureType.MONSTER; - count = Math.max(2, noOfPlayers); + count = noOfPlayers + 1; break; case 4: + mob = CreatureType.WOLF; + count = noOfPlayers * 2; + wolf = true; + break; + case 5: mob = CreatureType.GHAST; count = Math.max(1, noOfPlayers - 2); break; @@ -178,6 +186,7 @@ public class MASpawnThread implements Runnable ArenaManager.monsterSet.add(e); if (slime) ((Slime)e).setSize(2); + if (wolf) ((Wolf)e).setAngry(true); // Slimes can't have targets, apparently. if (!(e instanceof Creature)) @@ -186,7 +195,8 @@ public class MASpawnThread implements Runnable // Grab a random target. ran = random.nextInt(noOfPlayers); Creature c = (Creature) e; - c.setTarget((Player)playerArray[ran]); + c.setTarget(MAUtils.getRandomPlayer()); + //c.setTarget((Player)playerArray[ran]); // This is faster, but unstable } // Lightning, just for effect ;) diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index 64f336f..18ef44d 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -459,7 +459,7 @@ public class MAUtils /* ///////////////////////////////////////////////////////////////////// // - VERIFICATION METHODS + MISC METHODS // ///////////////////////////////////////////////////////////////////// */ @@ -493,4 +493,15 @@ public class MAUtils ArenaManager.tellPlayer(p, "MobArena is set up and ready to roll!"); } } + + /** + * Turns the current set of players into an array, and grabs a random + * element out of it. + */ + public static Player getRandomPlayer() + { + Random random = new Random(); + Object[] array = ArenaManager.playerSet.toArray(); + return (Player) array[random.nextInt(array.length)]; + } } \ No newline at end of file diff --git a/src/com/garbagemule/MobArena/MobArena.java b/src/com/garbagemule/MobArena/MobArena.java index 6fe8b63..5412e0b 100644 --- a/src/com/garbagemule/MobArena/MobArena.java +++ b/src/com/garbagemule/MobArena/MobArena.java @@ -38,10 +38,10 @@ public class MobArena extends JavaPlugin PlayerListener dropListener = new MADropListener(this); PlayerListener readyListener = new MAReadyListener(this); PlayerListener teleportListener = new MATeleportListener(this); + PlayerListener discListener = new MADisconnectListener(this); BlockListener blockListener = new MABlockListener(this); - EntityListener creeperListener = new MACreeperListener(this); EntityListener damageListener = new MADamageListener(this); - // TO-DO: PlayerListener to check for player logout during battle. + EntityListener monsterListener = new MAMonsterListener(this); // TO-DO: PlayerListener to check for kills/deaths. // Register events. @@ -49,11 +49,15 @@ public class MobArena extends JavaPlugin pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, dropListener, Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_INTERACT, readyListener, 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.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_EXPLODE, creeperListener, Priority.Normal, this); pm.registerEvent(Event.Type.ENTITY_DAMAGE, 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); System.out.println(pdfFile.getName() + " v" + pdfFile.getVersion() + " initialized." ); }