mirror of
https://github.com/garbagemule/MobArena.git
synced 2025-02-16 20:41:56 +01:00
Added support for per-class permissions
This commit is contained in:
parent
2a7ae506e4
commit
422518ea4e
BIN
MobArena.jar
BIN
MobArena.jar
Binary file not shown.
@ -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<Integer,List<ItemStack>> everyWaveMap, afterWaveMap;
|
||||
protected Map<Player,String> classMap;
|
||||
protected Map<String,List<ItemStack>> classItems, classArmor;
|
||||
protected Map<String,List<String>> classPerms;
|
||||
protected Map<Player,List<PermissionAttachment>> attachments;
|
||||
protected List<ItemStack> entryFee;
|
||||
|
||||
// Player sets
|
||||
@ -137,6 +140,7 @@ public class Arena
|
||||
randoms = new HashSet<Player>();
|
||||
repairables = new LinkedList<Repairable>();
|
||||
containables = new LinkedList<Repairable>();
|
||||
attachments = new HashMap<Player,List<PermissionAttachment>>();
|
||||
|
||||
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<String> permissions = classPerms.get(classMap.get(p));
|
||||
if (permissions == null || permissions.isEmpty()) return;
|
||||
|
||||
attachments.put(p, new LinkedList<PermissionAttachment>());
|
||||
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);
|
||||
|
@ -30,7 +30,8 @@ public class ArenaMaster //implements Master
|
||||
// Classes
|
||||
protected List<String> classes;
|
||||
protected Map<String,List<ItemStack>> classItems, classArmor;
|
||||
protected Map<Integer,Map<Player,List<ItemStack>>> classBonuses;
|
||||
protected Map<String,List<String>> classPerms;
|
||||
//protected Map<Integer,Map<Player,List<ItemStack>>> classBonuses;
|
||||
protected Map<Player,Arena> 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -205,6 +205,18 @@ public class MAUtils
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Map<String,List<String>> getClassPerms(Configuration config)
|
||||
{
|
||||
Map<String,List<String>> result = new HashMap<String,List<String>>();
|
||||
List<String> 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<ItemStack> getEntryFee(Configuration config, String arena)
|
||||
{
|
||||
return makeItemStackList(config.getString("arenas." + arena + ".settings.entry-fee", null));
|
||||
|
Loading…
Reference in New Issue
Block a user