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);
}
}