diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index de19de0..8a914c1 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -10,10 +10,12 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionAttachment; +import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.Engine.ResolutionParams; import ru.simsonic.rscPermissions.Engine.ResolutionResult; import ru.simsonic.rscUtilityLibrary.RestartableThread; +import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; public class BukkitPermissionManager extends RestartableThread { @@ -73,7 +75,10 @@ public class BukkitPermissionManager extends RestartableThread suffixes.remove(player); persistentPermissions.remove(player); transientPermissions.remove(player); - debug.remove(player); + synchronized(debug) + { + debug.remove(player); + } } @Override public void run() @@ -115,6 +120,12 @@ public class BukkitPermissionManager extends RestartableThread final Boolean asterisk = attachment.getPermissions().get("*"); if(rscp.settings.isAsteriskOP()) player.setOp((asterisk != null) ? asterisk : false); + // Debugging information + if(isDebugging(player)) + player.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + + "[DEBUG] {_DS}Inheritances list: {_LS}" + result.groups.toString() + + "{_DS}; you have total {_LS}" + attachment.getPermissions().size() + + "{_DS} permissions.")); } }); } @@ -156,13 +167,19 @@ public class BukkitPermissionManager extends RestartableThread } public boolean isDebugging(Player target) { - return debug.contains(target); + synchronized(debug) + { + return debug.contains(target); + } } public void setDebugging(Player target, boolean value) { - if(value) - debug.add(target); - else - debug.remove(target); + synchronized(debug) + { + if(value) + debug.add(target); + else + debug.remove(target); + } } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java index b4b396d..17d8266 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/RegionUpdateObserver.java @@ -33,7 +33,7 @@ public class RegionUpdateObserver extends RestartableThread for(; !Thread.interrupted(); Thread.sleep(granularity)) for(Player player : movedPlayers.getMovedPlayersAsync()) if(rscp.regionListProvider.isRegionListChanged(player)) - rscp.permissionManager.resolvePlayer(player); + rscp.permissionManager.recalculatePlayer(player); } catch(InterruptedException ex) { } } diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index 8bb9822..10c6a13 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -40,6 +40,7 @@ public final class BukkitPluginMain extends JavaPlugin @Override public void onLoad() { + Phrases.extractTranslations(getDataFolder()); 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] rscPermissions has been loaded."); @@ -47,12 +48,11 @@ public final class BukkitPluginMain extends JavaPlugin @Override public void onEnable() { - Phrases.extractAll(getDataFolder()); settings.readSettings(); internalCache.setDefaultGroup( settings.getDefaultGroup(), settings.isDefaultForever()); - Phrases.translate(settings.getTranslationProvider()); + Phrases.applyTranslation(settings.getTranslationProvider()); // Restore temporary cached data from json files final DatabaseContents contents = localStorage.retrieveContents(); contents.filterServerId(getServer().getServerId()).filterLifetime(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java index 072edff..9381048 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java @@ -20,8 +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"), + DEBUG_ON ("debug.enable"), + DEBUG_OFF ("debug.disable"), MYSQL_FETCHED ("mysql.fetched"), ; private final String node; @@ -35,17 +35,17 @@ public enum Phrases { return phrase; } - public static void translate(TranslationProvider provider) + public static void applyTranslation(TranslationProvider provider) { for(Phrases value : Phrases.values()) value.phrase = provider.getString(value.node); } - public static void extractAll(File workingDir) + public static void extractTranslations(File workingDir) { - extract(workingDir, "english"); - extract(workingDir, "russian"); + extractTranslation(workingDir, "english"); + extractTranslation(workingDir, "russian"); } - public static void extract(File workingDir, String langName) + private static void extractTranslation(File workingDir, String langName) { try { @@ -53,6 +53,7 @@ public enum Phrases if(langFile.isFile()) langFile.delete(); final FileChannel fileChannel = new FileOutputStream(langFile).getChannel(); + fileChannel.force(true); final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE); } catch(IOException ex) {