diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java index 00da76d..64aebf1 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java @@ -3,6 +3,7 @@ import ru.simsonic.rscUtilityLibrary.ConnectionMySQL.ConnectionParams; public interface Settings { + public static final String chatPrefix = "{YELLOW}[rscp] {GOLD}"; public static final String separator = "."; public static final String separatorRegExp = "\\."; public static final String instantiator = "?"; @@ -20,5 +21,6 @@ public interface Settings public long getRegionFinderGranularity(); public int getAutoReloadDelayTicks(); public boolean isUseMetrics(); + public String getLanguage(); public ConnectionParams getConnectionParams(); } diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java b/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java index 6e9b7eb..3f21fad 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java @@ -5,7 +5,7 @@ import ru.simsonic.rscPermissions.API.Destination; import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowInheritance; import ru.simsonic.rscPermissions.API.RowPermission; -import ru.simsonic.rscPermissions.InternalCache.Matchers; +import ru.simsonic.rscPermissions.Engine.Matchers; public class DatabaseContents { diff --git a/src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java similarity index 58% rename from src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java rename to src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java index 2f85f60..98547e4 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java @@ -1,7 +1,8 @@ -package ru.simsonic.rscPermissions.API; +package ru.simsonic.rscPermissions; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.ServicePriority; import ru.simsonic.rscPermissions.Bukkit.VaultChat; import ru.simsonic.rscPermissions.Bukkit.VaultPermission; -import ru.simsonic.rscPermissions.BukkitPluginMain; public class BridgeForBukkitAPI { @@ -40,4 +41,20 @@ public class BridgeForBukkitAPI { return rscp.isEnabled(); } + protected void setupVault() + { + final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault"); + if(plugin != null) + { + // Register Chat + rscp.getServer().getServicesManager().register( + net.milkbowl.vault.chat.Chat.class, vaultChat, + rscp, ServicePriority.Highest); + // Register Permission + rscp.getServer().getServicesManager().register( + net.milkbowl.vault.permission.Permission.class, vaultPermission, + rscp, ServicePriority.Highest); + BukkitPluginMain.consoleLog.info("[rscp] Vault found and integrated."); + } + } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java index 5a8f830..fdf6b21 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java @@ -13,7 +13,7 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.ServerListPingEvent; import ru.simsonic.rscPermissions.BukkitPluginMain; -import ru.simsonic.rscPermissions.InternalCache.ResolutionResult; +import ru.simsonic.rscPermissions.Engine.ResolutionResult; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; public class BukkitEventListener implements Listener diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index dca02e8..6299aa1 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -9,8 +9,8 @@ import java.util.concurrent.LinkedBlockingQueue; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionAttachment; import ru.simsonic.rscPermissions.BukkitPluginMain; -import ru.simsonic.rscPermissions.InternalCache.ResolutionParams; -import ru.simsonic.rscPermissions.InternalCache.ResolutionResult; +import ru.simsonic.rscPermissions.Engine.ResolutionParams; +import ru.simsonic.rscPermissions.Engine.ResolutionResult; import ru.simsonic.rscUtilityLibrary.RestartableThread; public class BukkitPermissionManager extends RestartableThread diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java index afc8b13..c70e4bd 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java @@ -9,6 +9,7 @@ public class BukkitPluginConfiguration implements Settings private final BukkitPluginMain plugin; private String strDefaultGroup = "Default"; private String strMaintenanceMode = ""; + private String language = "english"; private boolean bAlwaysInheritDefault = false; private boolean bTreatAsteriskAsOP = true; private boolean bUseMetrics = true; @@ -50,6 +51,7 @@ public class BukkitPluginConfiguration implements Settings { config.set("settings.enable-rewards", null); config.set("settings.auto-update", null); + config.set("settings.language", "english"); config.set("internal.version", 3); } @Override @@ -57,6 +59,7 @@ public class BukkitPluginConfiguration implements Settings { plugin.reloadConfig(); final FileConfiguration config = plugin.getConfig(); + language = config.getString("settings.language", "english"); strDefaultGroup = config.getString("settings.default-group", "Default"); strMaintenanceMode = config.getString("settings.maintenance-mode", ""); bAlwaysInheritDefault = config.getBoolean("always-inherit-default-group", false); @@ -125,6 +128,11 @@ public class BukkitPluginConfiguration implements Settings return nRegionFinderGranularity; } @Override + public String getLanguage() + { + return language; + } + @Override public ConnectionParams getConnectionParams() { final FileConfiguration config = plugin.getConfig(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java similarity index 95% rename from src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java rename to src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java index 6ee9093..f9a3d55 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions.Bukkit; +package ru.simsonic.rscPermissions.Bukkit.Commands; import java.io.File; import java.util.ArrayList; import java.util.Collections; @@ -8,6 +8,7 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; 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.rscUtilityLibrary.RestartableThread; @@ -27,7 +28,7 @@ public class BukkitCommands if(rscp.connection.isConnected() == false) if(rscp.connection.connect() == false) { - BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache."); + BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache only."); return; } final DatabaseContents contents = rscp.connection.retrieveContents(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java index b7f0a62..34af9ea 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java @@ -2,7 +2,7 @@ package ru.simsonic.rscPermissions.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.entity.Player; -import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI; +import ru.simsonic.rscPermissions.BridgeForBukkitAPI; public final class VaultChat extends net.milkbowl.vault.chat.Chat { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java index d7bfab4..fbdaa67 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java @@ -3,7 +3,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI; +import ru.simsonic.rscPermissions.BridgeForBukkitAPI; public class VaultPermission extends net.milkbowl.vault.permission.Permission { diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index cb0e840..938e909 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -8,24 +8,22 @@ import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; import org.mcstats.MetricsLite; -import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI; import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.Backends.BackendDatabase; import ru.simsonic.rscPermissions.Backends.BackendJson; import ru.simsonic.rscPermissions.Backends.DatabaseContents; -import ru.simsonic.rscPermissions.Bukkit.BukkitCommands; import ru.simsonic.rscPermissions.Bukkit.BukkitEventListener; import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager; import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders; +import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands; import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver; -import ru.simsonic.rscPermissions.InternalCache.InternalCache; +import ru.simsonic.rscPermissions.Engine.InternalCache; import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; public final class BukkitPluginMain extends JavaPlugin { - private static final String chatPrefix = "{YELLOW}[rscp] {GOLD}"; public static final Logger consoleLog = Bukkit.getLogger(); public final Settings settings = new BukkitPluginConfiguration(this); public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this); @@ -42,20 +40,17 @@ 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 public void onEnable() { + Phrases.extractAll(this); settings.readSettings(); - // Register event's dispatcher - getServer().getPluginManager().registerEvents(bukkitListener, this); - regionUpdateObserver.registerListeners(); - // WorldGuard, Residence and other possible region list providers - regionListProvider.integrate(); - // Restore temporary cached data from json files internalCache.setDefaultGroup(settings.getDefaultGroup()); + Phrases.fill(this, settings.getLanguage()); + // Restore temporary cached data from json files final DatabaseContents contents = fileCache.retrieveContents(); contents.filterServerId(getServer().getServerId()).filterLifetime(); internalCache.fill(contents); @@ -66,24 +61,32 @@ public final class BukkitPluginMain extends JavaPlugin contents.permissions.length, contents.inheritance.length, }); - // Start all needed threads - permissionManager.startDeamon(); - regionUpdateObserver.startDeamon(); - // Connect to database and fetch data - connection.initialize(settings.getConnectionParams()); - commandHelper.threadFetchDatabaseContents.startDeamon(); - // Metrics + // Integrate Metrics if(settings.isUseMetrics()) { try { metrics = new MetricsLite(this); metrics.start(); - consoleLog.info("[rscp] Metrics enabled."); + consoleLog.info(Phrases.PLUGIN_METRICS.toString()); } catch(IOException ex) { consoleLog.log(Level.INFO, "[rscp][Metrics] Exception: {0}", ex); } } + // Register event's dispatcher + getServer().getPluginManager().registerEvents(bukkitListener, this); + regionUpdateObserver.registerListeners(); + // Integrate Vault + bridgeForBukkit.setupVault(); + // WorldGuard, Residence and other possible region list providers + regionListProvider.integrate(); + // Start all needed parallel threads as daemons + permissionManager.startDeamon(); + regionUpdateObserver.startDeamon(); + // Connect to database and initiate data fetching + connection.initialize(settings.getConnectionParams()); + commandHelper.threadFetchDatabaseContents.startDeamon(); + // Done consoleLog.info("[rscp] rscPermissions has been successfully enabled."); } @Override @@ -122,7 +125,7 @@ public final class BukkitPluginMain extends JavaPlugin commandHelper.onCommand(sender, cmd, label, args); } catch(CommandAnswerException ex) { for(String answer : ex.getMessageArray()) - sender.sendMessage(GenericChatCodes.processStringStatic(chatPrefix + answer)); + sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + answer)); } catch(NullPointerException ex) { // These will never occur! I hope... } @@ -132,7 +135,7 @@ public final class BukkitPluginMain extends JavaPlugin { if(message == null || "".equals(message)) return; - message = GenericChatCodes.processStringStatic(chatPrefix + message); + message = GenericChatCodes.processStringStatic(Settings.chatPrefix + message); sender.sendMessage(message); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java similarity index 96% rename from src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java rename to src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index 94a77f0..bd1365b 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions.InternalCache; +package ru.simsonic.rscPermissions.Engine; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java similarity index 89% rename from src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java rename to src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java index b30824f..ad069ed 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions.InternalCache; +package ru.simsonic.rscPermissions.Engine; import java.util.regex.Pattern; public class Matchers diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionParams.java similarity index 89% rename from src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java rename to src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionParams.java index c2b607a..1773ea4 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionParams.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions.InternalCache; +package ru.simsonic.rscPermissions.Engine; import java.util.Map; import java.util.Set; import ru.simsonic.rscPermissions.API.RowEntity; diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java similarity index 88% rename from src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java rename to src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java index f70963e..094fcb7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions.InternalCache; +package ru.simsonic.rscPermissions.Engine; import java.util.Map; import java.util.Set; diff --git a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java index 03bdf23..411e7d1 100644 --- a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java @@ -5,8 +5,8 @@ import java.util.logging.Logger; import ru.simsonic.rscPermissions.Backends.BackendDatabase; import ru.simsonic.rscPermissions.Backends.BackendJson; import ru.simsonic.rscPermissions.Backends.DatabaseContents; -import ru.simsonic.rscPermissions.InternalCache.InternalCache; -import ru.simsonic.rscPermissions.InternalCache.ResolutionResult; +import ru.simsonic.rscPermissions.Engine.InternalCache; +import ru.simsonic.rscPermissions.Engine.ResolutionResult; public class IndependentMain { diff --git a/src/main/java/ru/simsonic/rscPermissions/Phrases.java b/src/main/java/ru/simsonic/rscPermissions/Phrases.java index db3ca05..87d09a2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Phrases.java +++ b/src/main/java/ru/simsonic/rscPermissions/Phrases.java @@ -7,6 +7,7 @@ import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.util.logging.Level; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.Plugin; public enum Phrases { @@ -14,7 +15,7 @@ public enum Phrases PLUGIN_DISABLED ("generic.disabled"), PLUGIN_METRICS ("generic.metrics"), PLUGIN_RELOADED ("generic.reloaded"), - FETCHED ("generic.fetched"), + MYSQL_FETCHED ("mysql.fetched"), ; private final String node; private String phrase; @@ -27,14 +28,19 @@ public enum Phrases { return phrase; } - public static void fill(BukkitPluginMain plugin, String langName) + public static void fill(Plugin 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) + public static void extractAll(Plugin plugin) + { + extract(plugin, "english"); + extract(plugin, "russian"); + } + public static void extract(Plugin plugin, String langName) { try { @@ -46,7 +52,7 @@ public enum Phrases fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE); } } catch(IOException ex) { - BukkitPluginMain.consoleLog.log(Level.WARNING, "Cannot extract language: {0}", langName); + BukkitPluginMain.consoleLog.log(Level.WARNING, "Cannot extract language: {0}\n{1}", new Object[] { langName, ex }); } } } diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml index e69de29..bbdebf3 100644 --- a/src/main/resources/languages/english.yml +++ b/src/main/resources/languages/english.yml @@ -0,0 +1,7 @@ +generic: + enabled: "" + disabled: "" + reloaded: "" + metrics: "[rscp] Metrics enabled." +mysql: + fetched: "" diff --git a/src/main/resources/languages/russian.yml b/src/main/resources/languages/russian.yml index e69de29..0fd10bb 100644 --- a/src/main/resources/languages/russian.yml +++ b/src/main/resources/languages/russian.yml @@ -0,0 +1,7 @@ +generic: + enabled: "" + disabled: "" + reloaded: "" + metrics: "[rscp] Включён сбор метрики (mcstats.org)." +mysql: + fetched: "" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index eed313b..cca0094 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -11,6 +11,7 @@ softdepend: commands: rscp: description: rscPermissions command hub + usage: Enter /rscp help to see all subcommands permissions: rscp.*: description: Gives access to all commands