From 2925c7c139f31cb10ebf0149817d2c073c62b509 Mon Sep 17 00:00:00 2001 From: SimSonic Date: Thu, 21 May 2015 15:05:55 +0700 Subject: [PATCH] Better console output, added two additional translation strings. --- .../rscPermissions/BridgeForBukkitAPI.java | 241 ++++++------- .../Bukkit/BukkitDatabaseFetcher.java | 14 +- .../Bukkit/BukkitRegionProviders.java | 268 +++++++-------- .../Bukkit/Commands/CommandFetch.java | 2 +- .../rscPermissions/BukkitPluginMain.java | 316 +++++++++--------- .../rscPermissions/Engine/Phrases.java | 138 ++++---- src/main/resources/languages/english.yml | 46 +-- src/main/resources/languages/russian.yml | 46 +-- 8 files changed, 539 insertions(+), 532 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java index 0f1d8a1..d1a3812 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java @@ -1,119 +1,122 @@ -package ru.simsonic.rscPermissions; - -import com.sk89q.wepif.PermissionsResolverManager; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.ServicePriority; -import ru.simsonic.rscPermissions.API.Settings; -import ru.simsonic.rscPermissions.Bukkit.VaultChat; -import ru.simsonic.rscPermissions.Bukkit.VaultPermission; -import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions; -import ru.simsonic.rscPermissions.Engine.Phrases; -import ru.simsonic.rscUtilityLibrary.Bukkit.Tools; -import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; - -public class BridgeForBukkitAPI -{ - private static BridgeForBukkitAPI instance; - public static BridgeForBukkitAPI getInstance() - { - return instance; - } - private final BukkitPluginMain rscp; - private final VaultPermission vaultPermission; - private final VaultChat vaultChat; - protected BridgeForBukkitAPI(BukkitPluginMain plugin) - { - BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this; - this.rscp = plugin; - this.vaultPermission = new VaultPermission(this); - this.vaultChat = new VaultChat(this, vaultPermission); - } - public org.bukkit.plugin.java.JavaPlugin getPlugin() - { - return this.rscp; - } - public net.milkbowl.vault.permission.Permission getPermission() - { - return this.vaultPermission; - } - public net.milkbowl.vault.chat.Chat getChat() - { - return this.vaultChat; - } - public String getName() - { - return rscp.getDescription().getName(); - } - public boolean isEnabled() - { - return rscp.isEnabled(); - } - public Player findPlayer(String player) - { - for(Player online : Tools.getOnlinePlayers()) - if(online.getName().equals(player)) - return online; - return null; - } - 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(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_Y.toString())); - } else - BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_N.toString())); - } - protected void setupWEPIF() - { - final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit"); - if(plugin != null) - { - final WorldEditPermissions wepif = new WorldEditPermissions(this); - final PermissionsResolverManager prm = PermissionsResolverManager.getInstance(); - if(prm != null) - prm.setPluginPermissionsResolver(wepif); - else - PermissionsResolverManager.initialize(wepif); - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_Y.toString())); - } else - BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_N.toString())); - } - public void printDebugString(String info) - { - if(rscp.permissionManager.isConsoleDebugging()) - { - final StringBuilder sb = new StringBuilder(Settings.chatPrefix).append("[DEBUG] {_LS}").append(info); - rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); - } - } - public void printDebugStackTrace() - { - if(rscp.permissionManager.isConsoleDebugging()) - { - final StringBuilder sb = new StringBuilder(Settings.chatPrefix); - sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); - for(StackTraceElement ste : Thread.currentThread().getStackTrace()) - { - final String className = ste.getClassName(); - if(!className.equals(BridgeForBukkitAPI.class.getName()) - && !className.equals(Thread.class.getName()) - ) - sb.append(Settings.chatPrefix).append("[DEBUG] ") - .append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}") - .append(ste.toString()) - .append(System.lineSeparator()); - } - rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); - } - } -} +package ru.simsonic.rscPermissions; + +import com.sk89q.wepif.PermissionsResolverManager; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.ServicePriority; +import ru.simsonic.rscPermissions.API.Settings; +import ru.simsonic.rscPermissions.Bukkit.VaultChat; +import ru.simsonic.rscPermissions.Bukkit.VaultPermission; +import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions; +import ru.simsonic.rscPermissions.Engine.Phrases; +import ru.simsonic.rscUtilityLibrary.Bukkit.Tools; +import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; + +public class BridgeForBukkitAPI +{ + private static BridgeForBukkitAPI instance; + public static BridgeForBukkitAPI getInstance() + { + return instance; + } + private final BukkitPluginMain rscp; + private final VaultPermission vaultPermission; + private final VaultChat vaultChat; + protected BridgeForBukkitAPI(BukkitPluginMain plugin) + { + BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this; + this.rscp = plugin; + this.vaultPermission = new VaultPermission(this); + this.vaultChat = new VaultChat(this, vaultPermission); + } + public org.bukkit.plugin.java.JavaPlugin getPlugin() + { + return this.rscp; + } + public net.milkbowl.vault.permission.Permission getPermission() + { + return this.vaultPermission; + } + public net.milkbowl.vault.chat.Chat getChat() + { + return this.vaultChat; + } + public String getName() + { + return rscp.getDescription().getName(); + } + public boolean isEnabled() + { + return rscp.isEnabled(); + } + public Player findPlayer(String player) + { + for(Player online : Tools.getOnlinePlayers()) + if(online.getName().equals(player)) + return online; + return null; + } + protected void setupVault() + { + final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); + 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); + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_Y.toString())); + } else + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_N.toString())); + } + protected void setupWEPIF() + { + final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); + final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit"); + if(plugin != null) + { + final WorldEditPermissions wepif = new WorldEditPermissions(this); + final PermissionsResolverManager prm = PermissionsResolverManager.getInstance(); + if(prm != null) + prm.setPluginPermissionsResolver(wepif); + else + PermissionsResolverManager.initialize(wepif); + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_Y.toString())); + } else + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_N.toString())); + } + public void printDebugString(String info) + { + if(rscp.permissionManager.isConsoleDebugging()) + { + final StringBuilder sb = new StringBuilder(Settings.chatPrefix).append("[DEBUG] {_LS}").append(info); + rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); + } + } + public void printDebugStackTrace() + { + if(rscp.permissionManager.isConsoleDebugging()) + { + final StringBuilder sb = new StringBuilder(Settings.chatPrefix); + sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); + for(StackTraceElement ste : Thread.currentThread().getStackTrace()) + { + final String className = ste.getClassName(); + if(!className.equals(BridgeForBukkitAPI.class.getName()) + && !className.equals(Thread.class.getName()) + ) + sb.append(Settings.chatPrefix).append("[DEBUG] ") + .append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}") + .append(ste.toString()) + .append(System.lineSeparator()); + } + rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); + } + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java index 6003f06..b17fb55 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java @@ -1,11 +1,11 @@ package ru.simsonic.rscPermissions.Bukkit; import java.util.Set; -import java.util.logging.Level; import org.bukkit.command.CommandSender; import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; import ru.simsonic.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscUtilityLibrary.RestartableThread; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; @@ -42,13 +42,11 @@ public class BukkitDatabaseFetcher extends RestartableThread @Override public synchronized void run() { - BukkitPluginMain.consoleLog.log(Level.INFO, "[rscp] Fetched {0} entities, {1} permissions and {2} inheritances", - new Integer[] - { - contents.entities.length, - contents.permissions.length, - contents.inheritance.length - }); + rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic( + (Settings.chatPrefix + Phrases.FETCHED_REMOTE_DB.toString()) + .replace("{:E}", String.valueOf(contents.entities.length)) + .replace("{:P}", String.valueOf(contents.permissions.length)) + .replace("{:I}", String.valueOf(contents.inheritance.length)))); rscp.permissionManager.recalculateOnlinePlayers(); notify(); } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java index c900f56..82a9665 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java @@ -1,133 +1,135 @@ -package ru.simsonic.rscPermissions.Bukkit; - -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.managers.RegionManager; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import net.t00thpick1.residence.Residence; -import net.t00thpick1.residence.api.ResidenceAPI; -import net.t00thpick1.residence.api.ResidenceManager; -import net.t00thpick1.residence.api.areas.ResidenceArea; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import ru.simsonic.rscPermissions.BukkitPluginMain; -import ru.simsonic.rscPermissions.Engine.Phrases; -import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; - -public final class BukkitRegionProviders -{ - private final BukkitPluginMain plugin; - private Plugin worldguard; - private Plugin residence; - private final Map> regionsByPlayer = new HashMap<>(); - private final Map playerRegionHashes = new HashMap<>(); - private final Map playerLastWorld = new HashMap<>(); - public BukkitRegionProviders(BukkitPluginMain rscp) - { - this.plugin = rscp; - } - public synchronized void integrate() - { - // WorldGuard - if(plugin.settings.isUseWorldGuard()) - { - final Plugin pluginWG = plugin.getServer().getPluginManager().getPlugin("WorldGuard"); - if(pluginWG != null && pluginWG instanceof WorldGuardPlugin) - { - this.worldguard = pluginWG; - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_Y.toString())); - } else { - this.worldguard = null; - BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_N.toString())); - } - } else - this.worldguard = null; - // Residence - if(plugin.settings.isUseResidence()) - { - final Plugin pluginR = plugin.getServer().getPluginManager().getPlugin("Residence"); - if(pluginR != null && pluginR instanceof Residence) - { - this.residence = pluginR; - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_Y.toString())); - } else { - this.residence = null; - BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_N.toString())); - } - } else - this.residence = null; - } - public synchronized void deintegrate() - { - this.worldguard = null; - this.residence = null; - regionsByPlayer.clear(); - playerRegionHashes.clear(); - playerLastWorld.clear(); - } - public synchronized boolean isRegionListChanged(Player player) - { - final Location location = player.getLocation(); - final World world = location.getWorld(); - final Set playerRegions = new HashSet<>(); - // WorldGuard - if(worldguard != null && worldguard.isEnabled()) - try - { - final WorldGuardPlugin pluginWG = (WorldGuardPlugin)worldguard; - final RegionManager rman = pluginWG.getRegionManager(world); - if(rman == null) - return false; - // Get list - final ApplicableRegionSet appregs = rman.getApplicableRegions(location); - for(ProtectedRegion region : appregs) - playerRegions.add(region.getId()); - } catch(RuntimeException | IncompatibleClassChangeError ex) { - worldguard = null; - BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_OLD.toString())); - } - // Residence - if(residence != null && residence.isEnabled()) - try - { - // Get list - final ResidenceManager residenceManager = ResidenceAPI.getResidenceManager(); - if(residenceManager != null) - { - final ResidenceArea residenceArea = residenceManager.getByLocation(location); - if(residenceArea != null) - playerRegions.add(residenceArea.getFullName()); - } - } catch(RuntimeException ex) { - } - // Is it changed? - int hashcode = playerRegions.hashCode(); - if(playerLastWorld.containsKey(player)) - if(playerLastWorld.get(player).equals(world)) - if(hashcode == playerRegionHashes.get(player)) - return false; - // Update - playerRegionHashes.put(player, hashcode); - regionsByPlayer.put(player, playerRegions); - playerLastWorld.put(player, world); - return true; - } - public synchronized Set getPlayerRegions(Player player) - { - Set result = regionsByPlayer.get(player); - return (result != null) ? result : Collections.emptySet(); - } - public synchronized void removePlayer(Player player) - { - playerRegionHashes.remove(player); - regionsByPlayer.remove(player); - playerLastWorld.remove(player); - } -} +package ru.simsonic.rscPermissions.Bukkit; + +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import net.t00thpick1.residence.Residence; +import net.t00thpick1.residence.api.ResidenceAPI; +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.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscPermissions.Engine.Phrases; +import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; + +public final class BukkitRegionProviders +{ + private final BukkitPluginMain rscp; + private Plugin worldguard; + private Plugin residence; + private final Map> regionsByPlayer = new HashMap<>(); + private final Map playerRegionHashes = new HashMap<>(); + private final Map playerLastWorld = new HashMap<>(); + public BukkitRegionProviders(BukkitPluginMain rscp) + { + this.rscp = rscp; + } + public synchronized void integrate() + { + final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); + // WorldGuard + if(rscp.settings.isUseWorldGuard()) + { + final Plugin pluginWG = rscp.getServer().getPluginManager().getPlugin("WorldGuard"); + if(pluginWG != null && pluginWG instanceof WorldGuardPlugin) + { + this.worldguard = pluginWG; + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_Y.toString())); + } else { + this.worldguard = null; + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_N.toString())); + } + } else + this.worldguard = null; + // Residence + if(rscp.settings.isUseResidence()) + { + final Plugin pluginR = rscp.getServer().getPluginManager().getPlugin("Residence"); + if(pluginR != null && pluginR instanceof Residence) + { + this.residence = pluginR; + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_Y.toString())); + } else { + this.residence = null; + console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_N.toString())); + } + } else + this.residence = null; + } + public synchronized void deintegrate() + { + this.worldguard = null; + this.residence = null; + regionsByPlayer.clear(); + playerRegionHashes.clear(); + playerLastWorld.clear(); + } + public synchronized boolean isRegionListChanged(Player player) + { + final Location location = player.getLocation(); + final World world = location.getWorld(); + final Set playerRegions = new HashSet<>(); + // WorldGuard + if(worldguard != null && worldguard.isEnabled()) + try + { + final WorldGuardPlugin pluginWG = (WorldGuardPlugin)worldguard; + final RegionManager rman = pluginWG.getRegionManager(world); + if(rman == null) + return false; + // Get list + final ApplicableRegionSet appregs = rman.getApplicableRegions(location); + for(ProtectedRegion region : appregs) + playerRegions.add(region.getId()); + } catch(RuntimeException | IncompatibleClassChangeError ex) { + worldguard = null; + rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_OLD.toString())); + } + // Residence + if(residence != null && residence.isEnabled()) + try + { + // Get list + final ResidenceManager residenceManager = ResidenceAPI.getResidenceManager(); + if(residenceManager != null) + { + final ResidenceArea residenceArea = residenceManager.getByLocation(location); + if(residenceArea != null) + playerRegions.add(residenceArea.getFullName()); + } + } catch(RuntimeException ex) { + } + // Is it changed? + int hashcode = playerRegions.hashCode(); + if(playerLastWorld.containsKey(player)) + if(playerLastWorld.get(player).equals(world)) + if(hashcode == playerRegionHashes.get(player)) + return false; + // Update + playerRegionHashes.put(player, hashcode); + regionsByPlayer.put(player, playerRegions); + playerLastWorld.put(player, world); + return true; + } + public synchronized Set getPlayerRegions(Player player) + { + Set result = regionsByPlayer.get(player); + return (result != null) ? result : Collections.emptySet(); + } + public synchronized void removePlayer(Player player) + { + playerRegionHashes.remove(player); + regionsByPlayer.remove(player); + playerLastWorld.remove(player); + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java index 7362068..7702ca7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java @@ -17,7 +17,7 @@ public class CommandFetch if(sender.hasPermission("rscp.admin.reload")) { rscp.commandHelper.threadFetchDatabaseContents.startDeamon(); - throw new CommandAnswerException(Phrases.MYSQL_FETCHED.toString()); + throw new CommandAnswerException(Phrases.FETCHED_ANSWER.toString()); } } } diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index 33d5a99..668a9f5 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -1,159 +1,157 @@ -package ru.simsonic.rscPermissions; - -import java.io.IOException; -import java.util.logging.Level; -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.plugin.java.JavaPlugin; -import org.bukkit.scheduler.BukkitScheduler; -import org.mcstats.MetricsLite; -import ru.simsonic.rscPermissions.API.Settings; -import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase; -import ru.simsonic.rscPermissions.Engine.Backends.BackendJson; -import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; -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.Engine.InternalCache; -import ru.simsonic.rscPermissions.Engine.Phrases; -import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; -import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; - -public final class BukkitPluginMain extends JavaPlugin -{ - public static final Logger consoleLog = Bukkit.getLogger(); - public final Settings settings = new BukkitPluginConfiguration(this); - public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this); - public final BukkitEventListener bukkitListener = new BukkitEventListener(this); - public final BackendJson localStorage = new BackendJson(getDataFolder()); - public final BackendDatabase connection = new BackendDatabase(consoleLog); - public final InternalCache internalCache = new InternalCache(); - public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this); - public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this); - private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this); - public final BukkitCommands commandHelper = new BukkitCommands(this); - private MetricsLite metrics; - @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."); - } - @Override - public void onEnable() - { - // Read settings and setup components - settings.readSettings(); - bukkitListener.onEnable(); - internalCache.setDefaultGroup( - settings.getDefaultGroup(), - settings.isDefaultForever()); - Phrases.applyTranslation(settings.getTranslationProvider()); - // Restore temporary cached data from json files - final DatabaseContents contents = localStorage.retrieveContents(); - contents.filterServerId(getServer().getServerId()).filterLifetime(); - internalCache.fill(contents); - consoleLog.log(Level.INFO, - "[rscp] Loaded {0} entity, {1} permission and {2} inheritance rows from local cache.", new Integer[] - { - contents.entities.length, - contents.permissions.length, - contents.inheritance.length, - }); - // Integrate Metrics - if(settings.isUseMetrics()) - try - { - metrics = new MetricsLite(this); - metrics.start(); - consoleLog.info(Phrases.PLUGIN_METRICS.toString()); - } catch(IOException ex) { - consoleLog.log(Level.WARNING, "[rscp][Metrics] Exception: {0}", ex); - } - // Register event's dispatcher - getServer().getPluginManager().registerEvents(bukkitListener, this); - regionUpdateObserver.registerListeners(); - // Integrate Vault and WEPIF - bridgeForBukkit.setupVault(); - getServer().getScheduler().runTask(this, new Runnable() - { - @Override - public void run() - { - bridgeForBukkit.setupWEPIF(); - } - }); - // 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()); - if(settings.getAutoReloadDelayTicks() > 0) - commandHelper.threadFetchDatabaseContents.startDeamon(); - // Done - consoleLog.info(Phrases.PLUGIN_ENABLED.toString()); - } - @Override - public void onDisable() - { - getServer().getServicesManager().unregisterAll(this); - regionUpdateObserver.stop(); - permissionManager.stop(); - internalCache.clear(); - connection.disconnect(); - regionListProvider.deintegrate(); - metrics = null; - consoleLog.info(Phrases.PLUGIN_DISABLED.toString()); - } - private int nAutoUpdaterTaskId = -1; - public void scheduleAutoUpdate() - { - final BukkitScheduler scheduler = getServer().getScheduler(); - if(nAutoUpdaterTaskId != -1) - scheduler.cancelTask(nAutoUpdaterTaskId); - final int delay = settings.getAutoReloadDelayTicks(); - nAutoUpdaterTaskId = delay > 0 - ? scheduler.scheduleSyncDelayedTask(this, new Runnable() - { - @Override - public void run() - { - commandHelper.threadFetchDatabaseContents.startDeamon(); - } - }, delay) - : -1; - } - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) - { - if(sender != null) - try - { - switch(cmd.getName().toLowerCase()) - { - case "rscp": - commandHelper.onCommandHub(sender, args); - break; - } - } catch(CommandAnswerException ex) { - final boolean decolorize = Settings.decolorizeForConsole && sender instanceof ConsoleCommandSender; - for(String answer : ex.getMessageArray()) - { - answer = GenericChatCodes.processStringStatic(Settings.chatPrefix + answer); - final String textToSend = decolorize ? org.bukkit.ChatColor.stripColor(answer) : answer; - sender.sendMessage(textToSend); - } - } - return true; - } -} +package ru.simsonic.rscPermissions; + +import java.io.IOException; +import java.util.logging.Level; +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.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitScheduler; +import org.mcstats.MetricsLite; +import ru.simsonic.rscPermissions.API.Settings; +import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase; +import ru.simsonic.rscPermissions.Engine.Backends.BackendJson; +import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; +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.Engine.InternalCache; +import ru.simsonic.rscPermissions.Engine.Phrases; +import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; +import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; + +public final class BukkitPluginMain extends JavaPlugin +{ + public static final Logger consoleLog = Bukkit.getLogger(); + public final Settings settings = new BukkitPluginConfiguration(this); + public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this); + public final BukkitEventListener bukkitListener = new BukkitEventListener(this); + public final BackendJson localStorage = new BackendJson(getDataFolder()); + public final BackendDatabase connection = new BackendDatabase(consoleLog); + public final InternalCache internalCache = new InternalCache(); + public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this); + public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this); + private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this); + public final BukkitCommands commandHelper = new BukkitCommands(this); + private MetricsLite metrics; + @Override + public void onLoad() + { + Phrases.extractTranslations(getDataFolder()); + settings.onLoad(); + consoleLog.log(Level.INFO, "[rscp] serverId value is set to \"{0}\". You can change it in server.properties.", getServer().getServerId()); + consoleLog.log(Level.INFO, "[rscp] rscPermissions has been loaded."); + } + @Override + public void onEnable() + { + // Read settings and setup components + settings.readSettings(); + bukkitListener.onEnable(); + internalCache.setDefaultGroup( + settings.getDefaultGroup(), + settings.isDefaultForever()); + Phrases.applyTranslation(settings.getTranslationProvider()); + // Restore temporary cached data from json files + final DatabaseContents contents = localStorage.retrieveContents(); + contents.filterServerId(getServer().getServerId()).filterLifetime(); + internalCache.fill(contents); + getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic( + (Settings.chatPrefix + Phrases.FETCHED_LOCAL_CACHE.toString()) + .replace("{:E}", String.valueOf(contents.entities.length)) + .replace("{:P}", String.valueOf(contents.permissions.length)) + .replace("{:I}", String.valueOf(contents.inheritance.length)))); + // Integrate Metrics + if(settings.isUseMetrics()) + try + { + metrics = new MetricsLite(this); + metrics.start(); + consoleLog.info(Phrases.PLUGIN_METRICS.toString()); + } catch(IOException ex) { + consoleLog.log(Level.WARNING, "[rscp][Metrics] Exception: {0}", ex); + } + // Register event's dispatcher + getServer().getPluginManager().registerEvents(bukkitListener, this); + regionUpdateObserver.registerListeners(); + // Integrate Vault and WEPIF + bridgeForBukkit.setupVault(); + getServer().getScheduler().runTask(this, new Runnable() + { + @Override + public void run() + { + bridgeForBukkit.setupWEPIF(); + } + }); + // 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()); + if(settings.getAutoReloadDelayTicks() > 0) + commandHelper.threadFetchDatabaseContents.startDeamon(); + // Done + consoleLog.info(Phrases.PLUGIN_ENABLED.toString()); + } + @Override + public void onDisable() + { + getServer().getServicesManager().unregisterAll(this); + regionUpdateObserver.stop(); + permissionManager.stop(); + internalCache.clear(); + connection.disconnect(); + regionListProvider.deintegrate(); + metrics = null; + consoleLog.info(Phrases.PLUGIN_DISABLED.toString()); + } + private int nAutoUpdaterTaskId = -1; + public void scheduleAutoUpdate() + { + final BukkitScheduler scheduler = getServer().getScheduler(); + if(nAutoUpdaterTaskId != -1) + scheduler.cancelTask(nAutoUpdaterTaskId); + final int delay = settings.getAutoReloadDelayTicks(); + nAutoUpdaterTaskId = delay > 0 + ? scheduler.scheduleSyncDelayedTask(this, new Runnable() + { + @Override + public void run() + { + commandHelper.threadFetchDatabaseContents.startDeamon(); + } + }, delay) + : -1; + } + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if(sender != null) + try + { + switch(cmd.getName().toLowerCase()) + { + case "rscp": + commandHelper.onCommandHub(sender, args); + break; + } + } catch(CommandAnswerException ex) { + final boolean decolorize = Settings.decolorizeForConsole && sender instanceof ConsoleCommandSender; + for(String answer : ex.getMessageArray()) + { + answer = GenericChatCodes.processStringStatic(Settings.chatPrefix + answer); + final String textToSend = decolorize ? org.bukkit.ChatColor.stripColor(answer) : answer; + sender.sendMessage(textToSend); + } + } + return true; + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java index 7a6c9dd..0d05e8b 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java @@ -1,68 +1,70 @@ -package ru.simsonic.rscPermissions.Engine; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.channels.Channels; -import java.nio.channels.FileChannel; -import ru.simsonic.rscPermissions.API.TranslationProvider; -import ru.simsonic.rscPermissions.BukkitPluginMain; - -public enum Phrases -{ - PLUGIN_ENABLED ("generic.enabled"), - PLUGIN_DISABLED ("generic.disabled"), - PLUGIN_METRICS ("generic.metrics"), - PLUGIN_RELOADED ("generic.reloaded"), - PLUGIN_PLAYER_ONLY ("generic.player-only"), - PLUGIN_CONSOLE_ONLY("generic.console-only"), - INTEGRATION_V_Y ("integration.vault-yes"), - INTEGRATION_V_N ("integration.vault-no"), - INTEGRATION_WE_Y ("integration.worldedit-yes"), - INTEGRATION_WE_N ("integration.worldedit-no"), - INTEGRATION_WG_Y ("integration.worldguard-yes"), - INTEGRATION_WG_N ("integration.worldguard-no"), - INTEGRATION_WG_OLD ("integration.worldguard-old"), - INTEGRATION_R_Y ("integration.residence-yes"), - INTEGRATION_R_N ("integration.residence-no"), - DEBUG_ON ("debug.enable"), - DEBUG_OFF ("debug.disable"), - MYSQL_FETCHED ("mysql.fetched"), - ; - private final String node; - private String phrase; - private Phrases(String node) - { - this.node = node; - } - @Override - public String toString() - { - return phrase; - } - public static void applyTranslation(TranslationProvider provider) - { - for(Phrases value : Phrases.values()) - value.phrase = provider.getString(value.node); - } - public static void extractTranslations(File workingDir) - { - extractTranslation(workingDir, "english"); - extractTranslation(workingDir, "russian"); - } - private static void extractTranslation(File workingDir, String langName) - { - try - { - final File langFile = new File(workingDir, langName + ".yml"); - 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) { - } - } -} +package ru.simsonic.rscPermissions.Engine; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import ru.simsonic.rscPermissions.API.TranslationProvider; +import ru.simsonic.rscPermissions.BukkitPluginMain; + +public enum Phrases +{ + PLUGIN_ENABLED ("generic.enabled"), + PLUGIN_DISABLED ("generic.disabled"), + PLUGIN_METRICS ("generic.metrics"), + PLUGIN_RELOADED ("generic.reloaded"), + PLUGIN_PLAYER_ONLY ("generic.player-only"), + PLUGIN_CONSOLE_ONLY("generic.console-only"), + INTEGRATION_V_Y ("integration.vault-yes"), + INTEGRATION_V_N ("integration.vault-no"), + INTEGRATION_WE_Y ("integration.worldedit-yes"), + INTEGRATION_WE_N ("integration.worldedit-no"), + INTEGRATION_WG_Y ("integration.worldguard-yes"), + INTEGRATION_WG_N ("integration.worldguard-no"), + INTEGRATION_WG_OLD ("integration.worldguard-old"), + INTEGRATION_R_Y ("integration.residence-yes"), + INTEGRATION_R_N ("integration.residence-no"), + DEBUG_ON ("debug.enable"), + DEBUG_OFF ("debug.disable"), + FETCHED_ANSWER ("database.command-answer"), + FETCHED_LOCAL_CACHE("database.fetched-local"), + FETCHED_REMOTE_DB ("database.fetched-remote"), + ; + private final String node; + private String phrase; + private Phrases(String node) + { + this.node = node; + } + @Override + public String toString() + { + return phrase; + } + public static void applyTranslation(TranslationProvider provider) + { + for(Phrases value : Phrases.values()) + value.phrase = provider.getString(value.node); + } + public static void extractTranslations(File workingDir) + { + extractTranslation(workingDir, "english"); + extractTranslation(workingDir, "russian"); + } + private static void extractTranslation(File workingDir, String langName) + { + try + { + final File langFile = new File(workingDir, langName + ".yml"); + 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) { + } + } +} diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml index d7e2147..6432d6a 100644 --- a/src/main/resources/languages/english.yml +++ b/src/main/resources/languages/english.yml @@ -1,22 +1,24 @@ -generic: - enabled: "[rscp] rscPermissions has been successfully enabled." - disabled: "[rscp] rscPermissions has been disabled." - reloaded: "[rscp] rscPermissions has been reloaded." - metrics: "[rscp] Metrics enabled." - player-only: "{_LR}This command cannot be run from console." - console-only: "{_LR}This command should be run from console." -integration: - vault-yes: "{_LG}Vault was found and integrated." - vault-no: "{_LR}There is no Vault found. Vault is highly recommended to be installed on your server." - worldedit-yes: "{_LG}WorldEdit (WEPIF) was found and integrated." - worldedit-no: "{_YL}WorldEdit (WEPIF) was not found." - worldguard-yes: "{_LG}WorldGuard was found and integrated." - worldguard-no: "{_YL}WorldGuard was not found." - worldguard-old: "{_LR}WorldGuard 5.9 or older is found, I need 6.0 or later. {_YL}Region support for WG is disabled." - residence-yes: "{_LG}Residence was found and integrated." - residence-no: "{_YL}Residence was not found." -debug: - enable: "You will see a lot of debugging information now." - disable: "Debugging information is now hidden for you." -mysql: - fetched: "Tables have been fetched." +generic: + enabled: "[rscp] rscPermissions has been successfully enabled." + disabled: "[rscp] rscPermissions has been disabled." + reloaded: "[rscp] rscPermissions has been reloaded." + metrics: "[rscp] Metrics enabled." + player-only: "{_LR}This command cannot be run from console." + console-only: "{_LR}This command should be run from console." +integration: + vault-yes: "{_LG}Vault was found and integrated." + vault-no: "{_LR}There is no Vault found. Vault is highly recommended to be installed on your server." + worldedit-yes: "{_LG}WorldEdit (WEPIF) was found and integrated." + worldedit-no: "{_YL}WorldEdit (WEPIF) was not found." + worldguard-yes: "{_LG}WorldGuard was found and integrated." + worldguard-no: "{_YL}WorldGuard was not found." + worldguard-old: "{_LR}WorldGuard 5.9 or older is found, I need 6.0 or later. {_YL}Region support for WG is disabled." + residence-yes: "{_LG}Residence was found and integrated." + residence-no: "{_YL}Residence was not found." +debug: + enable: "You will see a lot of debugging information now." + disable: "Debugging information is now hidden for you." +database: + command-answer: "Tables have been fetched." + fetched-local: "{_LG}Loaded {:E} entity, {:P} permission and {:I} inheritance rows from local cache." + fetched-remote: "{_LG}Fetched {:E} entities, {:P} permissions and {:I} inheritances." diff --git a/src/main/resources/languages/russian.yml b/src/main/resources/languages/russian.yml index 3a8e713..fdb2fa3 100644 --- a/src/main/resources/languages/russian.yml +++ b/src/main/resources/languages/russian.yml @@ -1,22 +1,24 @@ -generic: - enabled: "[rscp] Плагин rscPermissions успешно включён." - disabled: "[rscp] Плагин rscPermissions выключен." - reloaded: "[rscp] Плагин rscPermissions перезапущен, конфигурация перечитана." - metrics: "[rscp] Включён сбор метрики (mcstats.org)." - player-only: "{_LR}Эта команда не может быть использована из консоли." - console-only: "{_LR}Эта команда может быть использована только из консоли." -integration: - vault-yes: "{_LG}Vault обнаружён и подключён." - vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." - worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." - worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." - worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." - worldguard-no: "{_YL}WorldGuard не обнаружен." - worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." - residence-yes: "{_LG}Residence обнаружён и подключён." - residence-no: "{_YL}Residence не обнаружен." -debug: - enable: "Теперь Вы будете видеть отладочную информацию." - disable: "Отладочная информация теперь скрыта от Вас." -mysql: - fetched: "База данных перечитана." +generic: + enabled: "[rscp] Плагин rscPermissions успешно включён." + disabled: "[rscp] Плагин rscPermissions выключен." + reloaded: "[rscp] Плагин rscPermissions перезапущен, конфигурация перечитана." + metrics: "[rscp] Включён сбор метрики (mcstats.org)." + player-only: "{_LR}Эта команда не может быть использована из консоли." + console-only: "{_LR}Эта команда может быть использована только из консоли." +integration: + vault-yes: "{_LG}Vault обнаружён и подключён." + vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." + worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." + worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." + worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." + worldguard-no: "{_YL}WorldGuard не обнаружен." + worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." + residence-yes: "{_LG}Residence обнаружён и подключён." + residence-no: "{_YL}Residence не обнаружен." +debug: + enable: "Теперь Вы будете видеть отладочную информацию." + disable: "Отладочная информация теперь скрыта от Вас." +database: + command-answer: "База данных перечитана." + fetched-local: "{_LG}Восстановлено {:E} сущностей, {:P} прав and {:I} наследований." + fetched-remote: "{_LG}Получено {:E} сущностей, {:P} прав and {:I} наследований."