diff --git a/MobArena.jar b/MobArena.jar index b402b24..55cd7af 100644 Binary files a/MobArena.jar and b/MobArena.jar differ diff --git a/src/com/garbagemule/MobArena/Arena.java b/src/com/garbagemule/MobArena/Arena.java index a42a65a..5709564 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -63,7 +63,7 @@ public class Arena protected boolean edit, waveClear, detCreepers, detDamage, lightning, hellhounds, specOnDeath, shareInArena; protected Location p1, p2, l1, l2, arenaLoc, lobbyLoc, spectatorLoc; - protected Map spawnpoints, containers; + protected Map spawnpoints, spawnpointsBoss, containers; protected String logging; // Wave/reward/entryfee fields @@ -814,6 +814,7 @@ public class Arena lobbyLoc = MAUtils.getArenaCoord(config, world, configName, "lobby"); spectatorLoc = MAUtils.getArenaCoord(config, world, configName, "spectator"); spawnpoints = MAUtils.getArenaSpawnpoints(config, world, configName); + spawnpointsBoss = MAUtils.getArenaBossSpawnpoints(config, world, configName); containers = MAUtils.getArenaContainers(config, world, configName); // NEW WAVES @@ -853,6 +854,8 @@ public class Arena if (spectatorLoc != null) config.setProperty(coords + "spectator", MAUtils.makeCoord(spectatorLoc)); for (Map.Entry entry : spawnpoints.entrySet()) config.setProperty(coords + "spawnpoints." + entry.getKey(), MAUtils.makeCoord(entry.getValue())); + for (Map.Entry entry : spawnpointsBoss.entrySet()) + config.setProperty(coords + "spawnpoints." + entry.getKey(), MAUtils.makeCoord(entry.getValue())); config.save(); } @@ -1035,36 +1038,23 @@ public class Arena public List getAllSpawnpoints() { - return new ArrayList(spawnpoints.values()); + ArrayList result = new ArrayList(spawnpoints.size() + spawnpointsBoss.size()); + result.addAll(spawnpoints.values()); + result.addAll(spawnpointsBoss.values()); + return result; } public List getSpawnpoints() { - List result = new ArrayList(spawnpoints.size()); - - for (Map.Entry entry : spawnpoints.entrySet()) - if (!entry.getKey().matches("^*boss*$")) - result.add(entry.getValue()); - - return !result.isEmpty() ? result : new ArrayList(spawnpoints.values()); + return new ArrayList(spawnpoints.values()); } public Location getBossSpawnpoint() { - Location result = null; + if (spawnpointsBoss.isEmpty()) + return getSpawnpoints().get(0); - for (Map.Entry entry : spawnpoints.entrySet()) - { - if (!entry.getKey().matches("^*boss*$")) continue; - - result = entry.getValue(); - break; - } - - if (result != null) - return result; - - return WaveUtils.getValidSpawnpoints(this, arenaPlayers).iterator().next(); + return new ArrayList(spawnpointsBoss.values()).get(MobArena.random.nextInt(spawnpointsBoss.size())); } public int getPlayerCount() diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index fcf5180..aeec2b8 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -171,7 +171,23 @@ public class MAUtils return spawnpoints; for (String point : config.getKeys(arenaPath)) - spawnpoints.put(point, makeLocation(world, config.getString(arenaPath + "." + point))); + if (!point.matches("^(.)*boss(.)*$")) + spawnpoints.put(point, makeLocation(world, config.getString(arenaPath + "." + point))); + + return spawnpoints; + } + + public static Map getArenaBossSpawnpoints(Configuration config, World world, String arena) + { + Map spawnpoints = new HashMap(); + String arenaPath = "arenas." + arena + ".coords.spawnpoints"; + + if (config.getKeys(arenaPath) == null) + return spawnpoints; + + for (String point : config.getKeys(arenaPath)) + if (point.matches("^(.)*boss(.)*$")) + spawnpoints.put(point, makeLocation(world, config.getString(arenaPath + "." + point))); return spawnpoints; }