diff --git a/MobArena.jar b/MobArena.jar index c00f9c8..7f389f8 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 7a48386..7950914 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -76,8 +76,8 @@ public class Arena protected Map> everyWaveMap, afterWaveMap; protected Map classMap; protected Map> classItems, classArmor; - protected Map> classPerms; - protected Map> attachments; + protected Map> classPerms; + protected Map attachments; protected List entryFee; // Player sets @@ -144,7 +144,7 @@ public class Arena randoms = new HashSet(); repairables = new LinkedList(); containables = new LinkedList(); - attachments = new HashMap>(); + attachments = new HashMap(); running = false; edit = false; @@ -603,7 +603,7 @@ public class Arena public void movePlayerToEntry(Player p) { Location entry = locations.get(p); - if (entry == null) return; + if (entry == null || p.isDead()) return; updateChunk(entry); p.teleport(entry); @@ -731,26 +731,22 @@ public class Arena } public void assignClassPermissions(Player p) - { - Configuration config = plugin.getConfig(); - String clazz = classMap.get(p); - String path = "classes." + clazz + ".permissions."; - - List permissions = classPerms.get(classMap.get(p)); - if (permissions == null || permissions.isEmpty()) return; + { + Map perms = classPerms.get(classMap.get(p)); + if (perms == null || perms.isEmpty()) return; - attachments.put(p, new LinkedList()); - for (String perm : permissions) - attachments.get(p).add(p.addAttachment(plugin, perm, config.getBoolean(path + perm, true))); + PermissionAttachment pa = p.addAttachment(plugin); + attachments.put(p,pa); + for (Map.Entry entry : perms.entrySet()) + pa.setPermission(entry.getKey(), entry.getValue()); } public void removeClassPermissions(Player p) { if (attachments.get(p) == null) return; - for (PermissionAttachment pa : attachments.get(p)) - if (pa != null) - pa.remove(); + for (PermissionAttachment pa : attachments.values()) + if (pa != null) pa.remove(); } private void cleanup() diff --git a/src/com/garbagemule/MobArena/ArenaMaster.java b/src/com/garbagemule/MobArena/ArenaMaster.java index b0faf15..fc95a2d 100644 --- a/src/com/garbagemule/MobArena/ArenaMaster.java +++ b/src/com/garbagemule/MobArena/ArenaMaster.java @@ -30,7 +30,7 @@ public class ArenaMaster //implements Master // Classes protected List classes; protected Map> classItems, classArmor; - protected Map> classPerms; + protected Map> classPerms; //protected Map>> classBonuses; protected Map arenaMap; diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index c95ac43..b48a396 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -197,14 +197,30 @@ public class MAUtils return result; } - public static Map> getClassPerms(Configuration config) + public static Map> getClassPerms(Configuration config) { - Map> result = new HashMap>(); + Map> result = new HashMap>(); + List classes = config.getKeys("classes"); if (classes == null) return result; for (String c : classes) - result.put(c, config.getKeys("classes." + c + ".permissions")); + { + // Get all the permissions for the class and return if empty. + List keys = config.getStringList("classes." + c + ".permissions", new LinkedList()); + if (keys.isEmpty()) continue; + + // If the string starts with a hyphen (-), use false. + Map perms = new HashMap(); + for (String p : keys) + { + boolean b = !p.startsWith("-"); + String s = b ? p : p.substring(1); + perms.put(s,b); + } + + result.put(c,perms); + } return result; } diff --git a/src/com/garbagemule/MobArena/waves/MACreature.java b/src/com/garbagemule/MobArena/waves/MACreature.java index 627bad4..e45ad80 100644 --- a/src/com/garbagemule/MobArena/waves/MACreature.java +++ b/src/com/garbagemule/MobArena/waves/MACreature.java @@ -28,6 +28,9 @@ public enum MACreature HUMAN(CreatureType.MONSTER), HUMANS(CreatureType.MONSTER), GIANT(CreatureType.GIANT), GIANTS(CreatureType.GIANT), GHAST(CreatureType.GHAST), GHASTS(CreatureType.GHAST), + ENDERMAN(CreatureType.ENDERMAN), ENDERMEN(CreatureType.ENDERMAN), + CAVESPIDER(CreatureType.CAVE_SPIDER), CAVESPIDERS(CreatureType.CAVE_SPIDER), + SILVERFISH(CreatureType.SILVERFISH), // Passive creatures CHICKEN(CreatureType.CHICKEN), CHICKENS(CreatureType.CHICKEN),