diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java index 0e6210a..5bb097c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java @@ -80,7 +80,7 @@ public class BukkitDatabaseFetcher extends RestartableThread { rscp.localStorage.cleanup(); rscp.localStorage.saveContents(contents); - contents.filterServerId(rscp.getServer().getServerId()); + // contents.filterServerId(rscp.getServer().getServerId()); } return contents; } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java index ba5fdd6..95cafc0 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -93,18 +93,18 @@ public class BukkitCommands if(args.length == 0) throw new CommandAnswerException(help); help.add(Phrases.HELP_HEADER_2.toString().replace("{SERVER-ID}", rscp.getServer().getServerId())); - final String mm = rscp.settings.getMaintenanceMode(); - if(sender.hasPermission("rscp.admin.lock") && !"".equals(mm)) - help.add("{_LS}Server is in maintenance mode \'{_LG}" + mm + "{_LS}\' now!"); + final String mmode = rscp.settings.getMaintenanceMode(); + if(sender.hasPermission("rscp.admin.lock") && !"".equals(mmode)) + help.add("{_WH}Server is in maintenance mode \'{_LG}" + mmode + "{_WH}\' now!"); help.add(Phrases.HELP_USAGE.toString()); if(sender.hasPermission("rscp.admin")) { - help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.GROUP)); - help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.USER)); - help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.PLAYER)); help.add("{_YL}/rscp {_LR}groups {_LS}-- show known groups"); help.add("{_YL}/rscp {_LR}users {_LS}-- show known users"); help.add(Phrases.HELP_CMD_USER_LP.toString()); + help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.GROUP)); + help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.USER)); + help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.PLAYER)); help.add(Phrases.HELP_CMD_USER_LG.toString()); help.add(Phrases.HELP_CMD_USER_P.toString()); help.add(Phrases.HELP_CMD_USER_S.toString()); 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 f6ac0b7..0576efc 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java @@ -63,10 +63,13 @@ public class CommandEntity if(entity == null && result == null) throw new CommandAnswerException("{_LR}I don't know such name!"); if(args[1] == null) - args[1] = "help"; + args[1] = "info"; final String targetName = args[0]; switch(args[1].toLowerCase()) { + case "info": + if(entity != null) + throw new CommandAnswerException(showEntityDetails(entity)); case "help": throw new CommandAnswerException(getHelpForType(type)); case "prefix": @@ -144,7 +147,7 @@ public class CommandEntity answer.add("There are following known groups in database:"); for(RowEntity group : groups) { - final String details = detailsAboutEntity(group); + final String details = showEntityDetails(group); if(details != null) answer.add(details); } @@ -157,67 +160,44 @@ public class CommandEntity answer.add("There are following known users in database:"); for(RowEntity user : users) { - final String details = detailsAboutEntity(user); + final String details = showEntityDetails(user); if(details != null) answer.add(details); } throw new CommandAnswerException(answer); } - private String detailsAboutEntity(RowEntity entity) + private String showEntityDetails(RowEntity entity) { - String name = entity.entity; + final String name = entity.entity; if("".equals(name)) - // return null; - name = ""; + return null; final StringBuilder sb = new StringBuilder(); if(entity.splittedId != null) sb.append("{_WH}").append(entity.splittedId).append(" "); sb.append("{_YL}").append(name); - if(entity.prefix != null && !"".equals(entity.prefix)) - sb.append("{_LS}, prefix \"").append(entity.prefix).append("{_LS}\""); - if(entity.suffix != null && !"".equals(entity.suffix)) - sb.append("{_LS}, suffix \"").append(entity.suffix).append("{_LS}\""); + final boolean isPrefix = entity.prefix != null && !"".equals(entity.prefix); + final boolean isSuffix = entity.suffix != null && !"".equals(entity.suffix); + if(isPrefix || isSuffix) + sb + .append("{_R} {_LS}[\'") + .append(isPrefix ? entity.prefix : "") + .append("{_LS}\', \'") + .append(isSuffix ? entity.suffix : "") + .append("{_LS}\']"); if(entity.lifetime != null) { - final String lifetime = entity.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " "); + final String lifetime = entity.lifetime + .toLocalDateTime() + .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) + .replace("T", " "); sb.append("{_R} {_YL}").append(lifetime); } + if(entity.permissions != null && entity.permissions.length > 0) + sb.append(String.format("{_R} {_LC}%d{_DC}p", entity.permissions.length)); + if(entity.inheritance != null && entity.inheritance.length > 0) + sb.append(String.format("{_R} {_LC}%d{_DC}i", entity.inheritance.length)); return sb.toString(); } - private void viewEntityPrefix(RowEntity entity) throws CommandAnswerException - { - final ArrayList answer = new ArrayList<>(); - answer.add("Own prefix for " + (entity.entityType == EntityType.GROUP ? "group" : "user") - + " {_YL}" + entity.entity + "{_LS} is:"); - answer.add("{_R}\"" + (entity.prefix != null ? entity.prefix : "") + "{_R}\""); - throw new CommandAnswerException(answer); - } - private void viewEntitySuffix(RowEntity entity) throws CommandAnswerException - { - final ArrayList answer = new ArrayList<>(); - answer.add("Own suffix for " + (entity.entityType == EntityType.GROUP ? "group" : "user") - + " {_YL}" + entity.entity + "{_LS} is:"); - answer.add("{_R}\"" + (entity.suffix != null ? entity.suffix : "") + "{_R}\""); - throw new CommandAnswerException(answer); - } - private void viewCalculatedPrefix(ResolutionResult result, String user) throws CommandAnswerException - { - if(Matchers.isCorrectDashlessUUID(user)) - user = Matchers.uuidAddDashes(user); - final ArrayList answer = new ArrayList<>(); - answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:"); - answer.add("{_R}\"" + result.getPrefix() + "{_R}\""); - throw new CommandAnswerException(answer); - } - private void viewCalculatedSuffix(ResolutionResult result, String user) throws CommandAnswerException - { - if(Matchers.isCorrectDashlessUUID(user)) - user = Matchers.uuidAddDashes(user); - final ArrayList answer = new ArrayList<>(); - answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:"); - answer.add("{_R}\"" + result.getSuffix() + "{_R}\""); - throw new CommandAnswerException(answer); - } private void showEntityPermissions(RowEntity entity) throws CommandAnswerException { final ArrayList answer = new ArrayList<>(); @@ -225,34 +205,64 @@ public class CommandEntity answer.add("Explicit permissions for " + typeName + " {_YL}" + entity.entity + "{_LS}:"); for(RowPermission permission : entity.permissions) { - final StringBuilder sb = new StringBuilder(); - sb.append("{_WH}").append(permission.splittedId); - sb.append(permission.value ? " {_LG}" : " {_LR}").append(permission.permission); - if(permission.destination != null) - { - final String destination = permission.destination.toString(); - if(!"".equals(destination)) - sb.append("{_R} {_LC}{_U}").append(destination); - } - if(permission.expirience > 0) - sb.append("{_R} {_LB}").append(permission.expirience).append(" LVLs"); - if(permission.lifetime != null) - { - final String lifetime = permission.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " "); - sb.append("{_R} {_YL}").append(lifetime); - } - answer.add(sb.toString()); + final String details = showPermissionDetails(permission); + if(details != null) + answer.add(details); } throw new CommandAnswerException(answer); } + private String showPermissionDetails(RowPermission row) + { + final StringBuilder sb = new StringBuilder(); + sb.append("{_WH}").append(row.splittedId); + sb.append(row.value ? " {_LG}" : " {_LR}").append(row.permission); + if(row.destination != null) + { + final String destination = row.destination.toString(); + if(!"".equals(destination)) + sb.append("{_R} {_LC}{_U}").append(destination); + } + if(row.expirience > 0) + sb.append("{_R} {_LB}").append(row.expirience).append(" LVLs"); + if(row.lifetime != null) + { + final String lifetime = row.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " "); + sb.append("{_R} {_YL}").append(lifetime); + } + return sb.toString(); + } private void showEntityParents(RowEntity entity) throws CommandAnswerException { final ArrayList answer = new ArrayList<>(); - answer.add("Parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:"); + answer.add("Explicit parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:"); for(RowInheritance parent : entity.inheritance) - answer.add("{_WH}" + parent.splittedId + " {_LG}" + parent.getParentWithInstance()); + { + final String details = showInheritanceDetails(parent); + if(details != null) + answer.add(details); + } throw new CommandAnswerException(answer); } + private String showInheritanceDetails(RowInheritance row) + { + final StringBuilder sb = new StringBuilder(); + sb.append("{_WH}").append(row.splittedId).append(" {_LG}").append(row.getParentWithInstance()); + sb.append(String.format("{_R} {_DG}({_LG}%d{_DG})", row.priority)); + if(row.destination != null) + { + final String destination = row.destination.toString(); + if(!"".equals(destination)) + sb.append("{_R} {_LC}{_U}").append(destination); + } + if(row.expirience > 0) + sb.append("{_R} {_LB}").append(row.expirience).append(" LVLs"); + if(row.lifetime != null) + { + final String lifetime = row.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " "); + sb.append("{_R} {_YL}").append(lifetime); + } + return sb.toString(); + } private void listFinalPlayerPermissions(ResolutionResult result, String user) throws CommandAnswerException { if(Matchers.isCorrectDashlessUUID(user)) @@ -273,6 +283,40 @@ public class CommandEntity answer.add("{_LG}" + group); throw new CommandAnswerException(answer); } + private void viewEntityPrefix(RowEntity entity) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + answer.add("Own prefix for " + (entity.entityType == EntityType.GROUP ? "group" : "user") + + " {_YL}" + entity.entity + "{_LS} is:"); + answer.add("{_R}\"" + (entity.prefix != null ? entity.prefix : "") + "{_R}\""); + throw new CommandAnswerException(answer); + } + private void viewEntitySuffix(RowEntity entity) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + answer.add("Own suffix for " + (entity.entityType == EntityType.GROUP ? "group" : "user") + + " {_YL}" + entity.entity + "{_LS} is:"); + answer.add("{_R}\"" + (entity.suffix != null ? entity.suffix : "") + "{_R}\""); + throw new CommandAnswerException(answer); + } + private void viewCalculatedPrefix(ResolutionResult result, String user) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); + final ArrayList answer = new ArrayList<>(); + answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:"); + answer.add("{_R}\"" + result.getPrefix() + "{_R}\""); + throw new CommandAnswerException(answer); + } + private void viewCalculatedSuffix(ResolutionResult result, String user) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); + final ArrayList answer = new ArrayList<>(); + answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:"); + answer.add("{_R}\"" + result.getSuffix() + "{_R}\""); + throw new CommandAnswerException(answer); + } private void addGroup(ResolutionResult result, String user, String parent, String destination, Integer seconds) throws CommandAnswerException { final ArrayList answer = new ArrayList<>(); diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index ffbcdd0..d72f161 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -65,6 +65,7 @@ public final class BukkitPluginMain extends JavaPlugin settings.getDefaultGroup(), settings.isDefaultForever(), settings.isUsingAncestorPrefixes()); + internalCache.setCurrentServerId(getServer().getServerId()); Phrases.applyTranslation(settings.getTranslationProvider()); // Restore temporary cached data from json files final DatabaseContents contents = localStorage.retrieveContents(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index ce5a759..aa1030a 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -9,6 +9,7 @@ import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; +import ru.simsonic.rscPermissions.API.Destination; import ru.simsonic.rscPermissions.API.EntityType; import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowInheritance; @@ -26,6 +27,10 @@ public class InternalCache extends InternalStorage this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup; this.groupsInheritParentPrefixes = groupsInheritParentPrefixes; } + public void setCurrentServerId(String serverId) + { + super.serverId = serverId; + } public synchronized Set getKnownGroupObjects() { return new TreeSet<>(entities_g.values()); @@ -193,16 +198,20 @@ public class InternalCache extends InternalStorage { if(params.expirience < row.expirience) return false; - return row.destination.isWorldApplicable(params.destWorld, params.instantiator) - ? row.destination.isRegionApplicable(params.destRegions, params.instantiator) - : false; + return isDestinationApplicable(params, row.destination); } private boolean isInheritanceApplicable(ResolutionParams params, RowInheritance row) { if(params.expirience < row.expirience) return false; - return row.destination.isWorldApplicable(params.destWorld, params.instantiator) - ? row.destination.isRegionApplicable(params.destRegions, params.instantiator) - : false; + return isDestinationApplicable(params, row.destination); + } + private boolean isDestinationApplicable(ResolutionParams params, Destination destination) + { + if(destination.isServerIdApplicable(super.serverId) == false) + return false; + if(destination.isWorldApplicable(params.destWorld, params.instantiator) == false) + return false; + return destination.isRegionApplicable(params.destRegions, params.instantiator); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java index 1857529..8f20901 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java @@ -17,6 +17,7 @@ class InternalStorage protected final HashMap entities_g = new HashMap<>(); protected final HashMap entities_u = new HashMap<>(); protected final RowInheritance defaultInheritance = new RowInheritance(); + protected String serverId; protected RowEntity implicit_g; protected RowEntity implicit_u; private boolean freshRemoteData; @@ -102,6 +103,7 @@ class InternalStorage for(RowPermission row : permissions_p2g) if(row.entity.toLowerCase().equals(entry)) permissions.add(row); + Collections.sort(permissions); entities_g.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]); } for(String entry : entities_u.keySet()) @@ -110,6 +112,7 @@ class InternalStorage for(RowPermission row : permissions_p2u) if(row.entity.equals(entry)) permissions.add(row); + Collections.sort(permissions); entities_u.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]); } }