From a2c442fe86de8a81d4a2ba66f37dab61ea9a4463 Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Mon, 2 Mar 2015 11:23:03 +0600 Subject: [PATCH] Version 0.9.6a: * Implicit user/group permissions. * Fixes in prefix/suffix calculation. * On/off debug info for players. * EntityType and PlayerType enum's entries are UPPERCASE. * Linking to the newest rscUtilityLibrary. --- pom.xml | 4 +- .../rscPermissions/API/EntityType.java | 8 +-- .../rscPermissions/API/PlayerType.java | 34 ++++++------- .../rscPermissions/API/RowInheritance.java | 8 +-- .../rscPermissions/API/RowPermission.java | 2 +- .../Bukkit/BukkitPermissionManager.java | 22 +++++++-- .../Bukkit/Commands/BukkitCommands.java | 46 +++++++++++------ .../Bukkit/PermissionsEx_YAML.java | 2 +- .../Bukkit/RegionUpdateObserver.java | 2 +- .../rscPermissions/BukkitPluginMain.java | 15 +++--- .../rscPermissions/Engine/InternalCache.java | 49 +++++++++++-------- .../rscPermissions/Engine/Phrases.java | 13 ++--- .../rscPermissions/IndependentMain.java | 6 +-- src/main/resources/languages/english.yml | 3 ++ src/main/resources/languages/russian.yml | 3 ++ 15 files changed, 132 insertions(+), 85 deletions(-) diff --git a/pom.xml b/pom.xml index ed1a89a..d1b797c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ru.simsonic rscPermissions - 0.9.4a + 0.9.6a jar rscPermissions @@ -66,7 +66,7 @@ ru.simsonic rscUtilityLibrary - 2.0.2 + 2.0.3 compile jar diff --git a/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java b/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java index 89600a1..dba6307 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java @@ -2,9 +2,9 @@ package ru.simsonic.rscPermissions.API; public enum EntityType { - group(0), - player(1), - unknown(-1); + GROUP(0), + PLAYER(1), + UNKNOWN(-1); private final int value; private EntityType(int value) { @@ -15,6 +15,6 @@ public enum EntityType for(EntityType constant : EntityType.values()) if(constant.value == value) return constant; - return unknown; + return UNKNOWN; } } diff --git a/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java b/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java index 15d90a5..007adc6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java @@ -4,12 +4,12 @@ import java.util.regex.Pattern; public enum PlayerType { - name(0), // 16 chars max - hyphenatedUUID(1), // 550e8400-e29b-41d4-a716-446655440000 - dehyphenatedUUID(2), // 550e8400e29b41d4a716446655440000 - internetWildcard(3), // 192.168.*.* - internetSubnetMask(4), // 192.168.1.0/16 - inapplicable(-1); + NAME(0), // 16 chars max + HYPHENATED_UUID(1), // 550e8400-e29b-41d4-a716-446655440000 + DEHYPHENATED_UUID(2), // 550e8400e29b41d4a716446655440000 + INTERNET_WILDCARD(3), // 192.168.*.* + INTERNET_SUBNETMASK(4), // 192.168.1.0/16 + INAPPLICABLE(-1); private final int value; private PlayerType(int value) { @@ -20,7 +20,7 @@ public enum PlayerType for(PlayerType constant : PlayerType.values()) if(constant.value == value) return constant; - return inapplicable; + return INAPPLICABLE; } private static final Pattern nicknameRegExp = Pattern.compile("^[a-zA-Z0-9_-]{3,16}$"); private static final Pattern hyphenatedRegExp = Pattern.compile("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"); @@ -39,13 +39,13 @@ public enum PlayerType public static PlayerType scanPlayerEntity(String entity) { if(entity == null || "".equals(entity)) - return name; + return NAME; if(nicknameRegExp.matcher(entity).matches()) - return name; + return NAME; if(hyphenatedRegExp.matcher(entity.toLowerCase()).matches()) - return hyphenatedUUID; + return HYPHENATED_UUID; if(dehyphenatedRegExp.matcher(entity.toLowerCase()).matches()) - return dehyphenatedUUID; + return DEHYPHENATED_UUID; /* final Matcher mIP1 = ipWildcardRegExp.matcher(entity); if(mIP1.matches()) @@ -56,7 +56,7 @@ public enum PlayerType final String a4 = mIP1.group(4); // TO DO long address = 0, mask = 0; - return internetWildcard; + return INTERNET_WILDCARD; } final Matcher mIP2 = ipSubnetMaskRegExp.matcher(entity); if(mIP2.matches()) @@ -68,10 +68,10 @@ public enum PlayerType final String sn = mIP1.group(5); // TO DO long address = 0, mask = 0; - return internetSubnetMask; + return INTERNET_SUBNETMASK; } */ - return inapplicable; + return INAPPLICABLE; } /* public static void getAddressDetails(String entity, RowPermission row) @@ -109,11 +109,11 @@ public enum PlayerType return false; switch(this) { - case name: + case NAME: return identifier.equals(entity); - case hyphenatedUUID: + case HYPHENATED_UUID: identifier = identifier.replace("-", ""); - case dehyphenatedUUID: + case DEHYPHENATED_UUID: return entity.equalsIgnoreCase(identifier); } return false; diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java index 1d47286..dbff862 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java @@ -46,15 +46,15 @@ public class RowInheritance implements Cloneable, Comparable } public boolean isEntityApplicable(String identifier) { - if(EntityType.group.equals(childType)) + if(EntityType.GROUP.equals(childType)) return entity.equalsIgnoreCase(identifier); switch(playerType) { - case name: + case NAME: return entity.equals(identifier); - case hyphenatedUUID: + case HYPHENATED_UUID: identifier = identifier.replace("-", ""); - case dehyphenatedUUID: + case DEHYPHENATED_UUID: return entity.equals(identifier); } // TO DO diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java b/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java index 667027e..bb0dcac 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java @@ -21,7 +21,7 @@ public class RowPermission implements Cloneable } public boolean isEntityApplicable(String identifier) { - if(EntityType.group.equals(entityType)) + if(EntityType.GROUP.equals(entityType)) return entity.equalsIgnoreCase(identifier); // TO DO return false; diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index 6809eb3..de19de0 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -3,6 +3,7 @@ import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -21,13 +22,14 @@ public class BukkitPermissionManager extends RestartableThread { this.rscp = plugin; } - private final LinkedBlockingQueue updateQueue = new LinkedBlockingQueue<>(); + private final LinkedBlockingQueue updateQueue = new LinkedBlockingQueue<>(); private final Map attachments = new HashMap<>(); private final Map> persistentPermissions = new HashMap<>(); private final Map> transientPermissions = new HashMap<>(); - private final Map> groups = new ConcurrentHashMap<>(); - private final Map prefixes = new ConcurrentHashMap<>(); - private final Map suffixes = new ConcurrentHashMap<>(); + private final Map> groups = new ConcurrentHashMap<>(); + private final Map prefixes = new ConcurrentHashMap<>(); + private final Map suffixes = new ConcurrentHashMap<>(); + private final Set debug = new HashSet<>(); public void recalculateOnlinePlayers() { updateQueue.addAll(rscp.getServer().getOnlinePlayers()); @@ -71,6 +73,7 @@ public class BukkitPermissionManager extends RestartableThread suffixes.remove(player); persistentPermissions.remove(player); transientPermissions.remove(player); + debug.remove(player); } @Override public void run() @@ -151,4 +154,15 @@ public class BukkitPermissionManager extends RestartableThread result.add(socketAddress.getAddress().getHostAddress()); return result.toArray(new String[result.size()]); } + public boolean isDebugging(Player target) + { + return debug.contains(target); + } + public void setDebugging(Player target, boolean value) + { + if(value) + debug.add(target); + else + debug.remove(target); + } } 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 2b785d7..4f685ec 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -4,14 +4,15 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Map; import java.util.logging.Level; -import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.Backends.DatabaseContents; import ru.simsonic.rscPermissions.Bukkit.PermissionsEx_YAML; import ru.simsonic.rscPermissions.BukkitPluginMain; -import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException; +import ru.simsonic.rscPermissions.Engine.Phrases; +import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; import ru.simsonic.rscUtilityLibrary.RestartableThread; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; @@ -127,22 +128,13 @@ public class BukkitCommands threadInsertExampleRows.startDeamon(); return threadInsertExampleRows; } - public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandAnswerException - { - switch(cmd.getName().toLowerCase()) - { - case "rscp": - onCommandHub(sender, args); - break; - } - } - private void onCommandHub(CommandSender sender, String[] args) throws CommandAnswerException + public void onCommandHub(CommandSender sender, String[] args) throws CommandAnswerException { final ArrayList help = new ArrayList<>(); if(sender.hasPermission("rscp.admin")) help.add("/rscp (user|group) {_LS}-- PermissionsEx-like admin commands"); if(sender.hasPermission("rscp.admin.lock")) - help.add("/rscp (lock|unlock) {_LS}-- maintenance mode control"); + help.add("/rscp (lock [mode]|unlock) {_LS}-- maintenance mode control"); if(sender.hasPermission("rscp.admin")) { help.add("/rscp (examplerows|import) {_LS}-- possible useful things"); @@ -252,8 +244,34 @@ public class BukkitCommands return; case "debug": /* rscp debug [yes|on|no|off|toggle] */ + if(sender instanceof ConsoleCommandSender) + throw new CommandAnswerException("{_LR}This command cannot be run from console."); if(sender.hasPermission("rscp.admin")) - throw new CommandAnswerException("Not implemented yet."); + { + final Player player = (Player)sender; + boolean isDebugging = rscp.permissionManager.isDebugging(player); + if(args.length >= 2) + switch(args[1].toLowerCase()) + { + case "yes": + case "on": + isDebugging = true; + break; + case "no": + case "off": + isDebugging = false; + break; + case "toggle": + isDebugging = !isDebugging; + break; + default: + throw new CommandAnswerException(help); + } + else + isDebugging = !isDebugging; + rscp.permissionManager.setDebugging(player, isDebugging); + throw new CommandAnswerException(isDebugging ? Phrases.DEBUG_ON.toString() : Phrases.DEBUG_OFF.toString()); + } return; case "help": default: diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PermissionsEx_YAML.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PermissionsEx_YAML.java index b0fd002..deb3d70 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PermissionsEx_YAML.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PermissionsEx_YAML.java @@ -3,7 +3,7 @@ import java.io.File; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException; +import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; public final class PermissionsEx_YAML { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java index 59bc028..b4b396d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java @@ -1,7 +1,7 @@ package ru.simsonic.rscPermissions.Bukkit; import org.bukkit.entity.Player; import ru.simsonic.rscPermissions.BukkitPluginMain; -import ru.simsonic.rscUtilityLibrary.BukkitListeners.MovingPlayersCatcher; +import ru.simsonic.rscUtilityLibrary.Bukkit.Listeners.MovingPlayersCatcher; import ru.simsonic.rscUtilityLibrary.RestartableThread; public class RegionUpdateObserver extends RestartableThread diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index 960db26..8bb9822 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -20,7 +20,7 @@ import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands; import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver; import ru.simsonic.rscPermissions.Engine.InternalCache; import ru.simsonic.rscPermissions.Engine.Phrases; -import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException; +import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; public final class BukkitPluginMain extends JavaPlugin @@ -41,7 +41,7 @@ public final class BukkitPluginMain extends JavaPlugin public void onLoad() { settings.onLoad(); - consoleLog.log(Level.INFO, "[rscp] This server's ID is '{0}'. You can change it in server.properties.", getServer().getServerId()); + consoleLog.log(Level.INFO, "[rscp] This server`s ID is \"{0}\". You can change it in server.properties.", getServer().getServerId()); consoleLog.log(Level.INFO, "[rscp] rscPermissions has been loaded."); } @Override @@ -66,7 +66,6 @@ public final class BukkitPluginMain extends JavaPlugin }); // Integrate Metrics if(settings.isUseMetrics()) - { try { metrics = new MetricsLite(this); @@ -75,7 +74,6 @@ public final class BukkitPluginMain extends JavaPlugin } catch(IOException ex) { consoleLog.log(Level.INFO, "[rscp][Metrics] Exception: {0}", ex); } - } // Register event's dispatcher getServer().getPluginManager().registerEvents(bukkitListener, this); regionUpdateObserver.registerListeners(); @@ -125,12 +123,15 @@ public final class BukkitPluginMain extends JavaPlugin { try { - commandHelper.onCommand(sender, cmd, label, args); + switch(cmd.getName().toLowerCase()) + { + case "rscp": + commandHelper.onCommandHub(sender, args); + break; + } } catch(CommandAnswerException ex) { for(String answer : ex.getMessageArray()) sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + answer)); - } catch(NullPointerException ex) { - // These will never occur! I hope... } return true; } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index 139f0fd..702122b 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -21,6 +21,8 @@ public class InternalCache private final HashMap entities_u = new HashMap<>(); private final RowInheritance defaultInheritance = new RowInheritance(); private boolean alwaysInheritDefaultGroup = false; + private RowEntity implicit_g; + private RowEntity implicit_u; public void setDefaultGroup(String defaultGroup, boolean alwaysInheritDefaultGroup) { defaultInheritance.parent = defaultGroup; @@ -33,13 +35,15 @@ public class InternalCache importEntities(contents); importPermissions(contents.permissions); importInheritance(contents.inheritance); + implicit_g = entities_g.get(""); + implicit_u = entities_u.get(""); } private void importEntities(DatabaseContents contents) { final HashSet names_u = new HashSet<>(); final HashSet names_g = new HashSet<>(); for(RowEntity row : contents.entities) - if(row.entityType == EntityType.group) + if(row.entityType == EntityType.GROUP) { names_g.add(row.entity); entities_g.put(row.entity.toLowerCase(), row); @@ -48,14 +52,14 @@ public class InternalCache entities_u.put(row.entity, row); } for(RowPermission row : contents.permissions) - if(row.entityType == EntityType.group) + if(row.entityType == EntityType.GROUP) names_g.add(row.entity); else names_u.add(row.entity); for(RowInheritance row : contents.inheritance) { names_g.add(row.parent); - if(row.childType == EntityType.group) + if(row.childType == EntityType.GROUP) names_g.add(row.entity); else names_u.add(row.entity); @@ -68,7 +72,7 @@ public class InternalCache { final RowEntity dummy = new RowEntity(); dummy.entity = name; - dummy.entityType = EntityType.group; + dummy.entityType = EntityType.GROUP; entities_g.put(groupInternalName, dummy); } } @@ -77,7 +81,7 @@ public class InternalCache { final RowEntity dummy = new RowEntity(); dummy.entity = name; - dummy.entityType = EntityType.player; + dummy.entityType = EntityType.PLAYER; entities_u.put(name, dummy); } for(RowEntity row : entities_u.values()) @@ -88,7 +92,7 @@ public class InternalCache final ArrayList permissions_p2g = new ArrayList<>(); final ArrayList permissions_p2u = new ArrayList<>(); for(RowPermission row : rows) - if(row.entityType == EntityType.group) + if(row.entityType == EntityType.GROUP) { row.entityObject = entities_g.get(row.entity.toLowerCase()); permissions_p2g.add(row); @@ -118,7 +122,7 @@ public class InternalCache final ArrayList inheritance_g2g = new ArrayList<>(); final ArrayList inheritance_g2u = new ArrayList<>(); for(RowInheritance row : rows) - if(row.childType == EntityType.group) + if(row.childType == EntityType.GROUP) { row.entityChild = entities_g.get(row.entity.toLowerCase()); row.entityParent = entities_g.get(row.parent.toLowerCase()); @@ -148,7 +152,7 @@ public class InternalCache Collections.sort(inheritances); entry.getValue().inheritance = inheritances.toArray(new RowInheritance[inheritances.size()]); } - defaultInheritance.childType = EntityType.player; + defaultInheritance.childType = EntityType.PLAYER; defaultInheritance.entityParent = entities_g.get(defaultInheritance.parent.toLowerCase()); } public synchronized ResolutionResult resolvePlayer(String player) @@ -166,6 +170,8 @@ public class InternalCache { final ArrayList applicablePermissions = new ArrayList<>(); final ArrayList applicableInheritance = new ArrayList<>(); + if(implicit_u != null && implicit_u.permissions != null) + processPermissions(params, Arrays.asList(implicit_u.permissions)); params.groupList = new LinkedHashSet<>(); params.finalPerms = new HashMap<>(); params.instantiator = ""; @@ -199,6 +205,8 @@ public class InternalCache } private ResolutionResult resolveParent(ResolutionParams params) { + if(implicit_g != null && implicit_g.permissions != null) + processPermissions(params, Arrays.asList(implicit_g.permissions)); final RowEntity currentParent = params.parentEntity; final String instantiator = params.instantiator; final ArrayList intermediateResults = new ArrayList<>(); @@ -235,21 +243,18 @@ public class InternalCache result.prefix = "%"; if(result.suffix == null || "".equals(result.suffix)) result.suffix = "%"; - if(intermediate.size() > 0) + final StringBuilder sbp = new StringBuilder(); + final StringBuilder sbs = new StringBuilder(); + for(ResolutionResult inherited : intermediate) { - final StringBuilder sbp = new StringBuilder(); - final StringBuilder sbs = new StringBuilder(); - for(ResolutionResult inherited : intermediate) - { - if(inherited.prefix != null) - sbp.append(inherited.prefix); - if(inherited.suffix != null) - sbs.append(inherited.suffix); - } - intermediate.clear(); - result.prefix = result.prefix.replace(Settings.textInheriter, sbp.toString()); - result.suffix = result.suffix.replace(Settings.textInheriter, sbs.toString()); + if(inherited.prefix != null) + sbp.append(inherited.prefix); + if(inherited.suffix != null) + sbs.append(inherited.suffix); } + intermediate.clear(); + 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); return result; @@ -282,5 +287,7 @@ public class InternalCache { entities_g.clear(); entities_u.clear(); + implicit_g = null; + implicit_u = null; } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java index 3a29bf8..072edff 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java @@ -20,6 +20,8 @@ public enum Phrases INTEGRATION_WG_N ("integration.worldguard-no"), INTEGRATION_R_Y ("integration.residence-yes"), INTEGRATION_R_N ("integration.residence-no"), + DEBUG_ON ("debug.enabled"), + DEBUG_OFF ("debug.disabled"), MYSQL_FETCHED ("mysql.fetched"), ; private final String node; @@ -48,12 +50,11 @@ public enum Phrases try { final File langFile = new File(workingDir, langName + ".yml"); - if(!langFile.isFile()) - { - final FileChannel fileChannel = new FileOutputStream(langFile).getChannel(); - final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); - fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE); - } + if(langFile.isFile()) + langFile.delete(); + final FileChannel fileChannel = new FileOutputStream(langFile).getChannel(); + final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); + fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE); } catch(IOException ex) { } } diff --git a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java index e9e84a8..d9cae89 100644 --- a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java @@ -36,15 +36,15 @@ public class IndependentMain System.out.println("Loading permissions from json files."); final DatabaseContents contents = localJsn.retrieveContents(); System.out.println("Filter and calculating permission tree."); - contents.filterServerId("localtest").filterLifetime(); + contents.filterServerId("Primary").filterLifetime(); if(contents.isEmpty()) { System.out.println("Permission database is empty, stopping."); return; } - intCache.setDefaultGroup("Moderators", true); + intCache.setDefaultGroup("Default", true); intCache.fill(contents); - final ResolutionResult result = intCache.resolvePlayer("rscpTester"); + final ResolutionResult result = intCache.resolvePlayer("Reality_SC"); // Sorted output ArrayList perms = new ArrayList<>(result.permissions.keySet()); Collections.sort(perms); diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml index c8db691..67ca3d0 100644 --- a/src/main/resources/languages/english.yml +++ b/src/main/resources/languages/english.yml @@ -10,5 +10,8 @@ integration: worldguard-no: "{_YL}WorldGuard was not found." residence-yes: "{_LG}Residence was found and integrated." residence-no: "{_YL}Residence was not found." +debug: + enable: "{_LS}You will see a lot of debugging information now." + disable: "{_LS}Debugging information is now hidden for you." mysql: fetched: "[rscp] " diff --git a/src/main/resources/languages/russian.yml b/src/main/resources/languages/russian.yml index df24105..c9ffa33 100644 --- a/src/main/resources/languages/russian.yml +++ b/src/main/resources/languages/russian.yml @@ -10,5 +10,8 @@ integration: worldguard-no: "{_YL}WorldGuard не обнаружен." residence-yes: "{_LG}Residence обнаружён и подключён." residence-no: "{_YL}Residence не обнаружен." +debug: + enable: "{_LS}Теперь Вы будете видеть отладочную информацию." + disable: "{_LS}Отладочная информация теперь скрыта от Вас." mysql: fetched: "[rscp] "