From 489deac61160e5f3e2c347902d6ee88e55add53c Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Wed, 11 Feb 2015 12:14:11 +0600 Subject: [PATCH] * Json backend reading .jsons. * Maintenance moved to Bukkit impl. * Removed a little bit of code which is now reused from rscUtilityLibrary. * Started localization coding (en/ru). * Other things. --- pom.xml | 42 ++++++++------- .../simsonic/rscPermissions/API/Settings.java | 2 +- .../rscPermissions/Backends/BackendJson.java | 29 ++++++++++- .../BukkitMaintenance.java} | 7 +-- .../Bukkit/BukkitPermissions.java | 33 ++---------- .../rscPermissions/BukkitPluginMain.java | 3 +- .../rscPermissions/DataTypes/AbstractRow.java | 2 +- .../CommandHelperAnswerException.java | 23 --------- .../ru/simsonic/rscPermissions/Phrases.java | 51 +++++++++++++++++++ .../rscPermissions/RegionUpdateObserver.java | 30 ++--------- src/main/resources/config.yml | 14 +---- src/main/resources/languages/english.yml | 0 src/main/resources/languages/russian.yml | 0 src/main/resources/plugin.yml | 8 +-- 14 files changed, 122 insertions(+), 122 deletions(-) rename src/main/java/ru/simsonic/rscPermissions/{MaintenanceMode.java => Bukkit/BukkitMaintenance.java} (92%) delete mode 100644 src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java create mode 100644 src/main/java/ru/simsonic/rscPermissions/Phrases.java create mode 100644 src/main/resources/languages/english.yml create mode 100644 src/main/resources/languages/russian.yml diff --git a/pom.xml b/pom.xml index 63157c6..920cf68 100644 --- a/pom.xml +++ b/pom.xml @@ -4,21 +4,21 @@ ru.simsonic rscPermissions - 0.9.1a + 0.9.2a jar rscPermissions - https://github.com/SimSonic/rscPermissions + https://github.com/SimSonic/rscPermissions/ sponge-repo - http://repo.spongepowered.org/Sponge/maven + http://repo.spongepowered.org/Sponge/maven/ bukkit-repo - http://repo.bukkit.org/content/groups/public + http://repo.bukkit.org/content/groups/public/ spigot-repo @@ -32,7 +32,7 @@ vault-repo - http://nexus.theyeticave.net/content/repositories/pub_releases + http://nexus.theyeticave.net/content/repositories/pub_releases/ @@ -58,21 +58,21 @@ com.google.code.gson gson 2.3.1 - provided + compile org.bukkit bukkit - 1.7.9-R0.2 + 1.8-R0.1-SNAPSHOT provided - - org.spongepowered - spongeapi - 1.0 - provided + ru.simsonic + rscUtilityLibrary + 2.0.1 + compile + jar @@ -107,13 +107,12 @@ 3.0-SNAPSHOT provided - + - ru.simsonic - rscUtilityLibrary - 2.0.0 - compile - jar + org.spongepowered + spongeapi + 1.0 + provided @@ -164,14 +163,19 @@ false + com.google.code.gson:gson ru.simsonic:rscUtilityLibrary org.mcstats.bukkit:metrics-lite + + com.google.gson + ${project.groupId}.${project.artifactId}.com-google-gson-shaded + ru.simsonic.rscUtilityLibrary - ru.simsonic.rscPermissions.rscUtilityLibraryShaded + ${project.groupId}.${project.artifactId}.ru-simsonic-rscUtilityLibrary-shaded diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java index e93f4b7..e1b9914 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java @@ -17,7 +17,7 @@ public interface Settings public boolean isUseResidence(); public boolean isUseWorldGuard(); public long getRegionFinderGranularity(); - public ConnectionHelper getConnectionChain(); public int getAutoReloadDelayTicks(); public boolean isUseMetrics(); + public ConnectionHelper getConnectionChain(); } diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java index db70937..ad676de 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java @@ -1,5 +1,11 @@ package ru.simsonic.rscPermissions.Backends; import com.google.gson.Gson; +import com.google.gson.stream.JsonReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStreamReader; +import java.nio.charset.Charset; import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowPermission; @@ -8,20 +14,41 @@ public class BackendJson { private final static String localEntitiesFile = "entities.json"; private final static String localPermissionsFile = "permissions.json"; - private final static String localInheritanceFile = "inheritance.json"; + private final static String localInheritanceFile = "inheritance.json"; public RowEntity[] fetchEntities() { final Gson gson = new Gson(); + try + { + JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream( + new File(localEntitiesFile)), Charset.forName("UTF-8"))); + return gson.fromJson(jr, RowEntity[].class); + } catch(FileNotFoundException ex) { + } return null; } public RowPermission[] fetchPermissions() { final Gson gson = new Gson(); + try + { + JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream( + new File(localEntitiesFile)), Charset.forName("UTF-8"))); + return gson.fromJson(jr, RowPermission[].class); + } catch(FileNotFoundException ex) { + } return null; } public RowInheritance[] fetchInheritance() { final Gson gson = new Gson(); + try + { + JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream( + new File(localEntitiesFile)), Charset.forName("UTF-8"))); + return gson.fromJson(jr, RowInheritance[].class); + } catch(FileNotFoundException ex) { + } return null; } } diff --git a/src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java similarity index 92% rename from src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java rename to src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java index c599d00..b943a1d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions; +package ru.simsonic.rscPermissions.Bukkit; import java.util.HashMap; import java.util.UUID; import org.bukkit.Bukkit; @@ -6,12 +6,13 @@ import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.server.ServerListPingEvent; +import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; -public class MaintenanceMode implements Listener +public class BukkitMaintenance implements Listener { private final BukkitPluginMain plugin; - public MaintenanceMode(BukkitPluginMain rscp) + public BukkitMaintenance(BukkitPluginMain rscp) { this.plugin = rscp; } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java index 6057df3..939f7fe 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java @@ -1,22 +1,20 @@ package ru.simsonic.rscPermissions.Bukkit; -import java.util.Arrays; import java.util.HashMap; import java.util.concurrent.LinkedBlockingQueue; -import java.util.logging.Level; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionAttachment; import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.InternalCache.BrandNewCache; import ru.simsonic.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscUtilityLibrary.RestartableThread; -public class BukkitPermissions implements Runnable +public class BukkitPermissions extends RestartableThread { private final BukkitPluginMain rscp; public BukkitPermissions(BukkitPluginMain plugin) { this.rscp = plugin; } - private Thread thread; private final LinkedBlockingQueue updateQueue = new LinkedBlockingQueue<>(); private final HashMap prefixes = new HashMap<>(); private final HashMap suffixes = new HashMap<>(); @@ -25,7 +23,7 @@ public class BukkitPermissions implements Runnable public final HashMap attachments = new HashMap<>(); public void recalculateOnlinePlayers() { - updateQueue.addAll(Arrays.asList(rscp.getServer().getOnlinePlayers())); + updateQueue.addAll(rscp.getServer().getOnlinePlayers()); rscp.scheduleAutoUpdate(); } public void recalculatePlayer(Player player) @@ -36,33 +34,10 @@ public class BukkitPermissions implements Runnable } catch(InterruptedException ex) { } } - public void start() - { - stop(); - thread = new Thread(this); - thread.start(); - } - public void stop() - { - if(thread != null) - { - if(thread.isAlive()) - { - try - { - thread.interrupt(); - thread.join(); - } catch(InterruptedException ex) { - BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in BukkitPermissions: {0}", ex); - } - } - thread = null; - } - } @Override public void run() { - Thread.currentThread().setName("rscp:PermissionManager"); + Thread.currentThread().setName("rscp:" + this.getClass().getSimpleName()); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); try { diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index d3e09e4..7b3b3c0 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -1,4 +1,5 @@ package ru.simsonic.rscPermissions; +import ru.simsonic.rscPermissions.Bukkit.BukkitMaintenance; import ru.simsonic.rscPermissions.API.Settings; import java.io.IOException; import java.util.logging.Level; @@ -27,7 +28,7 @@ public final class BukkitPluginMain extends JavaPlugin public final RegionListProviders regionListProvider = new RegionListProviders(this); private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this); public final CommandHelper commandHelper = new CommandHelper(this); - public final MaintenanceMode maintenance = new MaintenanceMode(this); + public final BukkitMaintenance maintenance = new BukkitMaintenance(this); public ConnectionHelper connectionList; private MetricsLite metrics; @Override diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java index 13e5a93..b1cb3c2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java @@ -6,7 +6,7 @@ public abstract class AbstractRow public int id = 0; public static enum Table { - entities, permissions, inheritance, ladders, unknown; + entities, permissions, inheritance, unknown; } public abstract Table getTable(); private static final Pattern patternUUID = Pattern.compile( diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java deleted file mode 100644 index 697ffea..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.simsonic.rscPermissions.DataTypes; -import java.util.List; - -public class CommandHelperAnswerException extends Exception -{ - private final String[] message; - public CommandHelperAnswerException(String message) - { - this.message = new String[]{message}; - } - public CommandHelperAnswerException(String[] messages) - { - this.message = messages; - } - public CommandHelperAnswerException(List messages) - { - this.message = messages.toArray(new String[messages.size()]); - } - public String[] getMessageArray() - { - return message; - } -} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/Phrases.java b/src/main/java/ru/simsonic/rscPermissions/Phrases.java new file mode 100644 index 0000000..ceb9308 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Phrases.java @@ -0,0 +1,51 @@ +package ru.simsonic.rscPermissions; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.logging.Level; +import org.bukkit.configuration.file.YamlConfiguration; + +public enum Phrases +{ + PLUGIN_ENABLED ("generic.enabled"), + PLUGIN_DISABLED ("generic.disabled"), + PLUGIN_METRICS ("generic.metrics"), + PLUGIN_RELOADED ("generic.reloaded"), + FETCHED ("generic.fetched"); + private final String node; + private String phrase; + private Phrases(String node) + { + this.node = node; + } + @Override + public String toString() + { + return phrase; + } + public static void fill(BukkitPluginMain plugin, String langName) + { + final File langFile = new File(plugin.getDataFolder(), langName + ".yml"); + final YamlConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile); + for(Phrases value : Phrases.values()) + value.phrase = langConfig.getString(value.node, value.node); + } + public static void extract(BukkitPluginMain plugin, String langName) + { + try + { + final File langFile = new File(plugin.getDataFolder(), langName + ".yml"); + if(!langFile.isFile()) + { + final YamlConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile); + final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); + YamlConfiguration langSource = YamlConfiguration.loadConfiguration(new InputStreamReader(langStream)); + langConfig.setDefaults(langSource); + langConfig.save(langFile); + } + } catch(IOException ex) { + BukkitPluginMain.consoleLog.log(Level.WARNING, "Cannot extract language: {0}", langName); + } + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java b/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java index b0be6a1..9c88f28 100644 --- a/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java +++ b/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java @@ -1,15 +1,14 @@ package ru.simsonic.rscPermissions; -import java.util.logging.Level; import org.bukkit.entity.Player; import ru.simsonic.rscUtilityLibrary.BukkitListeners.MovingPlayersCatcher; +import ru.simsonic.rscUtilityLibrary.RestartableThread; -public class RegionUpdateObserver implements Runnable +public class RegionUpdateObserver extends RestartableThread { private static final long granularityMin = 20; private static final long granularityMax = 10000; private final BukkitPluginMain rscp; private final MovingPlayersCatcher movedPlayers = new MovingPlayersCatcher(); - private Thread thread; RegionUpdateObserver(BukkitPluginMain rscp) { this.rscp = rscp; @@ -18,35 +17,12 @@ public class RegionUpdateObserver implements Runnable { rscp.getServer().getPluginManager().registerEvents(movedPlayers, rscp); } - public void start() - { - stop(); - thread = new Thread(this); - thread.start(); - } - public void stop() - { - if(thread != null) - { - if(thread.isAlive()) - { - try - { - thread.interrupt(); - thread.join(); - } catch(InterruptedException ex) { - BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in RegionUpdateObserver: {0}", ex); - } - } - thread = null; - } - } @Override public void run() { try { - Thread.currentThread().setName("rscp:RegionUpdateObserver"); + Thread.currentThread().setName("rscp:" + this.getClass().getSimpleName()); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); long granularity = rscp.settings.getRegionFinderGranularity(); if(granularity < granularityMin) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 0d1064a..96ebe0c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -4,7 +4,7 @@ settings: treat-asterisk-as-op: true auto-reload-delay-sec: 900 use-metrics: true - language: en_US + language: english maintenance-mode: '' region-finder-thread-granularity-msec: 1000 integration: @@ -23,17 +23,5 @@ servers: password: pass2 prefixes: rscp_ workmode: none -language: - maintenance: - unlocked: '{_YL}Server left the maintenance mode' - locked: - default: - mmon: '{_YL}Server is going into maintenance mode.{_NL}{_YL}All players without permissions will be kicked.' - kick: '{_YL}Server is in maintenance mode\nPlease try to connect later...' - motd: '{_DR}Server is under maintenance' - rollback: - motd: '{_DR}Rolling back griefing.' - worldedit: - motd: '{_DR}We are editing world with WE.' internal: version: 1 diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/languages/russian.yml b/src/main/resources/languages/russian.yml new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 776d85b..eed313b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,8 +1,8 @@ -name: ${project.artifactId} +name: ${project.artifactId} version: ${project.version} -main: ${project.groupId}.${project.artifactId}.BukkitPluginMain -author: SimSonic website: ${project.url} +main: ${project.groupId}.${project.artifactId}.BukkitPluginMain +author: SimSonic softdepend: - Vault - WorldEdit @@ -31,5 +31,5 @@ permissions: description: Allows to reload configuration and database default: op rscp.maintenance.*: - description: Allows to connect when server in any maintenance mode + description: Allows to connect when server is in any maintenance mode default: op