diff --git a/MobArena.jar b/MobArena.jar index 8f26aa9..d12806b 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 67ea8f9..a879114 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -40,6 +40,7 @@ import org.bukkit.entity.Slime; import org.bukkit.entity.Wolf; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; +import org.bukkit.permissions.PermissionAttachment; import org.bukkit.util.config.Configuration; import com.garbagemule.MobArena.MAMessages.Msg; @@ -72,6 +73,8 @@ public class Arena protected Map> everyWaveMap, afterWaveMap; protected Map classMap; protected Map> classItems, classArmor; + protected Map> classPerms; + protected Map> attachments; protected List entryFee; // Player sets @@ -137,6 +140,7 @@ public class Arena randoms = new HashSet(); repairables = new LinkedList(); containables = new LinkedList(); + attachments = new HashMap>(); running = false; edit = false; @@ -176,6 +180,7 @@ public class Arena { p.teleport(arenaLoc); p.setHealth(20); + assignClassPermissions(p); } // Copy the singleWaves Set for polling. @@ -619,6 +624,7 @@ public class Arena if (!arenaPlayers.contains(p) && !lobbyPlayers.contains(p)) return; + removeClassPermissions(p); MAUtils.clearInventory(p); restoreInvAndGiveRewards(p); @@ -629,12 +635,10 @@ public class Arena public void repairBlocks() { //long start = System.nanoTime(); - //System.out.println(start + " - Attempting to repair things..."); while (!repairQueue.isEmpty()) { repairQueue.poll().repair(); } - //System.out.println(start + " - Repair finished!"); } public void queueRepairable(Repairable r) @@ -693,6 +697,26 @@ public class Arena MAUtils.tellPlayer(p, Msg.LOBBY_CLASS_PICKED, className); } + 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; + + attachments.put(p, new LinkedList()); + for (String perm : permissions) + attachments.get(p).add(p.addAttachment(plugin, perm, config.getBoolean(path + perm, true))); + } + + public void removeClassPermissions(Player p) + { + for (PermissionAttachment pa : attachments.get(p)) + pa.remove(); + } + private void cleanup() { removeMonsters(); @@ -827,6 +851,7 @@ public class Arena classes = plugin.getAM().classes; classItems = plugin.getAM().classItems; classArmor = plugin.getAM().classArmor; + classPerms = plugin.getAM().classPerms; // Determine if the arena is properly set up. Then add the to arena list. setup = MAUtils.verifyData(this); diff --git a/src/com/garbagemule/MobArena/ArenaMaster.java b/src/com/garbagemule/MobArena/ArenaMaster.java index 00343e6..f398013 100644 --- a/src/com/garbagemule/MobArena/ArenaMaster.java +++ b/src/com/garbagemule/MobArena/ArenaMaster.java @@ -30,7 +30,8 @@ public class ArenaMaster //implements Master // Classes protected List classes; protected Map> classItems, classArmor; - protected Map>> classBonuses; + protected Map> classPerms; + //protected Map>> classBonuses; protected Map arenaMap; // Location map @@ -219,9 +220,10 @@ public class ArenaMaster //implements Master config.setProperty("classes.Chef.items", "stone_sword, bread:6, grilled_pork:4, mushroom_soup, cake:3, cookie:12"); config.setProperty("classes.Chef.armor", "314,315,316,317"); } - classes = config.getKeys("classes"); - classItems = MAUtils.getClassItems(config, "items"); - classArmor = MAUtils.getClassItems(config, "armor"); + classes = config.getKeys("classes"); + classItems = MAUtils.getClassItems(config, "items"); + classArmor = MAUtils.getClassItems(config, "armor"); + classPerms = MAUtils.getClassPerms(config); } /** diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index a2df7be..6912551 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -205,6 +205,18 @@ public class MAUtils return result; } + public static Map> getClassPerms(Configuration config) + { + 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")); + + return result; + } + public static List getEntryFee(Configuration config, String arena) { return makeItemStackList(config.getString("arenas." + arena + ".settings.entry-fee", null));