diff options
author | KHobbits <rob@khobbits.co.uk> | 2013-03-14 18:01:50 +0000 |
---|---|---|
committer | KHobbits <rob@khobbits.co.uk> | 2013-03-14 18:01:50 +0000 |
commit | 20b61a6147751e56e7b9e85e6f4d984b26c8433f (patch) | |
tree | dedfc59e68ff13b5f39274263a3672e859e9bf38 | |
parent | c61abadd91a4883ae9564ff07c263d94396508e4 (diff) | |
parent | f5ed4dd6cd3b1df834d8b7bdaf3b143ee5a3fe24 (diff) | |
download | Essentials-20b61a6147751e56e7b9e85e6f4d984b26c8433f.tar Essentials-20b61a6147751e56e7b9e85e6f4d984b26c8433f.tar.gz Essentials-20b61a6147751e56e7b9e85e6f4d984b26c8433f.tar.lz Essentials-20b61a6147751e56e7b9e85e6f4d984b26c8433f.tar.xz Essentials-20b61a6147751e56e7b9e85e6f4d984b26c8433f.zip |
Merge branch 'groupmanager' of github.com:essentials/Essentials into 2.9
9 files changed, 394 insertions, 224 deletions
diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index f3bc35baa..f7c66782a 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -213,3 +213,10 @@ v 2.0: - Prevent '*' permissions granting the 'groupmanager.noofflineperms' permission.
- Added '/mancheckw <world>' to inspect which permission files a world is referencing.
- Add config potion to set if GM commands should be allowed on CommnandBlocks. + - Catch the error when using an out of date config for 'allow_commandblocks' So it doesn't kill the whole config.
+ - '/manselect' will no longer list duplicate worlds.
+ - Added a new mirroring option in the config of 'all_unnamed_worlds'. This will cause all new or unnamed worlds to use this mirroring.
+ - Don't allow adding a node with '/manuaddp' and '/mangaddp' which is already negated.
+ - Warn when adding a node where an exception already exist.
+ - Only prevent adding nodes with '/manuaddp' and '/mangaddp' if they are exact matches (not wildcards).
+ - Store worldSelection indexed on the senders name rather than the object (fixes commandblocks using manselect).
\ No newline at end of file diff --git a/EssentialsGroupManager/src/config.yml b/EssentialsGroupManager/src/config.yml index 479399bb6..b73671e18 100644 --- a/EssentialsGroupManager/src/config.yml +++ b/EssentialsGroupManager/src/config.yml @@ -4,7 +4,7 @@ settings: # The user will be able to promote players to the same group or even above. opOverrides: true - # Default setting for 'mantoglevalidate' + # Default setting for 'mantogglevalidate' # true will cause GroupManager to attempt name matching by default. validate_toggle: true # ********************************************************************************************************************************** @@ -26,10 +26,11 @@ settings: mirrors: # Worlds listed here have their settings mirrored in their children. - # The first element 'world' is the main worlds name + # The first element 'world' is the main worlds name, and is the parent world. # subsequent elements 'world_nether' and 'world_the_end' are worlds which will use # the same user/groups files as the parent. - # Each child world can be configured to mirror the 'groups', 'users' or both files from it's parent. + # the element 'all_unnamed_worlds' specifies all worlds that aren't listed, and automatically mirrors them to it's parent. + # Each child world can be configured to mirror the 'groups', 'users' or both files from its parent. world: world_nether: - users @@ -37,6 +38,9 @@ settings: world_the_end: - users - groups + all_unnamed_worlds: + - users + - groups # world2: (World2 would have it's own set of user and groups files) # world3: # - users (World3 would use the users.yml from world2, but it's own groups.yml) diff --git a/EssentialsGroupManager/src/globalgroups.yml b/EssentialsGroupManager/src/globalgroups.yml index c3bcfac77..cec4d889d 100644 --- a/EssentialsGroupManager/src/globalgroups.yml +++ b/EssentialsGroupManager/src/globalgroups.yml @@ -195,7 +195,7 @@ groups: - essentials.fly.safelogin
- essentials.getpos
- essentials.getpos.others
- - essentials.helpop.recieve
+ - essentials.helpop.receive
- essentials.home.others
- essentials.invsee
- essentials.jails
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java index e5a24258e..fbf8109f6 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java @@ -85,9 +85,23 @@ public class GMConfiguration { try { Map<String, Object> config = getElement("config", getElement("settings", GMconfig)); - allowCommandBlocks = (Boolean) config.get("allow_commandblocks"); - opOverride = (Boolean) config.get("opOverrides"); - toggleValidate = (Boolean) config.get("validate_toggle"); + try { + allowCommandBlocks = (Boolean) config.get("allow_commandblocks"); + } catch (Exception ex) { + GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'allow_commandblocks' node. Using default settings", ex); + } + + try { + opOverride = (Boolean) config.get("opOverrides"); + } catch (Exception ex) { + GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'opOverrides' node. Using default settings", ex); + } + + try { + toggleValidate = (Boolean) config.get("validate_toggle"); + } catch (Exception ex) { + GroupManager.logger.log(Level.SEVERE, "Missing or corrupt 'validate_toggle' node. Using default settings", ex); + } /* * data node for save/backup timers. diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 14006bf75..6e75b3a8a 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -56,7 +56,7 @@ public class GroupManager extends JavaPlugin { private Runnable commiter; private ScheduledThreadPoolExecutor scheduler; private Map<String, ArrayList<User>> overloadedUsers = new HashMap<String, ArrayList<User>>(); - private Map<CommandSender, String> selectedWorlds = new HashMap<CommandSender, String>(); + private Map<String, String> selectedWorlds = new HashMap<String, String>(); private WorldsHolder worldsHolder; private boolean validateOnlinePlayer = true; @@ -142,7 +142,7 @@ public class GroupManager extends JavaPlugin { * reset local variables. */ overloadedUsers = new HashMap<String, ArrayList<User>>(); - selectedWorlds = new HashMap<CommandSender, String>(); + selectedWorlds = new HashMap<String, String>(); lastError = ""; /* @@ -393,7 +393,8 @@ public class GroupManager extends JavaPlugin { // PREVENT GM COMMANDS BEING USED ON COMMANDBLOCKS if (sender instanceof BlockCommandSender && !isAllowCommandBlocks) { Block block = ((BlockCommandSender)sender).getBlock(); - GroupManager.logger.warning(ChatColor.RED + "GM Commands can not be called from the CommandBlock at location: " + ChatColor.GREEN + block.getWorld().getName() + " - " + block.getX() + ", " + block.getY() + ", " + block.getZ()); + GroupManager.logger.warning(ChatColor.RED + "GM Commands can not be called from CommandBlocks"); + GroupManager.logger.warning(ChatColor.RED + "Location: " + ChatColor.GREEN + block.getWorld().getName() + ", " + block.getX() + ", " + block.getY() + ", " + block.getZ()); return true; } @@ -410,11 +411,10 @@ public class GroupManager extends JavaPlugin { senderGroup = senderUser.getGroup(); isOpOverride = (isOpOverride && (senderPlayer.isOp() || worldsHolder.getWorldPermissions(senderPlayer).has(senderPlayer, "groupmanager.op"))); - System.out.println("[PLAYER_COMMAND] " + senderPlayer.getName() + ": /" + commandLabel + " " + Tasks.join(args, " ")); if (isOpOverride || worldsHolder.getWorldPermissions(senderPlayer).has(senderPlayer, "groupmanager." + cmd.getName())) { playerCanDo = true; } - } else if ((sender instanceof ConsoleCommandSender) || (sender instanceof RemoteConsoleCommandSender)) { + } else if ((sender instanceof ConsoleCommandSender) || (sender instanceof RemoteConsoleCommandSender) || (sender instanceof BlockCommandSender)) { if (!lastError.isEmpty() && !commandLabel.equalsIgnoreCase("manload")) { sender.sendMessage(ChatColor.RED + "All commands are locked due to an error. " + ChatColor.BOLD + "" + ChatColor.UNDERLINE + "Check the log" + ChatColor.RESET + "" + ChatColor.RED + " and then try a '/manload'."); @@ -432,7 +432,7 @@ public class GroupManager extends JavaPlugin { dataHolder = worldsHolder.getWorldData(senderPlayer); } - String selectedWorld = selectedWorlds.get(sender); + String selectedWorld = selectedWorlds.get(sender.getName()); if (selectedWorld != null) { dataHolder = worldsHolder.getWorldData(selectedWorld); } @@ -488,8 +488,8 @@ public class GroupManager extends JavaPlugin { // Validating arguments if ((args.length != 2) && (args.length != 3)) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group> | optional [world])"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manuadd <player> <group> | optional [world])"); + return true; } // Select the relevant world (if specified) @@ -515,7 +515,7 @@ public class GroupManager extends JavaPlugin { } auxGroup = dataHolder.getGroup(args[1]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group not found!"); + sender.sendMessage(ChatColor.RED + "" + args[1] + " Group doesnt exist!"); return false; } if (auxGroup.isGlobal()) { @@ -526,15 +526,15 @@ public class GroupManager extends JavaPlugin { // Validating permissions if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "Can't modify a player with the same permissions as you, or higher."); - return false; + return true; } if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) { sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher."); - return false; + return true; } if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) { sender.sendMessage(ChatColor.RED + "You can't modify a player involving a group that you don't inherit."); - return false; + return true; } // Seems OK @@ -552,8 +552,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manudel <player>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -567,7 +567,7 @@ public class GroupManager extends JavaPlugin { // Validating permission if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher."); - return false; + return true; } // Seems OK dataHolder.removeUser(auxUser.getName()); @@ -591,8 +591,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manuaddsub <player> <group>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -605,13 +605,13 @@ public class GroupManager extends JavaPlugin { } auxGroup = dataHolder.getGroup(args[1]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group not found!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[1] + " Group doesnt exist!"); + return true; } // Validating permission if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher."); - return false; + return true; } // Seems OK if (auxUser.addSubGroup(auxGroup)) @@ -630,7 +630,7 @@ public class GroupManager extends JavaPlugin { // Validating arguments if (args.length != 2) { sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manudelsub <user> <group>)"); - return false; + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -643,14 +643,14 @@ public class GroupManager extends JavaPlugin { } auxGroup = dataHolder.getGroup(args[1]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group not found!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[1] + " Group doesnt exist!"); + return true; } // Validating permission if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher."); - return false; + return true; } // Seems OK auxUser.removeSubGroup(auxGroup); @@ -670,13 +670,13 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangadd <group>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup != null) { - sender.sendMessage(ChatColor.RED + "Group already exists!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group already exist!"); + return true; } // Seems OK auxGroup = dataHolder.createGroup(args[0]); @@ -692,13 +692,13 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangdel <group>)"); return false; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group not exists!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } // Seems OK dataHolder.removeGroup(auxGroup.getName()); @@ -716,9 +716,16 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <permission>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manuaddp <player> <permission>)"); + return true; } + + auxString = args[1]; + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); + } + if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; } @@ -731,41 +738,52 @@ public class GroupManager extends JavaPlugin { // Validating your permissions if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "Can't modify player with same group than you, or higher."); - return false; + return true; } permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]); if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) { sender.sendMessage(ChatColor.RED + "You can't add a permission you don't have."); - return false; + return true; } // Validating permissions of user permissionResult = permissionHandler.checkUserOnlyPermission(auxUser, args[1]); - if (args[1].startsWith("+")) { + if (auxString.startsWith("+")) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) { sender.sendMessage(ChatColor.RED + "The user already has direct access to that permission."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + return true; } - } else if (args[1].startsWith("-")) { + } else if (auxString.startsWith("-")) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) { sender.sendMessage(ChatColor.RED + "The user already has an exception for this node."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + return true; } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { - sender.sendMessage(ChatColor.RED + "The user already has a matching node "); + sender.sendMessage(ChatColor.RED + "The user already has a matching node."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + return true; } } else { - if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND)) { + if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) { + // Warn only while still allowing you to add the node. + sender.sendMessage(ChatColor.RED + "The user already has an exception for this node."); + sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); + } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND)) { sender.sendMessage(ChatColor.RED + "The user already has direct access to that permission."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + if (permissionResult.accessLevel.equalsIgnoreCase(args[1])) + { + return true; + } + } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { + // Warn only while still allowing you to add the node. + sender.sendMessage(ChatColor.RED + "The user already has a matching Negated node."); + sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); } } // Seems OK - auxUser.addPermission(args[1]); - sender.sendMessage(ChatColor.YELLOW + "You added '" + args[1] + "' to player '" + auxUser.getName() + "' permissions."); + auxUser.addPermission(auxString); + sender.sendMessage(ChatColor.YELLOW + "You added '" + auxString + "' to player '" + auxUser.getName() + "' permissions."); targetPlayer = this.getServer().getPlayer(auxUser.getName()); if (targetPlayer != null) @@ -781,9 +799,16 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <permission>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manudelp <player> <permission>)"); + return true; + } + + auxString = args[1]; + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); } + if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; } @@ -796,27 +821,27 @@ public class GroupManager extends JavaPlugin { // Validating your permissions if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "You can't modify a player with same group as you, or higher."); - return false; + return true; } - permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]); + permissionResult = permissionHandler.checkFullUserPermission(senderUser, auxString); if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) { sender.sendMessage(ChatColor.RED + "You can't remove a permission you don't have."); - return false; + return true; } // Validating permissions of user - permissionResult = permissionHandler.checkUserOnlyPermission(auxUser, args[1]); + permissionResult = permissionHandler.checkUserOnlyPermission(auxUser, auxString); if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { sender.sendMessage(ChatColor.RED + "The user doesn't have direct access to that permission."); - return false; + return true; } - if (!auxUser.hasSamePermissionNode(args[1])) { + if (!auxUser.hasSamePermissionNode(auxString)) { sender.sendMessage(ChatColor.RED + "This permission node doesn't match any node."); sender.sendMessage(ChatColor.RED + "But might match node: " + permissionResult.accessLevel); - return false; + return true; } // Seems OK - auxUser.removePermission(args[1]); - sender.sendMessage(ChatColor.YELLOW + "You removed '" + args[1] + "' from player '" + auxUser.getName() + "' permissions."); + auxUser.removePermission(auxString); + sender.sendMessage(ChatColor.YELLOW + "You removed '" + auxString + "' from player '" + auxUser.getName() + "' permissions."); targetPlayer = this.getServer().getPlayer(auxUser.getName()); if (targetPlayer != null) @@ -832,8 +857,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if ((args.length == 0) || (args.length > 2)) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> (+))"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manulistp <player> (+))"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { @@ -897,8 +922,14 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <permission>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manucheckp <player> <permission>)"); + return true; + } + + auxString = args[1]; + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { @@ -912,24 +943,24 @@ public class GroupManager extends JavaPlugin { } targetPlayer = this.getServer().getPlayer(auxUser.getName()); // Validating permission - permissionResult = permissionHandler.checkFullGMPermission(auxUser, args[1], false); + permissionResult = permissionHandler.checkFullGMPermission(auxUser, auxString, false); if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { // No permissions found in GM so fall through and check Bukkit. - sender.sendMessage(ChatColor.RED + "The player doesn't have access to that permission"); + sender.sendMessage(ChatColor.YELLOW + "The player doesn't have access to that permission"); } else { // This permission was found in groupmanager. if (permissionResult.owner instanceof User) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { - sender.sendMessage(ChatColor.RED + "The user has directly a negation node for that permission."); + sender.sendMessage(ChatColor.YELLOW + "The user has directly a negation node for that permission."); } else { sender.sendMessage(ChatColor.YELLOW + "The user has directly this permission."); } sender.sendMessage(ChatColor.YELLOW + "Permission Node: " + permissionResult.accessLevel); } else if (permissionResult.owner instanceof Group) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { - sender.sendMessage(ChatColor.RED + "The user inherits a negation permission from group: " + permissionResult.owner.getName()); + sender.sendMessage(ChatColor.YELLOW + "The user inherits a negation permission from group: " + permissionResult.owner.getName()); } else { sender.sendMessage(ChatColor.YELLOW + "The user inherits the permission from group: " + permissionResult.owner.getName()); } @@ -952,48 +983,67 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <permission>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangaaddp <group> <permission>)"); + return true; + } + + auxString = args[1]; + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); } + auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); return false; } // Validating your permissions permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]); if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) { sender.sendMessage(ChatColor.RED + "You can't add a permission you don't have."); - return false; + return true; } // Validating permissions of user permissionResult = permissionHandler.checkGroupOnlyPermission(auxGroup, args[1]); - if (args[1].startsWith("+")) { + if (auxString.startsWith("+")) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) { sender.sendMessage(ChatColor.RED + "The group already has direct access to that permission."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + return true; } - } else if (args[1].startsWith("-")) { + } else if (auxString.startsWith("-")) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) { sender.sendMessage(ChatColor.RED + "The group already has an exception for this node."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + return true; } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { sender.sendMessage(ChatColor.RED + "The group already has a matching node."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + return true; } } else { - if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND)) { + if (permissionResult.resultType.equals(PermissionCheckResult.Type.EXCEPTION)) { + // Warn only while still allowing you to add the node. + sender.sendMessage(ChatColor.RED + "The group already has an exception for this node."); + sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); + } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND)) { sender.sendMessage(ChatColor.RED + "The group already has direct access to that permission."); sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); - return false; + // Abort adding if the node is a direct match. + if (permissionResult.accessLevel.equalsIgnoreCase(args[1])) + { + return true; + } + } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { + // Warn only while still allowing you to add the node. + sender.sendMessage(ChatColor.RED + "The group already has a matching Negated node."); + sender.sendMessage(ChatColor.RED + "Node: " + permissionResult.accessLevel); } } // Seems OK - auxGroup.addPermission(args[1]); - sender.sendMessage(ChatColor.YELLOW + "You added '" + args[1] + "' to group '" + auxGroup.getName() + "' permissions."); + auxGroup.addPermission(auxString); + sender.sendMessage(ChatColor.YELLOW + "You added '" + auxString + "' to group '" + auxGroup.getName() + "' permissions."); BukkitPermissions.updateAllPlayers(); @@ -1007,34 +1057,41 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <permission>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangdelp <group> <permission>)"); + return true; } + + auxString = args[1]; + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); + } + auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } // Validating your permissions - permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]); + permissionResult = permissionHandler.checkFullUserPermission(senderUser, auxString); if (!isConsole && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) { sender.sendMessage(ChatColor.RED + "Can't remove a permission you don't have."); - return false; + return true; } // Validating permissions of user - permissionResult = permissionHandler.checkGroupOnlyPermission(auxGroup, args[1]); + permissionResult = permissionHandler.checkGroupOnlyPermission(auxGroup, auxString); if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { sender.sendMessage(ChatColor.RED + "The group doesn't have direct access to that permission."); return false; } - if (!auxGroup.hasSamePermissionNode(args[1])) { + if (!auxGroup.hasSamePermissionNode(auxString)) { sender.sendMessage(ChatColor.RED + "This permission node doesn't match any node."); sender.sendMessage(ChatColor.RED + "But might match node: " + permissionResult.accessLevel); - return false; + return true; } // Seems OK - auxGroup.removePermission(args[1]); - sender.sendMessage(ChatColor.YELLOW + "You removed '" + args[1] + "' from group '" + auxGroup.getName() + "' permissions."); + auxGroup.removePermission(auxString); + sender.sendMessage(ChatColor.YELLOW + "You removed '" + auxString + "' from group '" + auxGroup.getName() + "' permissions."); BukkitPermissions.updateAllPlayers(); @@ -1048,13 +1105,13 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manglistp <group>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } // Validating permission @@ -1097,25 +1154,32 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <permission>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangcheckp <group> <permission>)"); + return true; + } + + auxString = args[1]; + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); } + auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } // Validating permission - permissionResult = permissionHandler.checkGroupPermissionWithInheritance(auxGroup, args[1]); + permissionResult = permissionHandler.checkGroupPermissionWithInheritance(auxGroup, auxString); if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { - sender.sendMessage(ChatColor.RED + "The group doesn't have access to that permission"); - return false; + sender.sendMessage(ChatColor.YELLOW + "The group doesn't have access to that permission"); + return true; } // Seems OK // auxString = permissionHandler.checkUserOnlyPermission(auxUser, args[1]); if (permissionResult.owner instanceof Group) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { - sender.sendMessage(ChatColor.RED + "The group inherits the negation permission from group: " + permissionResult.owner.getName()); + sender.sendMessage(ChatColor.YELLOW + "The group inherits the negation permission from group: " + permissionResult.owner.getName()); } else { sender.sendMessage(ChatColor.YELLOW + "The user inherits the permission from group: " + permissionResult.owner.getName()); } @@ -1132,28 +1196,28 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group1> <group2>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangaddi <group1> <group2>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group 1 does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } auxGroup2 = dataHolder.getGroup(args[1]); if (auxGroup2 == null) { - sender.sendMessage(ChatColor.RED + "Group 2 does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[1] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "GlobalGroups do NOT support inheritance."); - return false; + return true; } // Validating permission if (permissionHandler.hasGroupInInheritance(auxGroup, auxGroup2.getName())) { sender.sendMessage(ChatColor.RED + "Group " + auxGroup.getName() + " already inherits " + auxGroup2.getName() + " (might not be directly)"); - return false; + return true; } // Seems OK auxGroup.addInherits(auxGroup2); @@ -1171,32 +1235,32 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group1> <group2>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangdeli <group1> <group2>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group 1 does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } auxGroup2 = dataHolder.getGroup(args[1]); if (auxGroup2 == null) { - sender.sendMessage(ChatColor.RED + "Group 2 does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[1] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "GlobalGroups do NOT support inheritance."); - return false; + return true; } // Validating permission if (!permissionHandler.hasGroupInInheritance(auxGroup, auxGroup2.getName())) { sender.sendMessage(ChatColor.RED + "Group " + auxGroup.getName() + " does not inherits " + auxGroup2.getName() + "."); - return false; + return true; } if (!auxGroup.getInherits().contains(auxGroup2.getName())) { sender.sendMessage(ChatColor.RED + "Group " + auxGroup.getName() + " does not inherits " + auxGroup2.getName() + " directly."); - return false; + return true; } // Seems OK auxGroup.removeInherits(auxGroup2.getName()); @@ -1214,8 +1278,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length < 3) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user> <variable> <value>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manuaddv <user> <variable> <value>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1235,6 +1299,10 @@ public class GroupManager extends JavaPlugin { auxString += " "; } } + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); + } auxUser.getVariables().addVar(args[1], Variables.parseVariableValue(auxString)); sender.sendMessage(ChatColor.YELLOW + "Variable " + ChatColor.GOLD + args[1] + ChatColor.YELLOW + ":'" + ChatColor.GREEN + auxString + ChatColor.YELLOW + "' added to the user " + auxUser.getName()); @@ -1248,8 +1316,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user> <variable>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manudelv <user> <variable>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1263,6 +1331,7 @@ public class GroupManager extends JavaPlugin { // Validating permission if (!auxUser.getVariables().hasVar(args[1])) { sender.sendMessage(ChatColor.RED + "The user doesn't have directly that variable!"); + return true; } // Seems OK auxUser.getVariables().removeVar(args[1]); @@ -1278,8 +1347,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manulistv <user>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1313,8 +1382,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <user> <variable>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manucheckv <user> <variable>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1337,8 +1406,8 @@ public class GroupManager extends JavaPlugin { continue; } if (auxGroup2 == null) { - sender.sendMessage(ChatColor.RED + "The user doesn't have access to that variable!"); - return false; + sender.sendMessage(ChatColor.YELLOW + "The user doesn't have access to that variable!"); + return true; } } // Seems OK @@ -1361,17 +1430,17 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length < 3) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <variable> <value>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangaddv <group> <variable> <value>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "GlobalGroups do NOT support Info Nodes."); - return false; + return true; } // Validating permission // Seems OK @@ -1382,6 +1451,10 @@ public class GroupManager extends JavaPlugin { auxString += " "; } } + if (auxString.startsWith("'") && auxString.endsWith("'")) + { + auxString = auxString.substring(1, auxString.length() - 1); + } auxGroup.getVariables().addVar(args[1], Variables.parseVariableValue(auxString)); sender.sendMessage(ChatColor.YELLOW + "Variable " + ChatColor.GOLD + args[1] + ChatColor.YELLOW + ":'" + ChatColor.GREEN + auxString + ChatColor.YELLOW + "' added to the group " + auxGroup.getName()); @@ -1395,21 +1468,22 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <variable>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangdelv <group> <variable>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "GlobalGroups do NOT support Info Nodes."); - return false; + return true; } // Validating permission if (!auxGroup.getVariables().hasVar(args[1])) { sender.sendMessage(ChatColor.RED + "The group doesn't have directly that variable!"); + return true; } // Seems OK auxGroup.getVariables().removeVar(args[1]); @@ -1425,17 +1499,17 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manglistv <group>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "GlobalGroups do NOT support Info Nodes."); - return false; + return true; } // Validating permission // Seems OK @@ -1468,17 +1542,17 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <group> <variable>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mangcheckv <group> <variable>)"); + return true; } auxGroup = dataHolder.getGroup(args[0]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "The specified group does not exist!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "GlobalGroups do NOT support Info Nodes."); - return false; + return true; } // Validating permission auxGroup2 = permissionHandler.nextGroupWithVariable(auxGroup, args[1]); @@ -1501,8 +1575,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manwhois <player>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1541,8 +1615,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/tempadd <player>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1555,7 +1629,7 @@ public class GroupManager extends JavaPlugin { // Validating permission if (!isConsole && !isOpOverride && (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; + return true; } // Seems OK if (overloadedUsers.get(dataHolder.getName().toLowerCase()) == null) { @@ -1563,7 +1637,7 @@ public class GroupManager extends JavaPlugin { } dataHolder.overloadUser(auxUser.getName()); overloadedUsers.get(dataHolder.getName().toLowerCase()).add(dataHolder.getUser(auxUser.getName())); - sender.sendMessage(ChatColor.YELLOW + "Player overloaded!"); + sender.sendMessage(ChatColor.YELLOW + "Player set to overload mode!"); return true; @@ -1575,8 +1649,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/tempdel <player>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1589,7 +1663,7 @@ public class GroupManager extends JavaPlugin { // Validating permission if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher."); - return false; + return true; } // Seems OK if (overloadedUsers.get(dataHolder.getName().toLowerCase()) == null) { @@ -1599,7 +1673,7 @@ public class GroupManager extends JavaPlugin { if (overloadedUsers.get(dataHolder.getName().toLowerCase()).contains(auxUser)) { overloadedUsers.get(dataHolder.getName().toLowerCase()).remove(auxUser); } - sender.sendMessage(ChatColor.YELLOW + "You removed that player's overload. He's back to normal!"); + sender.sendMessage(ChatColor.YELLOW + "Player overload mode is now disabled."); return true; @@ -1759,8 +1833,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manpromote <player> <group>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1772,33 +1846,33 @@ public class GroupManager extends JavaPlugin { } auxGroup = dataHolder.getGroup(args[1]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group not found!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "Players may not be members of GlobalGroups directly."); - return false; + return true; } // Validating permission if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher."); - return false; + return true; } if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) { sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher."); - return false; + return true; } if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) { sender.sendMessage(ChatColor.RED + "You can't modify a player involving a group that you don't inherit."); - return false; + return true; } if (!isConsole && !isOpOverride && (!permissionHandler.hasGroupInInheritance(auxUser.getGroup(), auxGroup.getName()) && !permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { sender.sendMessage(ChatColor.RED + "You can't modify a player using groups with different heritage line."); - return false; + return true; } if (!isConsole && !isOpOverride && (!permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { sender.sendMessage(ChatColor.RED + "The new group must be a higher rank."); - return false; + return true; } // Seems OK auxUser.setGroup(auxGroup); @@ -1815,8 +1889,8 @@ public class GroupManager extends JavaPlugin { } // Validating arguments if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count! (/<command> <player> <group>)"); - return false; + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/mandemote <player> <group>)"); + return true; } if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { return false; @@ -1828,33 +1902,33 @@ public class GroupManager extends JavaPlugin { } auxGroup = dataHolder.getGroup(args[1]); if (auxGroup == null) { - sender.sendMessage(ChatColor.RED + "Group not found!"); - return false; + sender.sendMessage(ChatColor.RED + "" + args[0] + " Group doesnt exist!"); + return true; } if (auxGroup.isGlobal()) { sender.sendMessage(ChatColor.RED + "Players may not be members of GlobalGroups directly."); - return false; + return true; } // Validating permission if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "You can't modify a player with same permissions as you, or higher."); - return false; + return true; } if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) { sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher."); - return false; + return true; } if (!isConsole && !isOpOverride && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) { sender.sendMessage(ChatColor.RED + "You can't modify a player involving a group that you don't inherit."); - return false; + return true; } if (!isConsole && !isOpOverride && (!permissionHandler.hasGroupInInheritance(auxUser.getGroup(), auxGroup.getName()) && !permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { sender.sendMessage(ChatColor.RED + "You can't modify a player using groups with different inheritage line."); - return false; + return true; } if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { sender.sendMessage(ChatColor.RED + "The new group must be a lower rank."); - return false; + return true; } // Seems OK auxUser.setGroup(auxGroup); @@ -1881,7 +1955,7 @@ public class GroupManager extends JavaPlugin { } return true; case manworld: - auxString = selectedWorlds.get(sender); + auxString = selectedWorlds.get(sender.getName()); if (auxString != null) { sender.sendMessage(ChatColor.YELLOW + "You have the world '" + dataHolder.getName() + "' in your selection."); } else { @@ -1924,7 +1998,7 @@ public class GroupManager extends JavaPlugin { } dataHolder = worldsHolder.getWorldData(auxString); permissionHandler = dataHolder.getPermissionsHandler(); - selectedWorlds.put(sender, dataHolder.getName()); + selectedWorlds.put(sender.getName(), dataHolder.getName()); sender.sendMessage(ChatColor.YELLOW + "You have selected world '" + dataHolder.getName() + "'."); return true; @@ -1934,7 +2008,7 @@ public class GroupManager extends JavaPlugin { sender.sendMessage(ChatColor.RED + "Review your arguments count!"); return false; } - selectedWorlds.remove(sender); + selectedWorlds.remove(sender.getName()); sender.sendMessage(ChatColor.YELLOW + "You have removed your world selection. Working with current world(if possible)."); return true; @@ -1980,7 +2054,7 @@ public class GroupManager extends JavaPlugin { } } sender.sendMessage(ChatColor.RED + "You are not allowed to use that command."); - return false; + return true; } /** @@ -1992,7 +2066,7 @@ public class GroupManager extends JavaPlugin { permissionHandler = dataHolder.getPermissionsHandler(); if ((dataHolder != null) && (permissionHandler != null)) { - selectedWorlds.put(sender, dataHolder.getName()); + selectedWorlds.put(sender.getName(), dataHolder.getName()); sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. Default world '" + worldsHolder.getDefaultWorld().getName() + "' selected."); return true; } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java index bbb2ae03a..adec183cd 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java @@ -144,7 +144,7 @@ public class User extends DataUnit implements Cloneable { boolean notify = (!oldGroup.equalsIgnoreCase(defaultGroupName)) || ((oldGroup.equalsIgnoreCase(defaultGroupName)) && (!this.group.equalsIgnoreCase(defaultGroupName))); if (notify) - GroupManager.notify(this.getName(), String.format(" moved to the group %s.", group.getName())); + GroupManager.notify(this.getName(), String.format(" moved to the group %s in %s.", group.getName(), this.getDataSource().getName())); GroupManager.getGMEventHandler().callEvent(this, Action.USER_GROUP_CHANGED); } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java index 2661c6bc0..d173307f2 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java @@ -59,6 +59,28 @@ public class WorldsHolder { resetWorldsHolder(); } + /** + * @return the mirrorsGroup + */ + public Map<String, String> getMirrorsGroup() { + + return mirrorsGroup; + } + + + /** + * @return the mirrorsUser + */ + public Map<String, String> getMirrorsUser() { + + return mirrorsUser; + } + + public boolean isWorldKnown(String name) { + + return worldsData.containsKey(name.toLowerCase()); + } + public void resetWorldsHolder() { worldsData = new HashMap<String, OverloadedWorldHolder>(); @@ -92,33 +114,46 @@ public class WorldsHolder { private void loadAllSearchedWorlds() { /* - * Read all known worlds from Bukkit - * Create the data files if they don't already exist, - * and they are not mirrored. + * Read all known worlds from Bukkit Create the data files if they don't + * already exist, and they are not mirrored. */ - for (World world : plugin.getServer().getWorlds()){ + for (World world : plugin.getServer().getWorlds()) { GroupManager.logger.log(Level.FINE, "Checking data for " + world.getName() + "."); if ((!worldsData.containsKey(world.getName().toLowerCase())) && ((!mirrorsGroup.containsKey(world.getName().toLowerCase())) || (!mirrorsUser.containsKey(world.getName().toLowerCase())))) { + + if (worldsData.containsKey("all_unnamed_worlds")) { + + String usersMirror = mirrorsUser.get("all_unnamed_worlds"); + String groupsMirror = mirrorsGroup.get("all_unnamed_worlds"); + + if (usersMirror != null) + mirrorsUser.put(world.getName().toLowerCase(), usersMirror); + + if (groupsMirror != null) + mirrorsGroup.put(world.getName().toLowerCase(), groupsMirror); + + } + GroupManager.logger.log(Level.FINE, "Creating folders for " + world.getName() + "."); setupWorldFolder(world.getName()); } } /* - * Loop over all folders within the worlds folder - * and attempt to load the world data + * Loop over all folders within the worlds folder and attempt to load + * the world data */ for (File folder : worldsFolder.listFiles()) { if (folder.isDirectory() && !folder.getName().startsWith(".")) { GroupManager.logger.info("World Found: " + folder.getName()); /* - * don't load any worlds which are already loaded - * or fully mirrored worlds that don't need data. + * don't load any worlds which are already loaded or fully + * mirrored worlds that don't need data. */ if (!worldsData.containsKey(folder.getName().toLowerCase()) && ((!mirrorsGroup.containsKey(folder.getName().toLowerCase())) || (!mirrorsUser.containsKey(folder.getName().toLowerCase())))) { /* - * Call setupWorldFolder to check case sensitivity - * and convert to lower case, before we attempt to load this + * Call setupWorldFolder to check case sensitivity and + * convert to lower case, before we attempt to load this * world. */ setupWorldFolder(folder.getName()); @@ -383,8 +418,14 @@ public class WorldsHolder { // Find this worlds data if (worldsData.containsKey(worldNameLowered)) return getUpdatedWorldData(worldNameLowered); - - // Oddly no data source was found for this world so return the default. + + // Oddly no data source was found for this world so attempt to return the global mirror. + if (worldsData.containsKey("all_unnamed_worlds")) { + GroupManager.logger.finest("Requested world " + worldName + " not found or badly mirrored. Returning all_unnamed_worlds world..."); + return getUpdatedWorldData("all_unnamed_worlds"); + } + + // Oddly no data source or global mirror was found for this world so return the default. GroupManager.logger.finest("Requested world " + worldName + " not found or badly mirrored. Returning default world..."); return getDefaultWorld(); } @@ -699,41 +740,53 @@ public class WorldsHolder { } /** - * Returns all physically loaded worlds which have at least - * one of their own data sets for users or groups which isn't an identical mirror. + * Returns all physically loaded worlds which have at least one of their own + * data sets for users or groups which isn't an identical mirror. * * @return ArrayList<OverloadedWorldHolder> of all loaded worlds */ public ArrayList<OverloadedWorldHolder> allWorldsDataList() { ArrayList<OverloadedWorldHolder> list = new ArrayList<OverloadedWorldHolder>(); - for (OverloadedWorldHolder data : worldsData.values()) { - if ((!list.contains(data))) { // && (!mirrorsGroup.containsKey(data.getName().toLowerCase()) || !mirrorsUser.containsKey(data.getName().toLowerCase()))) { - String worldNameLowered = data.getName().toLowerCase(); - String usersMirror = mirrorsUser.get(worldNameLowered); - String groupsMirror = mirrorsGroup.get(worldNameLowered); + for (String world : worldsData.keySet()) { + + if (!world.equalsIgnoreCase("all_unnamed_worlds")) { + + // Fetch the relevant world object + OverloadedWorldHolder data = getWorldData(world); - // is users mirrored? - if (usersMirror != null) { + if (!list.contains(data)) { - // If both are mirrored - if (groupsMirror != null) { + String worldNameLowered = data.getName().toLowerCase(); + String usersMirror = mirrorsUser.get(worldNameLowered); + String groupsMirror = mirrorsGroup.get(worldNameLowered); - // if the data sources are the same, return the parent - if (usersMirror == groupsMirror) { - if (!list.contains(usersMirror.toLowerCase())) - list.add(worldsData.get(usersMirror.toLowerCase())); - continue; + // is users mirrored? + if (usersMirror != null) { + + // If both are mirrored + if (groupsMirror != null) { + + // if the data sources are the same, return the parent + if (usersMirror == groupsMirror) { + data = getWorldData(usersMirror.toLowerCase()); + + // Only add the parent if it's not already listed. + if (!list.contains(data)) + list.add(data); + + continue; + } + // Both data sources are mirrors, but they are from different parents + // so fall through to add the actual data object. } - // Both data sources are mirrors, but they are from different parents - // so fall through to add the actual data object. + // Groups isn't a mirror so fall through to add this this worlds data source } - // Groups isn't a mirror so fall through to add this this worlds data source - } - // users isn't mirrored so we need to add this worlds data source - list.add(data); + // users isn't mirrored so we need to add this worlds data source + list.add(data); + } } } return list; diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java index f7a7109ab..51937bd67 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java @@ -35,8 +35,24 @@ public class GMWorldListener implements Listener { if (GroupManager.isLoaded() && !plugin.getWorldsHolder().isInList(worldName)) {
GroupManager.logger.info("New world detected...");
GroupManager.logger.info("Creating data for: " + worldName);
+
+ if (plugin.getWorldsHolder().isWorldKnown("all_unnamed_worlds")) {
+
+ String usersMirror = plugin.getWorldsHolder().getMirrorsUser().get("all_unnamed_worlds");
+ String groupsMirror = plugin.getWorldsHolder().getMirrorsGroup().get("all_unnamed_worlds");
+
+ if (usersMirror != null)
+ plugin.getWorldsHolder().getMirrorsUser().put(worldName.toLowerCase(), usersMirror);
+
+ if (groupsMirror != null)
+ plugin.getWorldsHolder().getMirrorsGroup().put(worldName.toLowerCase(), groupsMirror);
+
+ }
+
plugin.getWorldsHolder().setupWorldFolder(worldName);
plugin.getWorldsHolder().loadWorld(worldName);
+
+
if (plugin.getWorldsHolder().isInList(worldName)) {
GroupManager.logger.info("Don't forget to configure/mirror this world in config.yml.");
} else
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index f303aea35..bef2fb713 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -708,6 +708,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String access : user.getPermissionList()) { result.resultType = comparePermissionString(access, permission); if (result.resultType != PermissionCheckResult.Type.NOTFOUND) { + result.accessLevel = access; return result; } } @@ -732,6 +733,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String access : group.getPermissionList()) { result.resultType = comparePermissionString(access, permission); if (result.resultType != PermissionCheckResult.Type.NOTFOUND) { + result.accessLevel = access; return result; } } |