diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java index 84e304b..0226bd7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java @@ -65,9 +65,9 @@ public class BridgeForBukkitAPI rscp.getServer().getServicesManager().register( net.milkbowl.vault.permission.Permission.class, vaultPermission, rscp, ServicePriority.Highest); - console.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_V_Y.toString())); + console.sendMessage(Phrases.INTEGRATION_V_Y.toPlayer()); } else - console.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_V_N.toString())); + console.sendMessage(Phrases.INTEGRATION_V_N.toPlayer()); } protected void setupWEPIF() { @@ -81,9 +81,9 @@ public class BridgeForBukkitAPI prm.setPluginPermissionsResolver(wepif); else PermissionsResolverManager.initialize(wepif); - console.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_WE_Y.toString())); + console.sendMessage(Phrases.INTEGRATION_WE_Y.toPlayer()); } else - console.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_WE_N.toString())); + console.sendMessage(Phrases.INTEGRATION_WE_N.toPlayer()); } public void printDebugString(String info) { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java index 1bb6016..f307b1d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java @@ -1,6 +1,7 @@ package ru.simsonic.rscPermissions.Bukkit; import java.util.Set; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import ru.simsonic.rscCommonsLibrary.RestartableThread; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; @@ -38,8 +39,8 @@ public class BukkitDatabaseFetcher extends RestartableThread @Override public synchronized void run() { - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic( - (Settings.CHAT_PREFIX + Phrases.FETCHED_REMOTE_DB.toString()) + BukkitPluginMain.consoleLog.info(ChatColor.stripColor( + Phrases.FETCHED_REMOTE_DB.toPlayer() .replace("{:E}", String.valueOf(contents.entities.length)) .replace("{:P}", String.valueOf(contents.permissions.length)) .replace("{:I}", String.valueOf(contents.inheritance.length)))); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index 174cdc3..99fe53a 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -94,7 +94,7 @@ public class BukkitPermissionManager extends RestartableThread for(Player current = updateQueue.take(); current != null; current = updateQueue.take()) { final ResolutionResult result = rscp.permissionManager.resolvePlayer(current); - persistent.put(current, result.permissions); + persistent.put(current, result.getPermissions()); final Player player = current; rscp.getServer().getScheduler().runTask(rscp, new Runnable() { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java index 52610d7..a79bf99 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java @@ -15,10 +15,10 @@ import net.t00thpick1.residence.api.ResidenceManager; import net.t00thpick1.residence.api.areas.ResidenceArea; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; -import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.Engine.Phrases; @@ -36,6 +36,7 @@ public final class BukkitRegionProviders } public synchronized void integrate() { + final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); // WorldGuard if(rscp.settings.isUseWorldGuard()) { @@ -43,10 +44,10 @@ public final class BukkitRegionProviders if(pluginWG != null && pluginWG instanceof WorldGuardPlugin) { this.worldguard = pluginWG; - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_WG_Y.toString())); + console.sendMessage(Phrases.INTEGRATION_WG_Y.toPlayer()); } else { this.worldguard = null; - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_WG_N.toString())); + console.sendMessage(Phrases.INTEGRATION_WG_N.toPlayer()); } } else this.worldguard = null; @@ -57,10 +58,10 @@ public final class BukkitRegionProviders if(pluginR != null && pluginR instanceof Residence) { this.residence = pluginR; - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_R_Y.toString())); + console.sendMessage(Phrases.INTEGRATION_R_Y.toPlayer()); } else { this.residence = null; - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + Phrases.INTEGRATION_R_N.toString())); + console.sendMessage(Phrases.INTEGRATION_R_N.toPlayer()); } } else this.residence = null; diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java index 89dd852..ea5637d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java @@ -1,7 +1,7 @@ package ru.simsonic.rscPermissions.Bukkit.Commands; import java.util.ArrayList; -import java.util.Collections; +import java.util.Map; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; @@ -75,7 +75,7 @@ public class CommandUser 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}\""); + answer.add("{_R}\"" + result.getPrefix() + "{_R}\""); throw new CommandAnswerException(answer); } private void viewSuffix(ResolutionResult result, String user) throws CommandAnswerException @@ -84,7 +84,7 @@ public class CommandUser 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}\""); + answer.add("{_R}\"" + result.getSuffix() + "{_R}\""); throw new CommandAnswerException(answer); } private void listPermissions(ResolutionResult result, String user) throws CommandAnswerException @@ -93,10 +93,8 @@ public class CommandUser 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); + for(Map.Entry entry : result.getPermissions().entrySet()) + answer.add((entry.getValue() ? "{_LG}" : "{_LR}") + entry.getKey()); throw new CommandAnswerException(answer); } private void listGroups(ResolutionResult result, String user) throws CommandAnswerException diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java index 68e3248..e47b0a3 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java @@ -35,14 +35,14 @@ public final class VaultChat extends VaultDeprecatedChat { rscp.bridgeForBukkit.printDebugStackTrace(); final ResolutionResult result = rscp.permissionManager.getResult(player); - return result.prefix; + return result.getPrefix(); } @Override public String getPlayerPrefix(Player player) { rscp.bridgeForBukkit.printDebugStackTrace(); final ResolutionResult result = rscp.permissionManager.getResult(player); - return result.prefix; + return result.getPrefix(); } @Override @Deprecated @@ -50,7 +50,7 @@ public final class VaultChat extends VaultDeprecatedChat { rscp.bridgeForBukkit.printDebugStackTrace(); final ResolutionResult result = rscp.permissionManager.getResult(player); - return result.prefix; + return result.getPrefix(); } // ***** GET PLAYER SUFFIX ***** @Override @@ -58,14 +58,14 @@ public final class VaultChat extends VaultDeprecatedChat { rscp.bridgeForBukkit.printDebugStackTrace(); final ResolutionResult result = rscp.permissionManager.getResult(player); - return result.suffix; + return result.getSuffix(); } @Override public String getPlayerSuffix(Player player) { rscp.bridgeForBukkit.printDebugStackTrace(); final ResolutionResult result = rscp.permissionManager.getResult(player); - return result.suffix; + return result.getSuffix(); } @Override @Deprecated @@ -73,7 +73,7 @@ public final class VaultChat extends VaultDeprecatedChat { rscp.bridgeForBukkit.printDebugStackTrace(); final ResolutionResult result = rscp.permissionManager.getResult(player); - return result.suffix; + return result.getSuffix(); } // ***** SET PLAYER PREFIX ***** @Override diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index db00219..2dcfe42 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -6,6 +6,7 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; @@ -69,11 +70,11 @@ public final class BukkitPluginMain extends JavaPlugin final DatabaseContents contents = localStorage.retrieveContents(); contents.filterServerId(getServer().getServerId()).filterLifetime(); internalCache.fill(contents); - getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic( - (Settings.CHAT_PREFIX + Phrases.FETCHED_LOCAL_CACHE.toString()) + final ConsoleCommandSender console = getServer().getConsoleSender(); + console.sendMessage(Phrases.FETCHED_LOCAL_CACHE.toPlayer() .replace("{:E}", String.valueOf(contents.entities.length)) .replace("{:P}", String.valueOf(contents.permissions.length)) - .replace("{:I}", String.valueOf(contents.inheritance.length)))); + .replace("{:I}", String.valueOf(contents.inheritance.length))); // Integrate Metrics if(settings.isUseMetrics()) try @@ -124,7 +125,7 @@ public final class BukkitPluginMain extends JavaPlugin if(metrics != null) try { - metrics.disable(); + metrics.disable(); } catch(IOException ex) { } metrics = null; diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/IntermediateResult.java b/src/main/java/ru/simsonic/rscPermissions/Engine/IntermediateResult.java new file mode 100644 index 0000000..ff91cd3 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/IntermediateResult.java @@ -0,0 +1,24 @@ +package ru.simsonic.rscPermissions.Engine; + +import java.util.List; +import java.util.Map; + +class IntermediateResult +{ + ResolutionParams params; + String prefix = ""; + String suffix = ""; + List groups; + Map permissions; + /* + void sortPermissions() + { + final Map result = new TreeMap<>(); + final ArrayList sorted = new ArrayList<>(permissions.keySet()); + Collections.sort(sorted); + for(String key : sorted) + result.put(key, permissions.get(key)); + this.permissions = result; + } + */ +} diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index 480951c..50221b2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -3,11 +3,11 @@ package ru.simsonic.rscPermissions.Engine; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; +import java.util.TreeMap; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscPermissions.API.EntityType; import ru.simsonic.rscPermissions.API.RowEntity; @@ -62,7 +62,7 @@ public class InternalCache extends InternalStorage if(implicit_u != null && implicit_u.permissions != null) processPermissions(params, Arrays.asList(implicit_u.permissions)); params.groupList = new LinkedList<>(); - params.finalPerms = new HashMap<>(); + params.finalPerms = new TreeMap<>(); params.instantiator = ""; params.depth = 0; for(RowEntity row : entities_u.values()) @@ -103,8 +103,8 @@ public class InternalCache extends InternalStorage result.suffix = GenericChatCodes.processStringStatic(result.suffix); processPermissions(params, applicablePermissions); result.permissions = params.finalPerms; - result.groups = params.groupList; - result.params = params; + result.groups = params.groupList; + result.params = params; return result; } private ResolutionResult resolveParent(ResolutionParams params) diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java index 7fb080b..8d0210b 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java @@ -6,6 +6,8 @@ import java.io.IOException; import java.io.InputStream; import java.nio.channels.Channels; import java.nio.channels.FileChannel; +import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; +import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.API.TranslationProvider; import ru.simsonic.rscPermissions.BukkitPluginMain; @@ -49,7 +51,7 @@ public enum Phrases HELP_CMD_HELP ("help.cmd-help"), ; private final String node; - private String phrase; + private String phrase; private Phrases(String node) { this.node = node; @@ -59,6 +61,10 @@ public enum Phrases { return phrase; } + public String toPlayer() + { + return GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX + this.toString()); + } public static void applyTranslation(TranslationProvider provider) { for(Phrases value : Phrases.values()) diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java index e88f9f2..217e4f1 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java @@ -7,13 +7,20 @@ import java.util.Map; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscPermissions.API.Settings; -public class ResolutionResult +public class ResolutionResult extends IntermediateResult { - public String prefix = ""; - public String suffix = ""; - public ResolutionParams params; - public Map permissions; - protected List groups; + public String getPrefix() + { + return prefix; + } + public String getSuffix() + { + return suffix; + } + public Map getPermissions() + { + return Collections.unmodifiableMap(permissions); + } public boolean hasPermission(String permission) { for(Map.Entry entry : permissions.entrySet()) diff --git a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java index 22df690..b2eb418 100644 --- a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java @@ -1,7 +1,6 @@ package ru.simsonic.rscPermissions; import java.io.File; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Map; import java.util.logging.Logger; import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase; import ru.simsonic.rscPermissions.Engine.Backends.BackendJson; @@ -19,6 +18,7 @@ public class IndependentMain { System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); System.out.println("https://github.com/SimSonic/rscPermissions/"); + System.out.println(); // OK, IT'S SECURE FROM YOU :) database.initialize(null, "SCOUT:3306/rscp_testing", // DATABASE @@ -51,14 +51,15 @@ public class IndependentMain intCache.fill(contents); final ResolutionResult result = intCache.resolvePlayer("87f946d8212440539d685eab07f8e266"); // Sorted output - ArrayList perms = new ArrayList<>(result.permissions.keySet()); - Collections.sort(perms); - for(String key : perms) - System.out.println("Permission: " + key + " = " + result.permissions.get(key)); + for(Map.Entry entry : result.getPermissions().entrySet()) + System.out.println("Permission: " + entry.getKey() + " = " + entry.getValue()); + System.out.println(); for(String group : result.getOrderedGroups()) System.out.println("Parent: " + group); - System.out.println("Prefix: " + result.prefix); - System.out.println("Suffix: " + result.suffix); + System.out.println(); + System.out.println("Prefix: " + result.getPrefix()); + System.out.println("Suffix: " + result.getSuffix()); + System.out.println(); System.out.println("Done."); } } diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml index 4e6e410..bdfbbc0 100644 --- a/src/main/resources/languages/english.yml +++ b/src/main/resources/languages/english.yml @@ -1,8 +1,8 @@ generic: enabled: "[rscp] rscPermissions has been successfully enabled." disabled: "[rscp] rscPermissions has been disabled." - reloaded: "[rscp] rscPermissions has been reloaded." metrics: "[rscp] Metrics enabled." + reloaded: "{_LG}Plugin and it's configuration were reloaded." player-only: "{_LR}This command cannot be run from console." console-only: "{_LR}This command should be run from console." server-is-full: "{_LR}Server is full, empty slots are in reserve." diff --git a/src/main/resources/languages/russian.yml b/src/main/resources/languages/russian.yml index a97a674..479999b 100644 --- a/src/main/resources/languages/russian.yml +++ b/src/main/resources/languages/russian.yml @@ -1,19 +1,19 @@ generic: enabled: "[rscp] Плагин rscPermissions успешно включён." disabled: "[rscp] Плагин rscPermissions выключен." - reloaded: "[rscp] Плагин rscPermissions перезапущен, конфигурация перечитана." metrics: "[rscp] Включён сбор статистической информации (mcstats.org)." + reloaded: "{_LG}Плагин перезапущен, конфигурация перечитана." player-only: "{_LR}Эта команда не может быть использована из консоли." console-only: "{_LR}Эта команда может быть использована только из консоли." server-is-full: "{_LR}Сервер заполнен, оставшиеся слоты находятся в резерве." maintenance-on: "{_YL}Сервер закрыт на техническое обслуживание." maintenance-off: "{_YL}Сервер открыт для свободного входа игроков." integration: - vault-yes: "{_LG}Vault обнаружён и подключён." + vault-yes: "{_LG}Vault обнаружен и подключён." vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." - worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." + worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружен и подключён." worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." - worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." + worldguard-yes: "{_LG}WorldGuard обнаружен и подключён." worldguard-no: "{_YL}WorldGuard не обнаружен." worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." residence-yes: "{_LG}Residence обнаружён и подключён."