diff options
Diffstat (limited to 'EssentialsGroupManager/src/org')
19 files changed, 848 insertions, 309 deletions
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java index 68253eccc..153221ed9 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java @@ -117,4 +117,4 @@ public class GMConfiguration { } GroupManager.logger.setLevel(Level.INFO); } -} +}
\ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 890af718b..e0a29f509 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -5,6 +5,7 @@ package org.anjocaido.groupmanager; import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler; +import org.anjocaido.groupmanager.permissions.BukkitPermissions; import org.anjocaido.groupmanager.utils.GroupManagerPermissions; import org.anjocaido.groupmanager.data.Variables; import org.anjocaido.groupmanager.data.User; @@ -32,6 +33,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPlugin; +@SuppressWarnings("unused") /** * * @author gabrielcouto @@ -44,15 +46,23 @@ public class GroupManager extends JavaPlugin { private ScheduledThreadPoolExecutor scheduler; private Map<String, ArrayList<User>> overloadedUsers = new HashMap<String, ArrayList<User>>(); private Map<CommandSender, String> selectedWorlds = new HashMap<CommandSender, String>(); - private WorldsHolder worldsHolder; + private static WorldsHolder worldsHolder; private boolean validateOnlinePlayer = true; private boolean isReady = false; + public static boolean isLoaded = false; private GMConfiguration config; - private GMLoggerHandler ch; + private GMLoggerHandler ch; + public static BukkitPermissions BukkitPermissions; public static final Logger logger = Logger.getLogger(GroupManager.class.getName()); + + //PERMISSIONS FOR COMMAND BEING LOADED + OverloadedWorldHolder dataHolder = null; + AnjoPermissionsHandler permissionHandler = null; @Override public void onDisable() { + isLoaded = false; + if (worldsHolder != null) { worldsHolder.saveChanges(); } @@ -60,7 +70,7 @@ public class GroupManager extends JavaPlugin { // EXAMPLE: Custom code, here we just output some info so we can check all is well PluginDescriptionFile pdfFile = this.getDescription(); System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!"); - GroupManager.logger.removeHandler(ch); + GroupManager.logger.removeHandler(ch); } @Override @@ -81,8 +91,11 @@ public class GroupManager extends JavaPlugin { this.getServer().getPluginManager().disablePlugin(this); throw new IllegalStateException("An error ocurred while loading GroupManager"); } + + BukkitPermissions = new BukkitPermissions(this); enableScheduler(); + isLoaded = true; System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!"); } @@ -109,7 +122,7 @@ public class GroupManager extends JavaPlugin { @Override public void run() { - GroupManager.this.worldsHolder.saveChanges(); + GroupManager.worldsHolder.saveChanges(); } }; scheduler = new ScheduledThreadPoolExecutor(1); @@ -152,7 +165,7 @@ public class GroupManager extends JavaPlugin { worldsHolder.reloadAll(); } - public WorldsHolder getWorldsHolder() { + public static WorldsHolder getWorldsHolder() { return worldsHolder; } @@ -166,7 +179,7 @@ public class GroupManager extends JavaPlugin { } /** - * A simple interface, for ones that don't want to mess with overloading. + * A simple interface, for ones that don't want to mess with overloading. * Yet it is affected by overloading. But seamless. * @return the dataholder with all information */ @@ -176,8 +189,8 @@ public class GroupManager extends JavaPlugin { } /** - * Use this if you want to play with overloading. - * @return a dataholder with overloading interface + * Use this if you want to play with overloading. + * @return a dataholder with overloading interface */ @Deprecated public OverloadedWorldHolder getOverloadedClassData() { @@ -186,10 +199,11 @@ public class GroupManager extends JavaPlugin { /** * Called when a command registered by this plugin is received. - * @param sender - * @param cmd + * @param sender + * @param cmd * @param args */ + @SuppressWarnings({"null", "deprecation"}) @Override public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { boolean playerCanDo = false; @@ -212,8 +226,8 @@ public class GroupManager extends JavaPlugin { } //PERMISSIONS FOR COMMAND BEING LOADED - OverloadedWorldHolder dataHolder = null; - AnjoPermissionsHandler permissionHandler = null; + dataHolder = null; + permissionHandler = null; if (senderPlayer != null) { dataHolder = worldsHolder.getWorldData(senderPlayer); @@ -246,9 +260,9 @@ public class GroupManager extends JavaPlugin { } catch (Exception e) { //this error happened once with someone. now im prepared... i think GroupManager.logger.severe("==================================================="); - GroupManager.logger.severe("= ERROR REPORT START ="); + GroupManager.logger.severe("= ERROR REPORT START ="); GroupManager.logger.severe("==================================================="); - GroupManager.logger.severe("= COPY AND PASTE THIS TO GROUPMANAGER DEVELOPER ="); + GroupManager.logger.severe("= COPY AND PASTE THIS TO GROUPMANAGER DEVELOPER ="); GroupManager.logger.severe("==================================================="); GroupManager.logger.severe(this.getDescription().getName()); GroupManager.logger.severe(this.getDescription().getVersion()); @@ -265,7 +279,7 @@ public class GroupManager extends JavaPlugin { GroupManager.logger.severe(val.name()); } GroupManager.logger.severe("==================================================="); - GroupManager.logger.severe("= ERROR REPORT ENDED ="); + GroupManager.logger.severe("= ERROR REPORT ENDED ="); GroupManager.logger.severe("==================================================="); sender.sendMessage("An error occurred. Ask the admin to take a look at the console."); } @@ -275,13 +289,12 @@ public class GroupManager extends JavaPlugin { case manuadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group>)"); return false; } if (validateOnlinePlayer) { @@ -301,11 +314,29 @@ public class GroupManager extends JavaPlugin { sender.sendMessage(ChatColor.RED + "Group not found!"); return false; } + //VALIDANDO PERMISSAO if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher."); return false; } + if (!isConsole && !senderPlayer.isOp() && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) { + sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher."); + return false; + } + if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) { + sender.sendMessage(ChatColor.RED + "Can't modify player involving a group that you don't inherit."); + return false; + } + if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxUser.getGroup(), auxGroup.getName()) && !permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { + sender.sendMessage(ChatColor.RED + "Can't modify player using groups with different heritage line."); + return false; + } + if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { + sender.sendMessage(ChatColor.RED + "The new group must be a higher rank."); + return false; + } + //PARECE OK auxUser.setGroup(auxGroup); sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "'."); @@ -315,13 +346,12 @@ public class GroupManager extends JavaPlugin { case manudel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); return false; } if (validateOnlinePlayer) { @@ -349,13 +379,15 @@ public class GroupManager extends JavaPlugin { case manuaddsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) { + sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); + sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); + return true; + } } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group>)"); return false; } if (validateOnlinePlayer) { @@ -388,13 +420,12 @@ public class GroupManager extends JavaPlugin { case manudelsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS - if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + if (args.length != 2) { + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manudelsub <user> <group>)"); return false; } if (validateOnlinePlayer) { @@ -422,13 +453,12 @@ public class GroupManager extends JavaPlugin { case mangadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -444,13 +474,12 @@ public class GroupManager extends JavaPlugin { case mangdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -466,13 +495,12 @@ public class GroupManager extends JavaPlugin { case manuaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <permission>)"); return false; } if (validateOnlinePlayer) { @@ -531,13 +559,12 @@ public class GroupManager extends JavaPlugin { case manudelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <permission>)"); return false; } if (validateOnlinePlayer) { @@ -583,13 +610,12 @@ public class GroupManager extends JavaPlugin { case manulistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); return false; } if (validateOnlinePlayer) { @@ -638,13 +664,12 @@ public class GroupManager extends JavaPlugin { case manucheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <permission>)"); return false; } if (validateOnlinePlayer) { @@ -686,13 +711,12 @@ public class GroupManager extends JavaPlugin { case mangaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <permission>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -740,12 +764,12 @@ public class GroupManager extends JavaPlugin { case mangdelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <permission>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -779,13 +803,12 @@ public class GroupManager extends JavaPlugin { case manglistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -828,13 +851,12 @@ public class GroupManager extends JavaPlugin { case mangcheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <permission>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -863,13 +885,12 @@ public class GroupManager extends JavaPlugin { case mangaddi: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group1> <group2>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -889,19 +910,18 @@ public class GroupManager extends JavaPlugin { } //PARECE OK auxGroup.addInherits(auxGroup2); - sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " is now in " + auxGroup.getName() + " inheritance list."); + sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " is now in " + auxGroup.getName() + " inheritance list."); return true; case mangdeli: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group1> <group2>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -925,19 +945,18 @@ public class GroupManager extends JavaPlugin { } //PARECE OK auxGroup.removeInherits(auxGroup2.getName()); - sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " was removed from " + auxGroup.getName() + " inheritance list."); + sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " was removed from " + auxGroup.getName() + " inheritance list."); return true; case manuaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length < 3) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user> <variable> <value>)"); return false; } if (validateOnlinePlayer) { @@ -967,13 +986,12 @@ public class GroupManager extends JavaPlugin { case manudelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user> <variable>)"); return false; } if (validateOnlinePlayer) { @@ -999,13 +1017,12 @@ public class GroupManager extends JavaPlugin { case manulistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user>)"); return false; } if (validateOnlinePlayer) { @@ -1037,13 +1054,12 @@ public class GroupManager extends JavaPlugin { case manucheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user> <variable>)"); return false; } if (validateOnlinePlayer) { @@ -1080,13 +1096,12 @@ public class GroupManager extends JavaPlugin { case mangaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length < 3) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <variable> <value>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1110,13 +1125,12 @@ public class GroupManager extends JavaPlugin { case mangdelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <variable>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1136,13 +1150,12 @@ public class GroupManager extends JavaPlugin { case manglistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1174,13 +1187,12 @@ public class GroupManager extends JavaPlugin { case mangcheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <variable>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1202,13 +1214,12 @@ public class GroupManager extends JavaPlugin { case manwhois: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); return false; } if (validateOnlinePlayer) { @@ -1237,13 +1248,12 @@ public class GroupManager extends JavaPlugin { case tempadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); return false; } if (validateOnlinePlayer) { @@ -1276,13 +1286,12 @@ public class GroupManager extends JavaPlugin { case tempdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); return false; } if (validateOnlinePlayer) { @@ -1317,9 +1326,8 @@ public class GroupManager extends JavaPlugin { case templist: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //WORKING auxString = ""; @@ -1347,9 +1355,8 @@ public class GroupManager extends JavaPlugin { case tempdelall: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //WORKING removeList = new ArrayList<User>(); @@ -1391,9 +1398,8 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //WORKING config.load(); @@ -1416,9 +1422,8 @@ public class GroupManager extends JavaPlugin { case listgroups: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //WORKING auxString = ""; @@ -1433,13 +1438,12 @@ public class GroupManager extends JavaPlugin { case manpromote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group>)"); return false; } if (validateOnlinePlayer) { @@ -1489,13 +1493,12 @@ public class GroupManager extends JavaPlugin { case mandemote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); - return true; + if (!setDefaultWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group>)"); return false; } if (validateOnlinePlayer) { @@ -1575,7 +1578,7 @@ public class GroupManager extends JavaPlugin { return true; case manselect: if (args.length < 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <world>)"); sender.sendMessage(ChatColor.YELLOW + "Worlds available: "); ArrayList<OverloadedWorldHolder> worlds = worldsHolder.allWorldsDataList(); auxString = ""; @@ -1619,6 +1622,26 @@ public class GroupManager extends JavaPlugin { sender.sendMessage(ChatColor.RED + "You are not allowed to use that command."); return false; } + + /** + * Sets up the default world for use. + */ + private boolean setDefaultWorldHandler(CommandSender sender) { + + dataHolder = worldsHolder.getWorldData(worldsHolder.getDefaultWorld().getName()); + permissionHandler = dataHolder.getPermissionsHandler(); + selectedWorlds.put(sender, dataHolder.getName()); + + if ((dataHolder != null) && (permissionHandler != null)) { + sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. Default world '" + worldsHolder.getDefaultWorld().getName() + "' selected."); + return true; + } + + sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); + sender.sendMessage(ChatColor.RED + "Use /manselect <world>"); + return false; + + } /** * @return the config @@ -1633,4 +1656,4 @@ public class GroupManager extends JavaPlugin { public File getBackupFolder() { return backupFolder; } -} +}
\ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java index 3eb7491dd..f17d8b21e 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java @@ -27,7 +27,7 @@ public abstract class DataUnit { } /** - * Every group is matched only by their names and DataSources names. + * Every group is matched only by their names and DataSources names. * @param o * @return true if they are equal. false if not. */ @@ -49,9 +49,6 @@ public abstract class DataUnit { return hash; } - - - /** * @return the dataSource */ @@ -67,10 +64,10 @@ public abstract class DataUnit { } public void flagAsChanged() { - GroupManager.logger.finest("DataSource: "+getDataSource().getName()+" - DataUnit: "+getName()+" flagged as changed!"); -// for(StackTraceElement st: Thread.currentThread().getStackTrace()){ -// GroupManager.logger.finest(st.toString()); -// } + GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as changed!"); +// for(StackTraceElement st: Thread.currentThread().getStackTrace()){ +// GroupManager.logger.finest(st.toString()); +// } changed = true; } @@ -79,7 +76,7 @@ public abstract class DataUnit { } public void flagAsSaved() { - GroupManager.logger.finest("DataSource: "+getDataSource().getName()+" - DataUnit: "+getName()+" flagged as saved!"); + GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as saved!"); changed = false; } @@ -108,7 +105,7 @@ public abstract class DataUnit { return (ArrayList<String>) permissions.clone(); } - public void sortPermissions(){ + public void sortPermissions() { Collections.sort(permissions, StringPermissionComparator.getInstance()); } -} +}
\ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java index c734b208e..7523831e7 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java @@ -4,6 +4,7 @@ */ package org.anjocaido.groupmanager.data; +import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import java.util.ArrayList; import java.util.Map; @@ -30,18 +31,18 @@ public class Group extends DataUnit implements Cloneable { * @param name */ public Group(WorldDataHolder source, String name) { - super(source,name); + super(source, name); } /** - * Clone this group + * Clone this group * @return a clone of this group */ @Override public Group clone() { Group clone = new Group(getDataSource(), this.getName()); clone.inherits = ((ArrayList<String>) this.getInherits().clone()); - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } clone.variables = ((GroupVariables) variables).clone(clone); @@ -52,7 +53,7 @@ public class Group extends DataUnit implements Cloneable { /** * Use this to deliver a group from a different dataSource to another * @param dataSource - * @return + * @return Null or Clone */ public Group clone(WorldDataHolder dataSource) { if (dataSource.groupExists(this.getName())) { @@ -60,7 +61,7 @@ public class Group extends DataUnit implements Cloneable { } Group clone = getDataSource().createGroup(this.getName()); clone.inherits = ((ArrayList<String>) this.getInherits().clone()); - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } clone.variables = variables.clone(clone); @@ -79,7 +80,7 @@ public class Group extends DataUnit implements Cloneable { } /** - * @param inherits the inherits to set + * @param inherit the inherits to set */ public void addInherits(Group inherit) { if (!this.getDataSource().groupExists(inherit.getName())) { @@ -89,6 +90,8 @@ public class Group extends DataUnit implements Cloneable { inherits.add(inherit.getName().toLowerCase()); } flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } public boolean removeInherits(String inherit) { @@ -108,15 +111,17 @@ public class Group extends DataUnit implements Cloneable { } /** - * + * * @param varList */ public void setVariables(Map<String, Object> varList) { GroupVariables temp = new GroupVariables(this, varList); variables.clearVars(); - for(String key: temp.getVarKeyList()){ + for (String key : temp.getVarKeyList()) { variables.addVar(key, temp.getVarObject(key)); } flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java index 87c34de2b..4775eac1f 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java @@ -45,7 +45,7 @@ public class GroupVariables extends Variables implements Cloneable { } /** - * A clone of all vars here. + * A clone of all vars here. * @return */ protected GroupVariables clone(Group newOwner) { diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java index ceecbfa21..e9bf79aa9 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java @@ -4,8 +4,10 @@ */ package org.anjocaido.groupmanager.data; -import com.sun.org.apache.bcel.internal.generic.AALOAD; +//import com.sun.org.apache.bcel.internal.generic.AALOAD; import java.util.ArrayList; + +import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import java.util.Map; @@ -27,13 +29,12 @@ public class User extends DataUnit implements Cloneable { */ private UserVariables variables = new UserVariables(this); - /** * * @param name */ public User(WorldDataHolder source, String name) { - super(source,name); + super(source, name); this.group = source.getDefaultGroup().getName(); } @@ -45,7 +46,7 @@ public class User extends DataUnit implements Cloneable { public User clone() { User clone = new User(getDataSource(), this.getName()); clone.group = this.group; - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } //clone.variables = this.variables.clone(); @@ -68,7 +69,7 @@ public class User extends DataUnit implements Cloneable { } else { clone.setGroup(this.getGroupName()); } - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } //clone.variables = this.variables.clone(); @@ -103,6 +104,8 @@ public class User extends DataUnit implements Cloneable { public void setGroup(String group) { this.group = group; flagAsChanged(); + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) + GroupManager.BukkitPermissions.updateAllPlayers(); } /** @@ -115,45 +118,55 @@ public class User extends DataUnit implements Cloneable { group = getDataSource().getGroup(group.getName()); this.group = group.getName(); flagAsChanged(); + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) + GroupManager.BukkitPermissions.updateAllPlayers(); } - public void addSubGroup(Group subGroup){ - if(this.group.equalsIgnoreCase(subGroup.getName())){ + public void addSubGroup(Group subGroup) { + if (this.group.equalsIgnoreCase(subGroup.getName())) { return; } if (!this.getDataSource().groupExists(subGroup.getName())) { getDataSource().addGroup(subGroup); - } + } subGroup = getDataSource().getGroup(subGroup.getName()); removeSubGroup(subGroup); subGroups.add(subGroup.getName()); flagAsChanged(); + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) + GroupManager.BukkitPermissions.updateAllPlayers(); } - public int subGroupsSize(){ + + public int subGroupsSize() { return subGroups.size(); } - public boolean isSubGroupsEmpty(){ + + public boolean isSubGroupsEmpty() { return subGroups.isEmpty(); } - public boolean containsSubGroup(Group subGroup){ + + public boolean containsSubGroup(Group subGroup) { return subGroups.contains(subGroup.getName()); } - public boolean removeSubGroup(Group subGroup){ - try{ - if(subGroups.remove(subGroup.getName())){ + + public boolean removeSubGroup(Group subGroup) { + try { + if (subGroups.remove(subGroup.getName())) { flagAsChanged(); + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) + GroupManager.BukkitPermissions.updateAllPlayers(); return true; } - } catch (Exception e){ - + } catch (Exception e) { } return false; } - public ArrayList<Group> subGroupListCopy(){ + + public ArrayList<Group> subGroupListCopy() { ArrayList<Group> val = new ArrayList<Group>(); - for(String gstr: subGroups){ + for (String gstr : subGroups) { Group g = getDataSource().getGroup(gstr); - if(g==null){ + if (g == null) { removeSubGroup(g); continue; } @@ -161,7 +174,8 @@ public class User extends DataUnit implements Cloneable { } return val; } - public ArrayList<String> subGroupListStringCopy(){ + + public ArrayList<String> subGroupListStringCopy() { return (ArrayList<String>) subGroups.clone(); } @@ -179,9 +193,11 @@ public class User extends DataUnit implements Cloneable { public void setVariables(Map<String, Object> varList) { UserVariables temp = new UserVariables(this, varList); variables.clearVars(); - for(String key: temp.getVarKeyList()){ + for (String key : temp.getVarKeyList()) { variables.addVar(key, temp.getVarObject(key)); } flagAsChanged(); + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) + GroupManager.BukkitPermissions.updateAllPlayers(); } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java index 45dfc31e7..3f3a6c374 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java @@ -2,7 +2,6 @@ * To change this template, choose Tools | Templates * and open the template in the editor. */ - package org.anjocaido.groupmanager.data; import java.util.Map; @@ -11,19 +10,23 @@ import java.util.Map; * * @author gabrielcouto */ -public class UserVariables extends Variables{ +public class UserVariables extends Variables { + private User owner; - public UserVariables(User owner){ + + public UserVariables(User owner) { super(owner); this.owner = owner; } + public UserVariables(User owner, Map<String, Object> varList) { super(owner); this.variables = varList; this.owner = owner; } + /** - * A clone of all vars here. + * A clone of all vars here. * @return */ protected UserVariables clone(User newOwner) { @@ -34,6 +37,7 @@ public class UserVariables extends Variables{ newOwner.flagAsChanged(); return clone; } + /** * @return the owner */ @@ -41,5 +45,4 @@ public class UserVariables extends Variables{ public User getOwner() { return owner; } - } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java index 31ed0d795..547e6266d 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java @@ -19,12 +19,14 @@ import java.util.Set; * @author gabrielcouto */ public abstract class Variables implements Cloneable { + private DataUnit owner; protected Map<String, Object> variables = new HashMap<String, Object>(); - public Variables(DataUnit owner){ + public Variables(DataUnit owner) { this.owner = owner; } + /** * Add var to the the INFO node. * examples: @@ -45,7 +47,7 @@ public abstract class Variables implements Cloneable { } /** - * Returns the object inside the var + * Returns the object inside the var * @param name * @return a Object if exists. null if doesn't exists */ @@ -112,7 +114,7 @@ public abstract class Variables implements Cloneable { } /** - * All variable keys this is holding + * All variable keys this is holding * @return */ public Set<String> getVarKeyList() { @@ -122,7 +124,7 @@ public abstract class Variables implements Cloneable { } /** - * verify is a var exists + * verify is a var exists * @param name the key name of the var * @return true if that var exists */ @@ -174,7 +176,7 @@ public abstract class Variables implements Cloneable { } - public void clearVars(){ + public void clearVars() { variables.clear(); owner.flagAsChanged(); } @@ -186,7 +188,7 @@ public abstract class Variables implements Cloneable { return owner; } - public boolean isEmpty(){ + public boolean isEmpty() { return variables.isEmpty(); } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java index f735ff5e6..42c78cccf 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java @@ -25,6 +25,7 @@ public class OverloadedWorldHolder extends WorldDataHolder { * * @param ph */ + @SuppressWarnings("deprecation") public OverloadedWorldHolder(WorldDataHolder ph) { super(ph.getName()); this.f = ph.f; @@ -135,7 +136,7 @@ public class OverloadedWorldHolder extends WorldDataHolder { } /** - * + * * @return */ @Override @@ -185,7 +186,7 @@ public class OverloadedWorldHolder extends WorldDataHolder { } /** - * Gets the user in normal state. Surpassing the overload state. + * Gets the user in normal state. Surpassing the overload state. * It doesn't affect permissions. But it enables plugins change the * actual user permissions even in overload mode. * @param userName @@ -201,4 +202,4 @@ public class OverloadedWorldHolder extends WorldDataHolder { User newUser = createUser(userName); return newUser; } -} +}
\ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java index ac26138c4..77d933fa0 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java @@ -42,7 +42,7 @@ public class WorldDataHolder { */ protected String name; /** - * The actual groups holder + * The actual groups holder */ protected Map<String, Group> groups = new HashMap<String, Group>(); /** @@ -50,7 +50,7 @@ public class WorldDataHolder { */ protected Map<String, User> users = new HashMap<String, User>(); /** - * Points to the default group + * Points to the default group */ protected Group defaultGroup = null; /** @@ -81,7 +81,7 @@ public class WorldDataHolder { protected boolean haveGroupsChanged = false; /** - * Prevent direct instantiation + * Prevent direct instantiation * @param worldName */ protected WorldDataHolder(String worldName) { @@ -90,7 +90,7 @@ public class WorldDataHolder { /** * The main constructor for a new WorldDataHolder - * Please don't set the default group as null + * Please don't set the default group as null * @param worldName * @param defaultGroup the default group. its good to start with one */ @@ -116,7 +116,7 @@ public class WorldDataHolder { } /** - * Add a user to the list. If it already exists, overwrite the old. + * Add a user to the list. If it already exists, overwrite the old. * @param theUser the user you want to add to the permission list */ public void addUser(User theUser) { @@ -158,7 +158,7 @@ public class WorldDataHolder { } /** - * Change the default group of the file. + * Change the default group of the file. * @param group the group you want make default. */ public void setDefaultGroup(Group group) { @@ -170,7 +170,7 @@ public class WorldDataHolder { } /** - * Returns the default group of the file + * Returns the default group of the file * @return the default group */ public Group getDefaultGroup() { @@ -178,7 +178,7 @@ public class WorldDataHolder { } /** - * Returns a group of the given name + * Returns a group of the given name * @param groupName the name of the group * @return a group if it is found. null if not found. */ @@ -187,7 +187,7 @@ public class WorldDataHolder { } /** - * Check if a group exists. + * Check if a group exists. * Its the same of getGroup, but check if it is null. * @param groupName the name of the group * @return true if exists. false if not. @@ -210,7 +210,7 @@ public class WorldDataHolder { } /** - * Remove the group to the list + * Remove the group to the list * @param groupName * @return true if had something to remove. false the group was default or non-existant */ @@ -277,7 +277,7 @@ public class WorldDataHolder { } /** - * reads the file again + * reads the file again */ public void reload() { try { @@ -301,13 +301,14 @@ public class WorldDataHolder { } /** - * Returns a data holder for the given file + * Returns a data holder for the given file * @param worldName * @param file * @return * @throws Exception * @deprecated */ + @SuppressWarnings({"rawtypes", "unchecked"}) @Deprecated public static WorldDataHolder load(String worldName, File file) throws Exception { WorldDataHolder ph = new WorldDataHolder(worldName); @@ -387,7 +388,7 @@ public class WorldDataHolder { } } catch (Exception ex) { ex.printStackTrace(); - throw new Exception("Your Permissions config file is invalid. See console for details."); + throw new Exception("Your Permissions config file is invalid. See console for details."); } if (ph.defaultGroup == null) { throw new IllegalArgumentException("There was no Default Group declared."); @@ -409,7 +410,7 @@ public class WorldDataHolder { User thisUser = ph.createUser(usersKey); if (thisUser == null) { GroupManager.logger.warning("I think this user was declared more than once: " + usersKey); - continue; + continue; } if (thisUserNode.get("permissions") == null) { thisUserNode.put("permissions", new ArrayList<String>()); @@ -436,8 +437,8 @@ public class WorldDataHolder { Group hisGroup = ph.getGroup(thisUserNode.get("group").toString()); if (hisGroup == null) { GroupManager.logger.warning("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName()); - thisUser.setGroup(ph.defaultGroup); - } + thisUser.setGroup(ph.defaultGroup); + } thisUser.setGroup(hisGroup); } else { thisUser.setGroup(ph.defaultGroup); @@ -447,7 +448,7 @@ public class WorldDataHolder { } /** - * Returns a data holder for the given file + * Returns a data holder for the given file * @param worldName * @param groupsFile * @param usersFile @@ -455,6 +456,7 @@ public class WorldDataHolder { * @throws FileNotFoundException * @throws IOException */ + @SuppressWarnings({"rawtypes", "unchecked"}) public static WorldDataHolder load(String worldName, File groupsFile, File usersFile) throws FileNotFoundException, IOException { WorldDataHolder ph = new WorldDataHolder(worldName); ph.groupsFile = groupsFile; @@ -539,7 +541,7 @@ public class WorldDataHolder { } } catch (Exception ex) { ex.printStackTrace(); - throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details."); + throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details."); } if (ph.defaultGroup == null) { throw new IllegalArgumentException("There was no Default Group declared."); @@ -576,6 +578,11 @@ public class WorldDataHolder { // PROCESS USERS FILE Map<String, Object> allUsersNode = (Map<String, Object>) usersRootDataNode.get("users"); + + // Stop loading if the file is empty + if (allUsersNode == null) + return ph; + for (String usersKey : allUsersNode.keySet()) { Map<String, Object> thisUserNode = (Map<String, Object>) allUsersNode.get(usersKey); User thisUser = ph.createUser(usersKey); @@ -628,7 +635,9 @@ public class WorldDataHolder { if (thisUserNode.get("group") != null) { Group hisGroup = ph.getGroup(thisUserNode.get("group").toString()); if (hisGroup == null) { - throw new IllegalArgumentException("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName()); + GroupManager.logger.warning("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName() + ": Set to '" + ph.getDefaultGroup().getName() + "'."); + hisGroup = ph.defaultGroup; + //throw new IllegalArgumentException("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName()); } thisUser.setGroup(hisGroup); } else { @@ -639,7 +648,7 @@ public class WorldDataHolder { } /** - * Write a dataHolder in a specified file + * Write a dataHolder in a specified file * @param ph * @param file * @deprecated @@ -726,7 +735,7 @@ public class WorldDataHolder { } /** - * Write a dataHolder in a specified file + * Write a dataHolder in a specified file * @param ph * @param groupsFile */ @@ -761,28 +770,28 @@ public class WorldDataHolder { DumperOptions opt = new DumperOptions(); opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); final Yaml yaml = new Yaml(opt); - try { - yaml.dump(root, new OutputStreamWriter(new FileOutputStream(groupsFile), "UTF-8")); - } catch (UnsupportedEncodingException ex) { - } catch (FileNotFoundException ex) { - } + try { + yaml.dump(root, new OutputStreamWriter(new FileOutputStream(groupsFile), "UTF-8")); + } catch (UnsupportedEncodingException ex) { + } catch (FileNotFoundException ex) { + } /*FileWriter tx = null; try { - tx = new FileWriter(groupsFile, false); - tx.write(yaml.dump(root)); - tx.flush(); + tx = new FileWriter(groupsFile, false); + tx.write(yaml.dump(root)); + tx.flush(); } catch (Exception e) { } finally { - try { - tx.close(); - } catch (IOException ex) { - } + try { + tx.close(); + } catch (IOException ex) { + } }*/ } /** - * Write a dataHolder in a specified file + * Write a dataHolder in a specified file * @param ph * @param usersFile */ @@ -823,22 +832,22 @@ public class WorldDataHolder { DumperOptions opt = new DumperOptions(); opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); final Yaml yaml = new Yaml(opt); - try { - yaml.dump(root, new OutputStreamWriter(new FileOutputStream(usersFile), "UTF-8")); - } catch (UnsupportedEncodingException ex) { - } catch (FileNotFoundException ex) { - } + try { + yaml.dump(root, new OutputStreamWriter(new FileOutputStream(usersFile), "UTF-8")); + } catch (UnsupportedEncodingException ex) { + } catch (FileNotFoundException ex) { + } /*FileWriter tx = null; try { - tx = new FileWriter(usersFile, false); - tx.write(yaml.dump(root)); - tx.flush(); + tx = new FileWriter(usersFile, false); + tx.write(yaml.dump(root)); + tx.flush(); } catch (Exception e) { } finally { - try { - tx.close(); - } catch (IOException ex) { - } + try { + tx.close(); + } catch (IOException ex) { + } }*/ } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java index 83073c10b..a2c34be16 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java @@ -37,7 +37,7 @@ public class WorldsHolder { * Map of mirrors: <nonExistingWorldName, existingAndLoadedWorldName> * The key is the mirror. * The object is the mirrored. - * + * * Mirror shows the same data of mirrored. */ private Map<String, String> mirrors = new HashMap<String, String>(); @@ -63,7 +63,8 @@ public class WorldsHolder { initialWorldLoading(); mirrorSetUp(); } - private void initialWorldLoading(){ + + private void initialWorldLoading() { //LOAD EVERY WORLD POSSIBLE loadWorld(serverDefaultWorldName); defaultWorld = worldsData.get(serverDefaultWorldName); @@ -77,7 +78,9 @@ public class WorldsHolder { } } } - public void mirrorSetUp(){ + + @SuppressWarnings("rawtypes") + public void mirrorSetUp() { mirrors.clear(); Map<String, Object> mirrorsMap = plugin.getConfig().getMirrorsMap(); if (mirrorsMap != null) { @@ -122,7 +125,7 @@ public class WorldsHolder { } /** - * + * */ public void saveChanges() { ArrayList<WorldDataHolder> alreadyDone = new ArrayList<WorldDataHolder>(); @@ -136,7 +139,7 @@ public class WorldsHolder { continue; } if (w.haveGroupsChanged()) { - String groupsFolderName = w.getGroupsFile().getParentFile().getName(); + //String groupsFolderName = w.getGroupsFile().getParentFile().getName(); File backupGroups = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + "_g_" + Tasks.getDateString() + ".yml"); try { Tasks.copy(w.getGroupsFile(), backupGroups); @@ -262,7 +265,7 @@ public class WorldsHolder { File groupsFile = new File(defaultWorldFolder, "groups.yml"); File usersFile = new File(defaultWorldFolder, "users.yml"); File oldDataFile = new File(plugin.getDataFolder(), "data.yml"); - if (!groupsFile.exists()) { + if (!groupsFile.exists() || groupsFile.length() == 0) { if (oldDataFile.exists()) { try { Tasks.copy(oldDataFile, groupsFile); @@ -278,7 +281,7 @@ public class WorldsHolder { } } } - if (!usersFile.exists()) { + if (!usersFile.exists() || usersFile.length() == 0) { if (oldDataFile.exists()) { try { Tasks.copy(oldDataFile, usersFile); @@ -368,7 +371,7 @@ public class WorldsHolder { GroupManager.logger.log(Level.SEVERE, null, ex); return; } - GroupManager.logger.severe("Failed to load world " + worldName + "..."); + //GroupManager.logger.severe("Failed to load world " + worldName + "..."); } } @@ -376,7 +379,7 @@ public class WorldsHolder { * Tells if the such world has been mapped. * * It will return true if world is a mirror. - * + * * @param worldName * @return true if world is loaded or mirrored. false if not listed */ diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index ca223da81..b892e653e 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -13,10 +13,11 @@ import org.anjocaido.groupmanager.data.Group; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import org.anjocaido.groupmanager.data.User; import org.anjocaido.groupmanager.utils.PermissionCheckResult; +import org.anjocaido.groupmanager.utils.PermissionCheckResult.Type; import org.bukkit.entity.Player; /** - * Everything here maintains the model created by Nijikokun + * Everything here maintains the model created by Nijikokun * * But implemented to use GroupManager system. Which provides instant changes, * without file access. @@ -49,7 +50,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Checks if a player can use that permission node. + * Checks if a player can use that permission node. * @param player * @param permission * @return @@ -60,6 +61,16 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** + * Checks if a player can use that permission node. + * @param playerName + * @param permission + * @return + */ + public boolean permission(String playerName, String permission) { + return checkUserPermission(ph.getUser(playerName), permission); + } + + /** * Returns the name of the group of that player name. * @param userName * @return @@ -70,7 +81,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Verify if player is in suck group. + * Verify if player is in suck group. * It will check it's groups inheritance. * * So if you have a group Admin > Moderator @@ -99,6 +110,75 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** + * Gets the appropriate prefix for the user. + * This method is a utility method for chat plugins to get the user's prefix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param user Player's name + * @return Player's prefix + */ + @Override + public String getUserPrefix(String user) { + + String prefix = ph.getUser(user).getVariables().getVarString("prefix"); + if (prefix.length() != 0) { + return prefix; + } + + return getGroupPrefix(getGroup(user)); + } + + /** + * Gets the appropriate prefix for the user. + * This method is a utility method for chat plugins to get the user's prefix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param user Player's name + * @return Player's prefix + */ + @Override + public String getUserSuffix(String user) { + + String suffix = ph.getUser(user).getVariables().getVarString("suffix"); + if (suffix.length() != 0) { + return suffix; + } + + return getGroupSuffix(getGroup(user)); + + } + + /** + * Gets name of the primary group of the user. + * Returns the name of the default group if user has no parent groups, + * or "Default" if there is no default group for that world. + * @param user Player's name + * @return Name of player's primary group + */ + public String getPrimaryGroup(String user) { + + return getGroup(user); + + } + + /** + * Check if user can build. + * @param world Player's world + * @param user Player's name + * @return Whether the user can build + */ + public boolean canUserBuild(String user) { + boolean test = ph.getUser(user).getVariables().getVarBoolean("build"); + + if (test) { + return test; + } + + return canGroupBuild(getGroup(user)); + + } + + /** * Returns the String prefix for the given group * @param groupName * @return empty string if found none. @@ -107,7 +187,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { public String getGroupPrefix(String groupName) { Group g = ph.getGroup(groupName); if (g == null) { - return null; + return ""; } return g.getVariables().getVarString("prefix"); } @@ -121,7 +201,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { public String getGroupSuffix(String groupName) { Group g = ph.getGroup(groupName); if (g == null) { - return null; + return ""; } return g.getVariables().getVarString("suffix"); } @@ -161,7 +241,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * It returns a Integer variable value + * It returns a Integer variable value * It will harvest inheritance for value. * @param groupName * @param variable @@ -619,8 +699,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { @Deprecated public boolean checkGroupPermissionWithInheritance(Group start, String permission, List<Group> alreadyChecked) { PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission); - if (result.resultType.equals(result.resultType.EXCEPTION) - || result.resultType.equals(result.resultType.FOUND)) { + if (result.resultType.equals(Type.EXCEPTION) + || result.resultType.equals(Type.FOUND)) { return true; } return false; @@ -682,8 +762,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { @Deprecated public Group nextGroupWithPermission(Group start, String permission, List<Group> alreadyChecked) { PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission); - if (result.resultType.equals(result.resultType.EXCEPTION) - || result.resultType.equals(result.resultType.FOUND)) { + if (result.resultType.equals(Type.EXCEPTION) + || result.resultType.equals(Type.FOUND)) { return (Group) checkGroupPermissionWithInheritance(start, permission).owner; } return null; @@ -699,7 +779,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @param start * @param alreadyChecked * @return the group that passed on test. null if no group passed. - * @deprecated use the other method with same name, instead + * @deprecated use the other method with same name, instead */ @Deprecated public ArrayList<String> listAllGroupsInherited(Group start, ArrayList<String> alreadyChecked) { @@ -807,9 +887,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @param userName * @return */ + @Override public String[] getGroups(String userName) { ArrayList<String> allGroups = listAllGroupsInherited(ph.getUser(userName).getGroup()); - for(Group subg: ph.getUser(userName).subGroupListCopy()){ + for (Group subg : ph.getUser(userName).subGroupListCopy()) { allGroups.addAll(listAllGroupsInherited(subg)); } String[] arr = new String[allGroups.size()]; @@ -825,6 +906,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @param targerPermission * @return */ + @SuppressWarnings("unused") private Group breadthFirstSearch(Group start, String targerPermission) { if (start == null || targerPermission == null) { return null; @@ -853,4 +935,102 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } return null; } + + @Override + public Group getDefaultGroup() { + return ph.getDefaultGroup(); + } + + @Override + public String getInfoString(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return null; + } + return data.getVariables().getVarString(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return null; + } + return data.getVariables().getVarString(path); + } + } + + @Override + public int getInfoInteger(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarInteger(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarInteger(path); + } + } + + @Override + public double getInfoDouble(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarDouble(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarDouble(path); + } + + } + + @Override + public boolean getInfoBoolean(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return false; + } + return data.getVariables().getVarBoolean(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return false; + } + return data.getVariables().getVarBoolean(path); + } + } + + @Override + public void addUserInfo(String name, String path, Object data) { + ph.getUser(name).getVariables().addVar(path, data); + } + + @Override + public void removeUserInfo(String name, String path) { + ph.getUser(name).getVariables().removeVar(path); + } + + @Override + public void addGroupInfo(String name, String path, Object data) { + ph.getGroup(name).getVariables().addVar(path, data); + } + + @Override + public void removeGroupInfo(String name, String path) { + ph.getGroup(name).getVariables().removeVar(path); + } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java new file mode 100644 index 000000000..fe381c127 --- /dev/null +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -0,0 +1,227 @@ +/*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+package org.anjocaido.groupmanager.permissions;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.anjocaido.groupmanager.GroupManager;
+import org.anjocaido.groupmanager.data.User;
+
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Event;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerKickEvent;
+import org.bukkit.event.player.PlayerListener;
+import org.bukkit.event.player.PlayerPortalEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.event.player.PlayerRespawnEvent;
+import org.bukkit.event.player.PlayerTeleportEvent;
+import org.bukkit.event.server.PluginDisableEvent;
+import org.bukkit.event.server.PluginEnableEvent;
+import org.bukkit.event.server.ServerListener;
+import org.bukkit.permissions.Permission;
+import org.bukkit.permissions.PermissionAttachment;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginManager;
+
+
+/**
+ *
+ * BukkitPermissions overrides to force GM reponses to Superperms
+ *
+ * @author ElgarL, based upon PermissionsEX implementation
+ */
+public class BukkitPermissions {
+
+ protected Map<Player, PermissionAttachment> attachments = new HashMap<Player, PermissionAttachment>();
+ protected Set<Permission> registeredPermissions = new HashSet<Permission>();
+ protected Plugin plugin;
+ protected boolean dumpAllPermissions = true;
+ protected boolean dumpMatchedPermissions = true;
+ public boolean player_join = false;
+
+ public BukkitPermissions(Plugin plugin) {
+ this.plugin = plugin;
+
+ this.collectPermissions();
+ this.registerEvents();
+
+ this.updateAllPlayers();
+
+ GroupManager.logger.info("Superperms support enabled.");
+ }
+
+ private void registerEvents() {
+ PluginManager manager = plugin.getServer().getPluginManager();
+
+ PlayerEvents playerEventListener = new PlayerEvents();
+
+ manager.registerEvent(Event.Type.PLAYER_JOIN, playerEventListener, Event.Priority.Normal, plugin);
+ manager.registerEvent(Event.Type.PLAYER_KICK, playerEventListener, Event.Priority.Normal, plugin);
+ manager.registerEvent(Event.Type.PLAYER_QUIT, playerEventListener, Event.Priority.Normal, plugin);
+
+ manager.registerEvent(Event.Type.PLAYER_RESPAWN, playerEventListener, Event.Priority.Normal, plugin);
+ manager.registerEvent(Event.Type.PLAYER_TELEPORT, playerEventListener, Event.Priority.Normal, plugin);
+ manager.registerEvent(Event.Type.PLAYER_PORTAL, playerEventListener, Event.Priority.Normal, plugin);
+
+ ServerListener serverListener = new BukkitEvents();
+
+ manager.registerEvent(Event.Type.PLUGIN_ENABLE, serverListener, Event.Priority.Normal, plugin);
+ manager.registerEvent(Event.Type.PLUGIN_DISABLE, serverListener, Event.Priority.Normal, plugin);
+ }
+
+ private void collectPermissions() {
+ registeredPermissions.clear();
+ for (Plugin bukkitPlugin : Bukkit.getServer().getPluginManager().getPlugins()) {
+ registeredPermissions.addAll(bukkitPlugin.getDescription().getPermissions());
+ }
+ }
+
+ public void updatePermissions(Player player){
+ this.updatePermissions(player, null);
+ }
+
+ public void updatePermissions(Player player, String world) {
+ if (player == null || !this.plugin.isEnabled()) {
+ return;
+ }
+
+ if (!this.attachments.containsKey(player)) {
+ this.attachments.put(player, player.addAttachment(plugin));
+ }
+
+ if(world == null){
+ world = player.getWorld().getName();
+ }
+
+ PermissionAttachment attachment = this.attachments.get(player);
+
+ User user = GroupManager.getWorldsHolder().getWorldData(world).getUser(player.getName());
+ List<String> permissions = user.getGroup().getPermissionList();
+
+ // clear permissions
+ for (String permission : attachment.getPermissions().keySet()) {
+ attachment.unsetPermission(permission);
+ }
+
+ // find matching permissions
+ for (Permission permission : registeredPermissions) {
+ boolean permissionValue = user.getGroup().hasSamePermissionNode(permission.getName());
+ attachment.setPermission(permission, permissionValue);
+ }
+
+ // all permissions
+ for (String permission : permissions) {
+ Boolean value = true;
+ if (permission.startsWith("-")) {
+ permission = permission.substring(1); // cut off -
+ value = false;
+ }
+
+ if (!attachment.getPermissions().containsKey(permission)) {
+ attachment.setPermission(permission, value);
+ }
+ }
+
+ player.recalculatePermissions();
+ /*
+ // List perms for this player
+ GroupManager.logger.info("Attachment Permissions:");
+ for(Map.Entry<String, Boolean> entry : attachment.getPermissions().entrySet()){
+ GroupManager.logger.info(" " + entry.getKey() + " = " + entry.getValue());
+ }
+
+ GroupManager.logger.info("Effective Permissions:");
+ for(PermissionAttachmentInfo info : player.getEffectivePermissions()){
+ GroupManager.logger.info(" " + info.getPermission() + " = " + info.getValue());
+ }
+ */
+ }
+
+ public void updateAllPlayers() {
+ for (Player player : Bukkit.getServer().getOnlinePlayers()) {
+ updatePermissions(player);
+ }
+ }
+
+ protected class PlayerEvents extends PlayerListener {
+
+ @Override
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ player_join = true;
+ Player player = event.getPlayer();
+ //force GM to create the player if they are not already listed.
+ if (GroupManager.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) {
+ player_join = false;
+ updatePermissions(event.getPlayer());
+ } else
+ player_join = false;
+ }
+
+ @Override
+ public void onPlayerPortal(PlayerPortalEvent event) { // will portal into another world
+ if(event.getPlayer().getWorld().equals(event.getTo().getWorld())){ // only if world actually changed
+ return;
+ }
+
+ updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
+ }
+
+ @Override
+ public void onPlayerRespawn(PlayerRespawnEvent event) { // can be respawned in another world
+ updatePermissions(event.getPlayer(), event.getRespawnLocation().getWorld().getName());
+ }
+
+ @Override
+ public void onPlayerTeleport(PlayerTeleportEvent event) { // can be teleported into another world
+ if (!event.getFrom().getWorld().equals(event.getTo().getWorld())) { // only if world actually changed
+ updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
+ }
+ }
+
+ @Override
+ public void onPlayerQuit(PlayerQuitEvent event) {
+ attachments.remove(event.getPlayer());
+ }
+
+ @Override
+ public void onPlayerKick(PlayerKickEvent event) {
+ attachments.remove(event.getPlayer());
+ }
+ }
+
+ protected class BukkitEvents extends ServerListener {
+
+ @Override
+ public void onPluginEnable(PluginEnableEvent event) {
+ collectPermissions();
+ updateAllPlayers();
+ }
+
+ @Override
+ public void onPluginDisable(PluginDisableEvent event) {
+ collectPermissions();
+ updateAllPlayers();
+ }
+ }
+
+}
\ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java index 90194cddd..ede097ea4 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java @@ -1,10 +1,15 @@ package org.anjocaido.groupmanager.permissions; +//import java.util.Collection; +//import java.util.Map; +//import java.util.Set; +import org.anjocaido.groupmanager.data.Group; +//import org.anjocaido.groupmanager.data.User; import org.bukkit.entity.Player; /** - * Made by Nijikokun. Changed by Gabriel Couto - * + * Made by Nijikokun. Changed by Gabriel Couto + * * This class is intended to *read* permissions from a single world. * * @author Nijikokun @@ -12,7 +17,6 @@ import org.bukkit.entity.Player; */ public abstract class PermissionsReaderInterface { - /** * * @param player @@ -90,7 +94,7 @@ public abstract class PermissionsReaderInterface { public abstract boolean getGroupPermissionBoolean(String string, String string1); /** - * + * * @param string * @param string1 * @return @@ -160,4 +164,69 @@ public abstract class PermissionsReaderInterface { * @return */ public abstract double getPermissionDouble(String string, String string1); + +///////////////////////////// + /** + * Gets the appropriate prefix for the user. + * This method is a utility method for chat plugins to get the user's prefix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param world Player's world + * @param user Player's name + * @return Player's prefix + */ + public abstract String getUserPrefix(String user); + + /** + * Gets the appropriate suffix for the user. + * This method is a utility method for chat plugins to get the user's suffix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param world Player's world + * @param user Player's name + * @return Player's suffix + */ + public abstract String getUserSuffix(String user); + + /** + * Returns the group object representing the default group of the given world. + * This method will return null if the object does not exist or the world has no default group. + * @return Group object representing default world, or null if it doesn't exist or is not defined. + */ + public abstract Group getDefaultGroup(); + + /** + * Gets a array of the names of all parent groups in the same world. + * @param name Target user's name + * @return An array containing the names of all parent groups (including ancestors) that are in the same world + */ + public abstract String[] getGroups(String name); + + public abstract String getInfoString(String entryName, String path, boolean isGroup); + //public abstract String getInfoString(String entryName, String path, boolean isGroup, Comparator<String> comparator); + + public abstract int getInfoInteger(String entryName, String path, boolean isGroup); + //public abstract int getInfoInteger(String entryName, String path, boolean isGroup, Comparator<Integer> comparator); + + /** + * Gets a double from the Info node without inheritance. + * @param entryName + * @param path + * @param isGroup + * @return + */ + public abstract double getInfoDouble(String entryName, String path, boolean isGroup); + //public abstract double getInfoDouble(String entryName, String path, boolean isGroup, Comparator<Double> comparator); + + public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup); + //public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup, Comparator<Boolean> comparator); + + public abstract void addUserInfo(String name, String path, Object data); + + public abstract void removeUserInfo(String name, String path); + + public abstract void addGroupInfo(String name, String path, Object data); + + public abstract void removeGroupInfo(String name, String path); +////////////////////////////// } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GMLoggerHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GMLoggerHandler.java index 87b6806ab..87b6806ab 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GMLoggerHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GMLoggerHandler.java diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java index 781f2753c..0262bb33e 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java @@ -9,6 +9,7 @@ package org.anjocaido.groupmanager.utils; * @author gabrielcouto */ public enum GroupManagerPermissions { + manuadd, manudel, manuaddsub, diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java index 3ee6fdf30..88ac48427 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java @@ -11,6 +11,7 @@ import org.anjocaido.groupmanager.data.DataUnit; * @author gabrielcouto */ public class PermissionCheckResult { + /** * It should be the owner of the access level found. * diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java index 2e192118d..ab2fd605b 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java @@ -2,7 +2,6 @@ * To change this template, choose Tools | Templates * and open the template in the editor. */ - package org.anjocaido.groupmanager.utils; import java.util.Comparator; @@ -19,32 +18,32 @@ public class StringPermissionComparator implements Comparator<String> { boolean bp = permB.startsWith("+"); boolean am = permA.startsWith("-"); boolean bm = permB.startsWith("-"); - if(ap&&bp){ + if (ap && bp) { return 0; } - if(ap&&!bp){ + if (ap && !bp) { return -1; } - if(!ap&&bp){ + if (!ap && bp) { return 1; } - if(am&&bm){ + if (am && bm) { return 0; } - if(am&&!bm){ + if (am && !bm) { return -1; } - if(!am&&bm){ + if (!am && bm) { return 1; } return permA.compareToIgnoreCase(permB); } private static StringPermissionComparator instance; - public static StringPermissionComparator getInstance(){ - if(instance==null){ + + public static StringPermissionComparator getInstance() { + if (instance == null) { instance = new StringPermissionComparator(); } return instance; } - } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java index 64bdb6209..579ee72a6 100644..100755 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java @@ -10,7 +10,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.ArrayList; +import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import org.anjocaido.groupmanager.data.Group; @@ -62,48 +62,51 @@ public abstract class Tasks { public static String getDateString() { GregorianCalendar now = new GregorianCalendar(); String date = ""; - date += now.get(GregorianCalendar.DAY_OF_MONTH); + date += now.get(Calendar.DAY_OF_MONTH); date += "-"; - date += now.get(GregorianCalendar.HOUR); + date += now.get(Calendar.HOUR); date += "-"; - date += now.get(GregorianCalendar.MINUTE); + date += now.get(Calendar.MINUTE); return date; } - public static String getStringListInString(List<String> list){ - if(list==null){ + + public static String getStringListInString(List<String> list) { + if (list == null) { return ""; } - String result=""; - for(int i=0;i<list.size();i++){ - result+=list.get(i); - if(i<list.size()-1){ - result+=", "; + String result = ""; + for (int i = 0; i < list.size(); i++) { + result += list.get(i); + if (i < list.size() - 1) { + result += ", "; } } return result; } - public static String getStringArrayInString(String[] list){ - if(list==null){ + + public static String getStringArrayInString(String[] list) { + if (list == null) { return ""; } - String result=""; - for(int i=0;i<list.length;i++){ - result+=list[i]; - if(i<((list.length)-1)){ - result+=", "; + String result = ""; + for (int i = 0; i < list.length; i++) { + result += list[i]; + if (i < ((list.length) - 1)) { + result += ", "; } } return result; } - public static String getGroupListInString(List<Group> list){ - if(list==null){ + + public static String getGroupListInString(List<Group> list) { + if (list == null) { return ""; } - String result=""; - for(int i=0;i<list.size();i++){ - result+=list.get(i).getName(); - if(i<list.size()-1){ - result+=", "; + String result = ""; + for (int i = 0; i < list.size(); i++) { + result += list.get(i).getName(); + if (i < list.size() - 1) { + result += ", "; } } return result; |