diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Destination.java b/src/main/java/ru/simsonic/rscPermissions/API/Destination.java index 750e63f..f01f608 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/Destination.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/Destination.java @@ -31,7 +31,7 @@ public class Destination if(this.world == null || this.world.isEmpty() || "*".equals(this.world)) return true; final String instantiated = (instantiator != null && !instantiator.isEmpty()) - ? this.world.replace(Settings.instantiator, instantiator) + ? this.world.replace(Settings.INSTANTIATOR, instantiator) : this.world; return wildcardTest(world, instantiated); } @@ -40,7 +40,7 @@ public class Destination if(this.region == null || "".equals(this.region) || "*".equals(this.region)) return true; final String instantiated = (instantiator != null && !"".equals(instantiator)) - ? this.region.replace(Settings.instantiator, instantiator) + ? this.region.replace(Settings.INSTANTIATOR, instantiator) : this.region; for(String regionId : regions) if(wildcardTest(regionId, instantiated)) @@ -52,7 +52,7 @@ public class Destination if(this.region == null || "".equals(this.region) || "*".equals(this.region)) return true; final String instantiated = (instantiator != null && !"".equals(instantiator)) - ? this.region.replace(Settings.instantiator, instantiator) + ? this.region.replace(Settings.INSTANTIATOR, instantiator) : this.region; for(String regionId : regions) if(wildcardTest(regionId, instantiated)) diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java index 7b02703..b1eec10 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java @@ -23,10 +23,10 @@ public class RowInheritance implements Cloneable, Comparable { if(parent != null) { - final String[] splitted = parent.split(Settings.separatorRegExp); + final String[] splitted = parent.split(Settings.SEPARATOR_REGEXP); if(splitted.length > 1) { - parent = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.separator); + parent = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.SEPARATOR); instance = splitted[splitted.length - 1]; return; } diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java index 0ba44ed..ed9e5c0 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java @@ -5,13 +5,13 @@ import ru.simsonic.rscCommonsLibrary.ConnectionMySQL.ConnectionParams; public interface Settings { - public static final String updaterURL = "http://simsonic.github.io/rscPermissions/latest.json"; - public static final String chatPrefix = "{GOLD}[rscp] {_LS}"; - public static final String separator = "."; - public static final String separatorRegExp = "\\."; - public static final String instantiator = "?"; - public static final String textInheriter = "%"; - public static final char groupLevelTab = '┏'; + public static final String UPDATER_URL = "http://simsonic.github.io/rscPermissions/latest.json"; + public static final String CHAT_PREFIX = "{GOLD}[rscp] {_LS}"; + public static final String SEPARATOR = "."; + public static final String SEPARATOR_REGEXP = "\\."; + public static final String INSTANTIATOR = "?"; + public static final String TEXT_INHERITER = "%"; + public static final char GROUP_LEVEL_TAB = '┏'; public void onLoad(); public void onEnable(); public String getDefaultGroup(); diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java index 6ed29c4..c29beb9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java @@ -86,7 +86,7 @@ public class BridgeForBukkitAPI { if(rscp.permissionManager.isConsoleDebugging()) { - final StringBuilder sb = new StringBuilder(Settings.chatPrefix).append("[DEBUG] {_LS}").append(info); + final StringBuilder sb = new StringBuilder(Settings.CHAT_PREFIX).append("[DEBUG] {_LS}").append(info); rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); } } @@ -94,7 +94,7 @@ public class BridgeForBukkitAPI { if(rscp.permissionManager.isConsoleDebugging()) { - final StringBuilder sb = new StringBuilder(Settings.chatPrefix); + final StringBuilder sb = new StringBuilder(Settings.CHAT_PREFIX); sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); for(StackTraceElement ste : Thread.currentThread().getStackTrace()) { @@ -102,7 +102,7 @@ public class BridgeForBukkitAPI if(!className.equals(BridgeForBukkitAPI.class.getName()) && !className.equals(Thread.class.getName()) ) - sb.append(Settings.chatPrefix).append("[DEBUG] ") + sb.append(Settings.CHAT_PREFIX).append("[DEBUG] ") .append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}") .append(ste.toString()) .append(System.lineSeparator()); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java index af7308a..4d9a696 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java @@ -39,7 +39,7 @@ public class BukkitDatabaseFetcher extends RestartableThread public synchronized void run() { rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic( - (Settings.chatPrefix + Phrases.FETCHED_REMOTE_DB.toString()) + (Settings.CHAT_PREFIX + Phrases.FETCHED_REMOTE_DB.toString()) .replace("{:E}", String.valueOf(contents.entities.length)) .replace("{:P}", String.valueOf(contents.permissions.length)) .replace("{:I}", String.valueOf(contents.inheritance.length)))); @@ -65,7 +65,7 @@ public class BukkitDatabaseFetcher extends RestartableThread public void run() { for(CommandSender debugger : debuggers) - debugger.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + debugger.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + "Database has been fetched in " + queryTime + " milliseconds.")); } }); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index ebf1d81..174cdc3 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -121,7 +121,7 @@ public class BukkitPermissionManager extends RestartableThread player.setOp((asterisk != null) ? asterisk : false); // Show debugging information if(isDebugging(player)) - player.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + player.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + "[DEBUG] Inheritances list: {_LG}" + Arrays.toString(result.getDeorderedGroups()) + "{_LS}; you have total {_LG}" + attachment.getPermissions().size() + "{_LS} permissions.")); 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 9cde41c..ce288d7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -16,6 +16,7 @@ public class BukkitCommands { private final BukkitPluginMain rscp; private final CommandUser cmdUser; + private final CommandGroup cmdGroup; private final CommandLock cmdLock; private final CommandFetch cmdFetch; private final CommandDebug cmdDebug; @@ -26,6 +27,7 @@ public class BukkitCommands { this.rscp = plugin; cmdUser = new CommandUser(rscp); + cmdGroup = new CommandGroup(rscp); cmdLock = new CommandLock(rscp); cmdFetch = new CommandFetch(rscp); cmdDebug = new CommandDebug(rscp); @@ -50,9 +52,9 @@ public class BukkitCommands @Override public void run() { - sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + sender.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + "Migration from PermissionsEx (MySQL backend) done!")); - sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + sender.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + "Check the latest database row for new data.")); } }); @@ -123,6 +125,9 @@ public class BukkitCommands case "user": cmdUser.onUserCommandHub(sender, args); return; + case "group": + cmdGroup.onGroupCommandHub(sender, args); + return; case "lock": cmdLock.executeLock(sender, args); return; diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandGroup.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandGroup.java new file mode 100644 index 0000000..3225694 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandGroup.java @@ -0,0 +1,124 @@ +package ru.simsonic.rscPermissions.Bukkit.Commands; + +import java.util.ArrayList; +import org.bukkit.command.CommandSender; +import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; +import ru.simsonic.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscPermissions.Engine.Backends.DatabaseTransaction; +import ru.simsonic.rscPermissions.Engine.ResolutionResult; + +public class CommandGroup +{ + private final BukkitPluginMain rscp; + CommandGroup(BukkitPluginMain plugin) + { + this.rscp = plugin; + } + public void onGroupCommandHub(CommandSender sender, String[] args) throws CommandAnswerException + { + /* + /rscp - command + group - 0 + - 1 + */ + if(sender.hasPermission("rscp.admin")) + { + /* + if(args.length < 3) + return; + final Player player = BukkitUtilities.findOnlinePlayer(args[1]); + if(player != null) + args[1] = player.getName(); + final ResolutionResult result = (player != null) + ? rscp.permissionManager.getResult(player) + : rscp.permissionManager.getResult(args[1]); + switch(args[2].toLowerCase()) + { + case "prefix": + case "p": + viewPrefix(result, args[1]); + break; + case "suffix": + case "s": + viewSuffix(result, args[1]); + break; + case "listpermissions": + case "lp": + listPermissions(result, args[1]); + break; + case "listgroups": + case "lg": + listGroups(result, args[1]); + break; + case "addgroup": + case "ag": + // TO DO HERE + addGroup(result, args[1], null, null, null); + break; + case "removegroup": + case "rg": + // TO DO HERE + removeGroup(result, args[1], null); + break; + default: + break; + } + */ + } else + throw new CommandAnswerException("Not enough permissions."); + } + /* + private void viewPrefix(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.prefix + "{_R}\""); + throw new CommandAnswerException(answer); + } + private void viewSuffix(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.suffix + "{_R}\""); + throw new CommandAnswerException(answer); + } + private void listPermissions(ResolutionResult result, String user) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); + final ArrayList answer = new ArrayList<>(); + answer.add("Permission list for user {_YL}" + user + "{_LS}:"); + final ArrayList sorted_keys = new ArrayList<>(result.permissions.keySet()); + Collections.sort(sorted_keys); + for(String perm : sorted_keys) + answer.add((result.permissions.get(perm) ? "{_LG}" : "{_LR}") + perm); + throw new CommandAnswerException(answer); + } + private void listGroups(ResolutionResult result, String user) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); + final ArrayList answer = new ArrayList<>(); + answer.add("Group list for user {_YL}" + user + "{_LS}:"); + for(String group : result.getOrderedGroups()) + answer.add("{_LG}" + group); + throw new CommandAnswerException(answer); + } + */ + private void addGroup(ResolutionResult result, String group, String parent, String destination, Integer seconds) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + final DatabaseTransaction databaseTransaction = new DatabaseTransaction(rscp); + databaseTransaction.apply(); + throw new CommandAnswerException(answer); + } + private void removeGroup(ResolutionResult result, String group, String parent) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + throw new CommandAnswerException(answer); + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index 8edb68e..dd22833 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -31,7 +31,7 @@ public final class BukkitPluginMain extends JavaPlugin { public static final Logger consoleLog = Bukkit.getLogger(); public final Settings settings = new BukkitPluginConfiguration(this); - public final BukkitUpdater updating = new BukkitUpdater(this, Settings.updaterURL, Settings.chatPrefix); + public final BukkitUpdater updating = new BukkitUpdater(this, Settings.UPDATER_URL, Settings.CHAT_PREFIX); public final BackendJson localStorage = new BackendJson(getDataFolder()); public final BackendDatabase connection = new BackendDatabase(consoleLog); public final InternalCache internalCache = new InternalCache(); @@ -67,7 +67,7 @@ public final class BukkitPluginMain extends JavaPlugin contents.filterServerId(getServer().getServerId()).filterLifetime(); internalCache.fill(contents); getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic( - (Settings.chatPrefix + Phrases.FETCHED_LOCAL_CACHE.toString()) + (Settings.CHAT_PREFIX + Phrases.FETCHED_LOCAL_CACHE.toString()) .replace("{:E}", String.valueOf(contents.entities.length)) .replace("{:P}", String.valueOf(contents.permissions.length)) .replace("{:I}", String.valueOf(contents.inheritance.length)))); @@ -153,7 +153,7 @@ public final class BukkitPluginMain extends JavaPlugin } } catch(CommandAnswerException ex) { for(String answer : ex.getMessageArray()) - sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + answer)); + sender.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + answer)); } return true; } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java index d92ec2c..5ae66d7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java @@ -3,6 +3,8 @@ package ru.simsonic.rscPermissions.Engine.Backends; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import ru.simsonic.rscCommonsLibrary.ConnectionMySQL; @@ -163,4 +165,101 @@ public class BackendDatabase extends ConnectionMySQL setupQueryTemplate("{ID}", Long.toString(id)); executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}inheritance` WHERE `id` = '{ID}';"); } + public synchronized void insertEntity( + Long id, + String entity, EntityType type, + String prefix, String suffix, Integer lifetime) + { + setupQueryTemplate("{TABLE}", "entities"); + final Map fields = new HashMap<>(); + // Required fields + fields.put("entity", quoteValue(entity)); + fields.put("entity_type", type.equals(EntityType.PLAYER) ? "b'1'" : "b'0'"); + // Optional fields + if(id != null) + fields.put("id", Long.toString(id)); + if(prefix != null) + fields.put("prefix", quoteValue(prefix)); + if(suffix != null) + fields.put("suffix", quoteValue(suffix)); + if(lifetime != null) + fields.put("lifetime", lifetimeToValue(lifetime)); + insertRow(fields); + } + public synchronized void insertPermissions( + Long id, + String entity, EntityType type, + String permission, boolean value, + String destination, Integer expirience, Integer lifetime) + { + setupQueryTemplate("{TABLE}", "permissions"); + final Map fields = new HashMap<>(); + // Required fields + fields.put("entity", quoteValue(entity)); + fields.put("entity_type", type.equals(EntityType.PLAYER) ? "b'1'" : "b'0'"); + fields.put("permission", quoteValue(permission)); + fields.put("value", value ? "b'1'" : "b'0'"); + // Optional fields + if(id != null) + fields.put("id", Long.toString(id)); + if(destination != null) + fields.put("destination", quoteValue(destination)); + if(expirience != null) + fields.put("expirience", Integer.toString(expirience)); + if(lifetime != null) + fields.put("lifetime", lifetimeToValue(lifetime)); + insertRow(fields); + } + public synchronized void insertInheritance( + Long id, + String entity, String parent, EntityType type, Integer priority, + String destination, Integer expirience, Integer lifetime) + { + setupQueryTemplate("{TABLE}", "inheritance"); + final Map fields = new HashMap<>(); + // Required fields + fields.put("entity", quoteValue(entity)); + fields.put("parent", quoteValue(parent)); + fields.put("inheritance_type", type.equals(EntityType.PLAYER) ? "b'1'" : "b'0'"); + // Optional fields + if(id != null) + fields.put("id", Long.toString(id)); + if(priority != null) + fields.put("inheritance_priority", Integer.toString(priority)); + if(destination != null) + fields.put("destination", quoteValue(destination)); + if(expirience != null) + fields.put("expirience", Integer.toString(expirience)); + if(lifetime != null) + fields.put("lifetime", lifetimeToValue(lifetime)); + insertRow(fields); + } + private String quoteValue(String value) + { + return new StringBuilder("'").append(value).append("'").toString(); + } + private String lifetimeToValue(int lifetime) + { + if(lifetime < 0) + return "NULL"; + return new StringBuilder("NOW() + INTERVAL ").append(lifetime).append(" SECOND").toString(); + } + private void insertRow(Map fields) + { + if(fields.isEmpty()) + return; + final StringBuilder sbf = new StringBuilder(); + final StringBuilder sbv = new StringBuilder(); + final String sep = ", "; + for(Map.Entry entry : fields.entrySet()) + { + sbf.append("`").append(entry.getKey()).append("`").append(sep); + sbv.append(entry.getValue()).append(sep); + } + sbf.setLength(sbf.length() - sep.length()); + sbv.setLength(sbv.length() - sep.length()); + setupQueryTemplate("{FIELDS}", sbf.toString()); + setupQueryTemplate("{VALUES}", sbv.toString()); + executeUpdateT("INSERT INTO `{DATABASE}`.`{PREFIX}{TABLE}` ({FIELDS}) VALUES ({VALUES});"); + } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java b/src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java index fa13fd8..d9bdc80 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/CommandUtilities.java @@ -1,7 +1,68 @@ package ru.simsonic.rscPermissions.Engine; +import ru.simsonic.rscCommonsLibrary.TimeIntervalParser; +import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; +import ru.simsonic.rscPermissions.API.Destination; + public class CommandUtilities { + public static class CommandParams + { + public Integer expirience; + public Destination destination; + public Integer lifetime; + } + public static CommandParams parseCommandParams(String[] args) throws CommandAnswerException + { + // /rscp [params] + final CommandParams result = new CommandParams(); + for(int index = 0; index < args.length && args[index] != null; index += 1) + { + final boolean isLastArg = (index != args.length - 1); + if(args[index] == null) + break; + switch(args[index].toLowerCase()) + { + case "": + break; + case "e": + case "exp": + case "expirience": + if(isLastArg) + throw new CommandAnswerException("RequiresOneMoreArg"); + try + { + result.expirience = Integer.parseInt(args[index + 1]); + } catch(NumberFormatException ex) { + throw new CommandAnswerException("NumberFormatException: " + args[index + 1]); + } catch(NullPointerException ex) { + throw new CommandAnswerException("NullPointerException: args #" + (index + 1)); + } + index += 1; + break; + case "d": + case "dest": + case "destination": + if(isLastArg) + throw new CommandAnswerException("RequiresOneMoreArg"); + if(args[index + 1] == null || "".equals(args[index + 1])) + throw new CommandAnswerException("NotEnoughArguments: args #" + (index + 1)); + result.destination = Destination.parseDestination(args[index + 1]); + break; + case "l": + case "lifetime": + if(isLastArg) + throw new CommandAnswerException("RequiresOneMoreArg"); + result.lifetime = TimeIntervalParser.parseTimeInterval(args[index + 1]); + if(result.lifetime < 0) + result.lifetime = Integer.MAX_VALUE; + break; + default: + throw new CommandAnswerException("UnknownCommandParam: " + args[index]); + } + } + return result; + } public static boolean argumentToBoolean(String arg, Boolean prevForToggle) throws IllegalArgumentException { if(arg == null || "".equals(arg)) diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index c714949..c4b3af4 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -23,8 +23,8 @@ public class InternalCache private final HashMap entities_g = new HashMap<>(); private final HashMap entities_u = new HashMap<>(); private final RowInheritance defaultInheritance = new RowInheritance(); - private boolean alwaysInheritDefaultGroup = false; - private boolean groupsInheritParentPrefixes = true; + private boolean alwaysInheritDefaultGroup = false; + private boolean groupsInheritParentPrefixes = true; private RowEntity implicit_g; private RowEntity implicit_u; public void setDefaultGroup(String defaultGroup, boolean alwaysInheritDefaultGroup, boolean groupsInheritParentPrefixes) @@ -243,7 +243,7 @@ public class InternalCache } params.depth -= 1; params.groupList.add(depthPrefix(params.depth) + currentParent.entity - + ("".equals(instantiator) ? "" : Settings.separator + instantiator)); + + ("".equals(instantiator) ? "" : Settings.SEPARATOR + instantiator)); // Prefixes and suffixes params.parentEntity = currentParent; params.instantiator = instantiator; @@ -259,7 +259,7 @@ public class InternalCache if(depth > 0) { final char[] levelParent = new char[depth]; - levelParent[depth - 1] = Settings.groupLevelTab; + levelParent[depth - 1] = Settings.GROUP_LEVEL_TAB; return new String(levelParent).replace('\0', ' '); } return ""; @@ -271,9 +271,9 @@ public class InternalCache result.prefix = params.parentEntity.prefix; result.suffix = params.parentEntity.suffix; if(result.prefix == null || "".equals(result.prefix)) - result.prefix = (gipp ? Settings.textInheriter : ""); + result.prefix = (gipp ? Settings.TEXT_INHERITER : ""); if(result.suffix == null || "".equals(result.suffix)) - result.suffix = (gipp ? Settings.textInheriter : ""); + result.suffix = (gipp ? Settings.TEXT_INHERITER : ""); final StringBuilder sbp = new StringBuilder(); final StringBuilder sbs = new StringBuilder(); for(ResolutionResult inherited : intermediate) @@ -283,10 +283,10 @@ public class InternalCache if(inherited.suffix != null) sbs.append(inherited.suffix); } - result.prefix = result.prefix.replace(Settings.textInheriter, sbp.toString()); - result.suffix = result.suffix.replace(Settings.textInheriter, sbs.toString()); - result.prefix = result.prefix.replace(Settings.instantiator, params.instantiator); - result.suffix = result.suffix.replace(Settings.instantiator, params.instantiator); + result.prefix = result.prefix.replace(Settings.TEXT_INHERITER, sbp.toString()); + result.suffix = result.suffix.replace(Settings.TEXT_INHERITER, sbs.toString()); + result.prefix = result.prefix.replace(Settings.INSTANTIATOR, params.instantiator); + result.suffix = result.suffix.replace(Settings.INSTANTIATOR, params.instantiator); return result; } private void processPermissions(ResolutionParams params, List permissions) @@ -294,7 +294,7 @@ public class InternalCache for(RowPermission row : permissions) if(isPermissionApplicable(params, row)) params.finalPerms.put( - row.permission.replace(Settings.instantiator, params.instantiator), + row.permission.replace(Settings.INSTANTIATOR, params.instantiator), row.value); } private boolean isPermissionApplicable(ResolutionParams params, RowPermission row) diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java index 3130a22..7ad5d84 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java @@ -40,7 +40,7 @@ public class ResolutionResult public String[] getDeorderedGroups() { final ArrayList list = new ArrayList(groups.size()); - final String separator = new String(new char[] { Settings.groupLevelTab }); + final String separator = new String(new char[] { Settings.GROUP_LEVEL_TAB }); for(String group : groups) { String[] splitted = group.split(separator); diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml index 2a57cd3..4e6e410 100644 --- a/src/main/resources/languages/english.yml +++ b/src/main/resources/languages/english.yml @@ -9,33 +9,33 @@ generic: maintenance-on: "{_YL}Server is closed for maintenance now." maintenance-off: "{_YL}Server is open for players now." integration: - vault-yes: "{_LG}Vault was found and integrated." - vault-no: "{_LR}There is no Vault found. Vault is highly recommended to be installed on your server." - worldedit-yes: "{_LG}WorldEdit (WEPIF) was found and integrated." - worldedit-no: "{_YL}WorldEdit (WEPIF) was not found." - worldguard-yes: "{_LG}WorldGuard was found and integrated." - worldguard-no: "{_YL}WorldGuard was not found." - worldguard-old: "{_LR}WorldGuard 5.9 or older is found, I need 6.0 or later. {_YL}Region support for WG is disabled." - residence-yes: "{_LG}Residence was found and integrated." - residence-no: "{_YL}Residence was not found." + vault-yes: "{_LG}Vault was found and integrated." + vault-no: "{_LR}There is no Vault found. Vault is highly recommended to be installed on your server." + worldedit-yes: "{_LG}WorldEdit (WEPIF) was found and integrated." + worldedit-no: "{_YL}WorldEdit (WEPIF) was not found." + worldguard-yes: "{_LG}WorldGuard was found and integrated." + worldguard-no: "{_YL}WorldGuard was not found." + worldguard-old: "{_LR}WorldGuard 5.9 or older is found, I need 6.0 or later. {_YL}Region support for WG is disabled." + residence-yes: "{_LG}Residence was found and integrated." + residence-no: "{_YL}Residence was not found." debug: - enable: "You will see a lot of debugging information now." - disable: "Debugging information is now hidden for you." + enable: "You will see a lot of debugging information now." + disable: "Debugging information is now hidden for you." database: - command-answer: "Tables have been fetched." - fetched-local: "{_LG}Loaded {:E} entity, {:P} permission and {:I} inheritance rows from local cache." - fetched-remote: "{_LG}Fetched {:E} entities, {:P} permissions and {:I} inheritances." + command-answer: "Tables have been fetched." + fetched-local: "{_LG}Loaded {:E} entity, {:P} permission and {:I} inheritance rows from local cache." + fetched-remote: "{_LG}Fetched {:E} entities, {:P} permissions and {:I} inheritances." help: - header-1: "{_LS}Perfect permission manager for multiserver environments" - header-2: "{_LS}Current serverId is '{_LG}{SERVER-ID}{_LS}' (server.properties)" - usage: "Usage of available commands:" - cmd-user-lp: "{_YL}/rscp user lp {_LS}-- list user's permissions" - cmd-user-lg: "{_YL}/rscp user lg {_LS}-- list user's groups" - cmd-user-p: "{_YL}/rscp user prefix {_LS}-- show user's prefix" - cmd-user-s: "{_YL}/rscp user suffix {_LS}-- show user's suffix" - cmd-lock: "{_YL}/rscp lock [mode] {_LS}-- enable specific maintenance mode" - cmd-unlock: "{_YL}/rscp unlock {_LS}-- disable maintenance mode" - cmd-debug: "{_YL}/rscp debug [value] {_LS}-- show/hide some debugging info to you" - cmd-fetch: "{_YL}/rscp fetch {_LS}-- reread all permissions from database" - cmd-reload: "{_YL}/rscp reload {_LS}-- reload config and restart the plugin" - cmd-help: "{_YL}/rscp help {_LS}-- show this help page" + header-1: "{_LS}Perfect permission manager for multiserver environments" + header-2: "{_LS}Current serverId is '{_LG}{SERVER-ID}{_LS}' (server.properties)" + usage: "Usage of available commands:" + cmd-user-lp: "{_YL}/rscp user lp {_LS}-- list user's permissions" + cmd-user-lg: "{_YL}/rscp user lg {_LS}-- list user's groups" + cmd-user-p: "{_YL}/rscp user prefix {_LS}-- show user's prefix" + cmd-user-s: "{_YL}/rscp user suffix {_LS}-- show user's suffix" + cmd-lock: "{_YL}/rscp lock [mode] {_LS}-- enable specific maintenance mode" + cmd-unlock: "{_YL}/rscp unlock {_LS}-- disable maintenance mode" + cmd-debug: "{_YL}/rscp debug [value] {_LS}-- show/hide some debugging info to you" + cmd-fetch: "{_YL}/rscp fetch {_LS}-- reread all permissions from database" + cmd-reload: "{_YL}/rscp reload {_LS}-- reload config and restart the plugin" + cmd-help: "{_YL}/rscp help {_LS}-- show this help page" diff --git a/src/main/resources/languages/russian.yml b/src/main/resources/languages/russian.yml index 47adbf2..93c3ea9 100644 --- a/src/main/resources/languages/russian.yml +++ b/src/main/resources/languages/russian.yml @@ -9,33 +9,33 @@ generic: maintenance-on: "{_YL}Сервер закрыт на техническое обслуживание." maintenance-off: "{_YL}Сервер открыт для свободного входа игроков." integration: - vault-yes: "{_LG}Vault обнаружён и подключён." - vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." - worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." - worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." - worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." - worldguard-no: "{_YL}WorldGuard не обнаружен." - worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." - residence-yes: "{_LG}Residence обнаружён и подключён." - residence-no: "{_YL}Residence не обнаружен." + vault-yes: "{_LG}Vault обнаружён и подключён." + vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." + worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." + worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." + worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." + worldguard-no: "{_YL}WorldGuard не обнаружен." + worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." + residence-yes: "{_LG}Residence обнаружён и подключён." + residence-no: "{_YL}Residence не обнаружен." debug: - enable: "Теперь Вы будете видеть отладочную информацию." - disable: "Отладочная информация теперь скрыта от Вас." + enable: "Теперь Вы будете видеть отладочную информацию." + disable: "Отладочная информация теперь скрыта от Вас." database: - command-answer: "База данных перечитана." - fetched-local: "{_LG}Восстановлено {:E} сущностей, {:P} прав и {:I} наследований." - fetched-remote: "{_LG}Получено {:E} сущностей, {:P} прав и {:I} наследований." + command-answer: "База данных перечитана." + fetched-local: "{_LG}Восстановлено {:E} сущностей, {:P} прав и {:I} наследований." + fetched-remote: "{_LG}Получено {:E} сущностей, {:P} прав и {:I} наследований." help: - header-1: "{_LS}Идеальный плагин для мультисерверных проектов" - header-2: "{_LS}Идентификатор этого сервера установлен в '{_LG}{SERVER-ID}{_LS}' (server.properties)" - usage: "Синтаксис доступных команд:" - cmd-user-lp: "{_YL}/rscp user lp {_LS}-- получение списка прав игрока" - cmd-user-lg: "{_YL}/rscp user lg {_LS}-- получение дерева групп игрока" - cmd-user-p: "{_YL}/rscp user prefix {_LS}-- просмотр префикса игрока" - cmd-user-s: "{_YL}/rscp user suffix {_LS}-- просмотр суффикса игрока" - cmd-lock: "{_YL}/rscp lock [mode] {_LS}-- перевод сервера в режим обслуживания" - cmd-unlock: "{_YL}/rscp unlock {_LS}-- отключение режима обслуживания" - cmd-debug: "{_YL}/rscp debug [value] {_LS}-- вкл/выкл отладочной информации о Вас" - cmd-fetch: "{_YL}/rscp fetch {_LS}-- получение групп и прав из базы банных" - cmd-reload: "{_YL}/rscp reload {_LS}-- перезагрузка плагина" - cmd-help: "{_YL}/rscp help {_LS}-- эта справка" + header-1: "{_LS}Идеальный плагин для мультисерверных проектов" + header-2: "{_LS}Идентификатор этого сервера установлен в '{_LG}{SERVER-ID}{_LS}' (server.properties)" + usage: "Синтаксис доступных команд:" + cmd-user-lp: "{_YL}/rscp user lp {_LS}-- получение списка прав игрока" + cmd-user-lg: "{_YL}/rscp user lg {_LS}-- получение дерева групп игрока" + cmd-user-p: "{_YL}/rscp user prefix {_LS}-- просмотр префикса игрока" + cmd-user-s: "{_YL}/rscp user suffix {_LS}-- просмотр суффикса игрока" + cmd-lock: "{_YL}/rscp lock [mode] {_LS}-- перевод сервера в режим обслуживания" + cmd-unlock: "{_YL}/rscp unlock {_LS}-- отключение режима обслуживания" + cmd-debug: "{_YL}/rscp debug [value] {_LS}-- вкл/выкл отладочной информации о Вас" + cmd-fetch: "{_YL}/rscp fetch {_LS}-- получение групп и прав из базы банных" + cmd-reload: "{_YL}/rscp reload {_LS}-- перезагрузка плагина" + cmd-help: "{_YL}/rscp help {_LS}-- эта справка"