diff --git a/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java b/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java index e3660a77..76dcaf7a 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java @@ -138,9 +138,10 @@ public class DisguisePermissions { String disguiseName = split[2]; - DisguisePerm dPerm = DisguiseParser.getDisguisePerm(disguiseName); HashMap options = getOptions(permission); + DisguisePerm dPerm = DisguiseParser.getDisguisePerm(disguiseName); + // If this refers to a specific disguise if (dPerm != null) { return new ParsedPermission(new DisguisePerm[]{dPerm}, options, (byte) 0, split[1].equals("*")); @@ -233,7 +234,16 @@ public class DisguisePermissions { List list = new ArrayList<>(); + ArrayList valids = new ArrayList<>(); + for (Map.Entry entry : permissions.entrySet()) { + String key = entry.getKey(); + + if (key.split("\\.").length > 2 && key.split("\\.")[2].equalsIgnoreCase("valid")) { + valids.add(key); + continue; + } + ParsedPermission temp = parsePermission(entry.getKey()); if (temp == null) { @@ -245,6 +255,20 @@ public class DisguisePermissions { list.add(temp); } + for (String valid : valids) { + HashMap options = getOptions(valid); + + String key = valid.split("\\.")[1]; + + if (!key.equals("*") && !key.equalsIgnoreCase(commandName)){ + continue; + } + + for (ParsedPermission perms : list) { + perms.options.putAll(options); + } + } + // Sorted from 5 to 0 where "*" is first and "Cow" is last // Negated permissions are last in each inheritance, so false, false, true, true @@ -384,7 +408,7 @@ public class DisguisePermissions { if (disguiseType.isMisc()) { return 3; } - } else if (permissionName.equals("custom")) { + } else if (permissionName.equals("custom")) { if (disguiseType.isMisc()) { return 3; }