diff --git a/pom.xml b/pom.xml index c2f6ae0..267b4cd 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ru.simsonic rscPermissions - 0.10.6b-SNAPSHOT + 0.10.7b-SNAPSHOT jar rscPermissions diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java index e3f877e..8ba9043 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java @@ -14,16 +14,35 @@ public final class RowInheritance extends ConditionalRow implements Cloneable, C { if(parent != null) { - final String[] splitted = parent.split(Settings.REGEXP_INSTANCE); - if(splitted.length > 1) - { - parent = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.INSTANCE_SEP); - instance = splitted[splitted.length - 1]; - return; - } + final String[] splitted = splitIntoNameAndInstance(parent); + parent = splitted[0]; + instance = splitted[1]; } instance = ""; } + public static String[] splitIntoNameAndInstance(String parent) + { + if(parent == null) + parent = ""; + final String[] result = new String[2]; + final String[] splitted = parent.split(Settings.REGEXP_INSTANCE); + if(splitted.length > 1) + { + result[0] = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.INSTANCE_SEP); + result[1] = splitted[splitted.length - 1]; + } else { + result[0] = parent; + result[1] = ""; + } + return result; + } + public static String mergeNameAndInstance(String parent, String instance) + { + return parent + + (instance != null && !"".equals(instance) + ? Settings.INSTANCE_SEP + instance + : ""); + } public String getParentWithInstance() { return this.parent + (instance.isEmpty() ? "" : "." + instance); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java index 67c7260..dae5df0 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java @@ -159,27 +159,23 @@ public class CommandEntity throw new CommandAnswerException("FEW ARGUMENTS"); final String target = args[2]; args = Arrays.copyOfRange(args, 3, args.length); - CommandParams optional = ArgumentUtilities.parseCommandParams(args); + final CommandParams optional = ArgumentUtilities.parseCommandParams(args); switch(subcommand) { case "addgroup": case "ag": - // TO DO HERE - addGroup(entity, target, optional); + addGroup (entity, target, optional); break; case "addpermission": case "ap": - // TO DO HERE - addPermission(entity, target, optional); + addPermission (entity, target, optional); break; case "removegroup": case "rg": - // TO DO HERE - removeGroup(entity, target); + removeGroup (entity, target); break; case "removepermission": case "rp": - // TO DO HERE removePermission(entity, target); break; case "setprefix": @@ -395,12 +391,19 @@ public class CommandEntity } private void addGroup(RowEntity entity, String parent, CommandParams optional) throws CommandAnswerException { - final ArrayList answer = new ArrayList<>(); + final String[] splitted = RowInheritance.splitIntoNameAndInstance(parent); + final RowEntity existing = rscp.internalCache.findGroupEntity(splitted[0]); + if(existing != null) + parent = RowInheritance.mergeNameAndInstance(existing.entity, splitted[1]); + // final ArrayList answer = new ArrayList<>(); final RowInheritance row = new RowInheritance(); row.entity = entity.entity; row.entityType = entity.entityType; row.parent = parent; + if(row.destination == null) + row.destination = optional.destination; rscp.connection.addInheritance(row); + rscp.fetchNowAndReschedule(); throw new CommandAnswerException("{_LG}All is ok? I don't ready to check it myself."); } private void addPermission(RowEntity entity, String permission, CommandParams optional) throws CommandAnswerException @@ -414,7 +417,10 @@ public class CommandEntity row.entityType = entity.entityType; row.permission = permission; row.value = !negate; + if(row.destination == null) + row.destination = optional.destination; rscp.connection.addPermission(row); + rscp.fetchNowAndReschedule(); throw new CommandAnswerException("{_LG}All is ok? I don't ready to check it myself."); } private void removeGroup(RowEntity entity, String whatToRemove) throws CommandAnswerException @@ -433,7 +439,7 @@ public class CommandEntity possibleTargets.add(row); continue; } - if(whatToRemove.equalsIgnoreCase(row.parent)) + if(whatToRemove.equalsIgnoreCase(row.getParentWithInstance())) possibleTargets.add(row); } if(possibleTargets.isEmpty()) @@ -443,6 +449,7 @@ public class CommandEntity final RowInheritance row = possibleTargets.get(0); rscp.connection.removeInheritanceById(row.id); answer.add("{_LG}Successfully removed inheritance record {_WH}" + row.splittedId + "{_LG}!"); + rscp.fetchNowAndReschedule(); throw new CommandAnswerException(answer); } private void removePermission(RowEntity entity, String whatToRemove) throws CommandAnswerException @@ -471,6 +478,7 @@ public class CommandEntity final RowPermission row = possibleTargets.get(0); rscp.connection.removePermissionsById(row.id); answer.add("{_LG}Successfully removed inheritance record {_WH}" + row.splittedId + "{_LG}!"); + rscp.fetchNowAndReschedule(); throw new CommandAnswerException(answer); } }