Browse Source

Better console output, added two additional translation strings.

master
SimSonic 10 years ago
parent
commit
2925c7c139
  1. 241
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  2. 14
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java
  3. 268
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java
  4. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java
  5. 316
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  6. 138
      src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java
  7. 46
      src/main/resources/languages/english.yml
  8. 46
      src/main/resources/languages/russian.yml

241
src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java

@ -1,119 +1,122 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions;
import com.sk89q.wepif.PermissionsResolverManager; import com.sk89q.wepif.PermissionsResolverManager;
import org.bukkit.entity.Player; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.plugin.Plugin; import org.bukkit.entity.Player;
import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.Plugin;
import ru.simsonic.rscPermissions.API.Settings; import org.bukkit.plugin.ServicePriority;
import ru.simsonic.rscPermissions.Bukkit.VaultChat; import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Bukkit.VaultPermission; import ru.simsonic.rscPermissions.Bukkit.VaultChat;
import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions; import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions;
import ru.simsonic.rscUtilityLibrary.Bukkit.Tools; import ru.simsonic.rscPermissions.Engine.Phrases;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; import ru.simsonic.rscUtilityLibrary.Bukkit.Tools;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class BridgeForBukkitAPI
{ public class BridgeForBukkitAPI
private static BridgeForBukkitAPI instance; {
public static BridgeForBukkitAPI getInstance() private static BridgeForBukkitAPI instance;
{ public static BridgeForBukkitAPI getInstance()
return instance; {
} return instance;
private final BukkitPluginMain rscp; }
private final VaultPermission vaultPermission; private final BukkitPluginMain rscp;
private final VaultChat vaultChat; private final VaultPermission vaultPermission;
protected BridgeForBukkitAPI(BukkitPluginMain plugin) private final VaultChat vaultChat;
{ protected BridgeForBukkitAPI(BukkitPluginMain plugin)
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this; {
this.rscp = plugin; BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this;
this.vaultPermission = new VaultPermission(this); this.rscp = plugin;
this.vaultChat = new VaultChat(this, vaultPermission); this.vaultPermission = new VaultPermission(this);
} this.vaultChat = new VaultChat(this, vaultPermission);
public org.bukkit.plugin.java.JavaPlugin getPlugin() }
{ public org.bukkit.plugin.java.JavaPlugin getPlugin()
return this.rscp; {
} return this.rscp;
public net.milkbowl.vault.permission.Permission getPermission() }
{ public net.milkbowl.vault.permission.Permission getPermission()
return this.vaultPermission; {
} return this.vaultPermission;
public net.milkbowl.vault.chat.Chat getChat() }
{ public net.milkbowl.vault.chat.Chat getChat()
return this.vaultChat; {
} return this.vaultChat;
public String getName() }
{ public String getName()
return rscp.getDescription().getName(); {
} return rscp.getDescription().getName();
public boolean isEnabled() }
{ public boolean isEnabled()
return rscp.isEnabled(); {
} return rscp.isEnabled();
public Player findPlayer(String player) }
{ public Player findPlayer(String player)
for(Player online : Tools.getOnlinePlayers()) {
if(online.getName().equals(player)) for(Player online : Tools.getOnlinePlayers())
return online; if(online.getName().equals(player))
return null; return online;
} return null;
protected void setupVault() }
{ protected void setupVault()
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault"); {
if(plugin != null) final ConsoleCommandSender console = rscp.getServer().getConsoleSender();
{ final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault");
// Register Chat if(plugin != null)
rscp.getServer().getServicesManager().register( {
net.milkbowl.vault.chat.Chat.class, vaultChat, // Register Chat
rscp, ServicePriority.Highest); rscp.getServer().getServicesManager().register(
// Register Permission net.milkbowl.vault.chat.Chat.class, vaultChat,
rscp.getServer().getServicesManager().register( rscp, ServicePriority.Highest);
net.milkbowl.vault.permission.Permission.class, vaultPermission, // Register Permission
rscp, ServicePriority.Highest); rscp.getServer().getServicesManager().register(
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_Y.toString())); net.milkbowl.vault.permission.Permission.class, vaultPermission,
} else rscp, ServicePriority.Highest);
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_N.toString())); console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_Y.toString()));
} } else
protected void setupWEPIF() console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_N.toString()));
{ }
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit"); protected void setupWEPIF()
if(plugin != null) {
{ final ConsoleCommandSender console = rscp.getServer().getConsoleSender();
final WorldEditPermissions wepif = new WorldEditPermissions(this); final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit");
final PermissionsResolverManager prm = PermissionsResolverManager.getInstance(); if(plugin != null)
if(prm != null) {
prm.setPluginPermissionsResolver(wepif); final WorldEditPermissions wepif = new WorldEditPermissions(this);
else final PermissionsResolverManager prm = PermissionsResolverManager.getInstance();
PermissionsResolverManager.initialize(wepif); if(prm != null)
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_Y.toString())); prm.setPluginPermissionsResolver(wepif);
} else else
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_N.toString())); PermissionsResolverManager.initialize(wepif);
} console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_Y.toString()));
public void printDebugString(String info) } else
{ console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_N.toString()));
if(rscp.permissionManager.isConsoleDebugging()) }
{ public void printDebugString(String info)
final StringBuilder sb = new StringBuilder(Settings.chatPrefix).append("[DEBUG] {_LS}").append(info); {
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); if(rscp.permissionManager.isConsoleDebugging())
} {
} final StringBuilder sb = new StringBuilder(Settings.chatPrefix).append("[DEBUG] {_LS}").append(info);
public void printDebugStackTrace() rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString()));
{ }
if(rscp.permissionManager.isConsoleDebugging()) }
{ public void printDebugStackTrace()
final StringBuilder sb = new StringBuilder(Settings.chatPrefix); {
sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); if(rscp.permissionManager.isConsoleDebugging())
for(StackTraceElement ste : Thread.currentThread().getStackTrace()) {
{ final StringBuilder sb = new StringBuilder(Settings.chatPrefix);
final String className = ste.getClassName(); sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator());
if(!className.equals(BridgeForBukkitAPI.class.getName()) for(StackTraceElement ste : Thread.currentThread().getStackTrace())
&& !className.equals(Thread.class.getName()) {
) final String className = ste.getClassName();
sb.append(Settings.chatPrefix).append("[DEBUG] ") if(!className.equals(BridgeForBukkitAPI.class.getName())
.append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}") && !className.equals(Thread.class.getName())
.append(ste.toString()) )
.append(System.lineSeparator()); sb.append(Settings.chatPrefix).append("[DEBUG] ")
} .append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}")
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); .append(ste.toString())
} .append(System.lineSeparator());
} }
} rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString()));
}
}
}

14
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java

@ -1,11 +1,11 @@
package ru.simsonic.rscPermissions.Bukkit; package ru.simsonic.rscPermissions.Bukkit;
import java.util.Set; import java.util.Set;
import java.util.logging.Level;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Phrases;
import ru.simsonic.rscUtilityLibrary.RestartableThread; import ru.simsonic.rscUtilityLibrary.RestartableThread;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
@ -42,13 +42,11 @@ public class BukkitDatabaseFetcher extends RestartableThread
@Override @Override
public synchronized void run() public synchronized void run()
{ {
BukkitPluginMain.consoleLog.log(Level.INFO, "[rscp] Fetched {0} entities, {1} permissions and {2} inheritances", rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(
new Integer[] (Settings.chatPrefix + Phrases.FETCHED_REMOTE_DB.toString())
{ .replace("{:E}", String.valueOf(contents.entities.length))
contents.entities.length, .replace("{:P}", String.valueOf(contents.permissions.length))
contents.permissions.length, .replace("{:I}", String.valueOf(contents.inheritance.length))));
contents.inheritance.length
});
rscp.permissionManager.recalculateOnlinePlayers(); rscp.permissionManager.recalculateOnlinePlayers();
notify(); notify();
} }

268
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitRegionProviders.java

@ -1,133 +1,135 @@
package ru.simsonic.rscPermissions.Bukkit; package ru.simsonic.rscPermissions.Bukkit;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import net.t00thpick1.residence.Residence; import net.t00thpick1.residence.Residence;
import net.t00thpick1.residence.api.ResidenceAPI; import net.t00thpick1.residence.api.ResidenceAPI;
import net.t00thpick1.residence.api.ResidenceManager; import net.t00thpick1.residence.api.ResidenceManager;
import net.t00thpick1.residence.api.areas.ResidenceArea; import net.t00thpick1.residence.api.areas.ResidenceArea;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.plugin.Plugin; import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BukkitPluginMain; import org.bukkit.plugin.Plugin;
import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; import ru.simsonic.rscPermissions.Engine.Phrases;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public final class BukkitRegionProviders
{ public final class BukkitRegionProviders
private final BukkitPluginMain plugin; {
private Plugin worldguard; private final BukkitPluginMain rscp;
private Plugin residence; private Plugin worldguard;
private final Map<Player, Set<String>> regionsByPlayer = new HashMap<>(); private Plugin residence;
private final Map<Player, Integer> playerRegionHashes = new HashMap<>(); private final Map<Player, Set<String>> regionsByPlayer = new HashMap<>();
private final Map<Player, World> playerLastWorld = new HashMap<>(); private final Map<Player, Integer> playerRegionHashes = new HashMap<>();
public BukkitRegionProviders(BukkitPluginMain rscp) private final Map<Player, World> playerLastWorld = new HashMap<>();
{ public BukkitRegionProviders(BukkitPluginMain rscp)
this.plugin = rscp; {
} this.rscp = rscp;
public synchronized void integrate() }
{ public synchronized void integrate()
// WorldGuard {
if(plugin.settings.isUseWorldGuard()) final ConsoleCommandSender console = rscp.getServer().getConsoleSender();
{ // WorldGuard
final Plugin pluginWG = plugin.getServer().getPluginManager().getPlugin("WorldGuard"); if(rscp.settings.isUseWorldGuard())
if(pluginWG != null && pluginWG instanceof WorldGuardPlugin) {
{ final Plugin pluginWG = rscp.getServer().getPluginManager().getPlugin("WorldGuard");
this.worldguard = pluginWG; if(pluginWG != null && pluginWG instanceof WorldGuardPlugin)
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_Y.toString())); {
} else { this.worldguard = pluginWG;
this.worldguard = null; console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_Y.toString()));
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_N.toString())); } else {
} this.worldguard = null;
} else console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_N.toString()));
this.worldguard = null; }
// Residence } else
if(plugin.settings.isUseResidence()) this.worldguard = null;
{ // Residence
final Plugin pluginR = plugin.getServer().getPluginManager().getPlugin("Residence"); if(rscp.settings.isUseResidence())
if(pluginR != null && pluginR instanceof Residence) {
{ final Plugin pluginR = rscp.getServer().getPluginManager().getPlugin("Residence");
this.residence = pluginR; if(pluginR != null && pluginR instanceof Residence)
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_Y.toString())); {
} else { this.residence = pluginR;
this.residence = null; console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_Y.toString()));
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_N.toString())); } else {
} this.residence = null;
} else console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_N.toString()));
this.residence = null; }
} } else
public synchronized void deintegrate() this.residence = null;
{ }
this.worldguard = null; public synchronized void deintegrate()
this.residence = null; {
regionsByPlayer.clear(); this.worldguard = null;
playerRegionHashes.clear(); this.residence = null;
playerLastWorld.clear(); regionsByPlayer.clear();
} playerRegionHashes.clear();
public synchronized boolean isRegionListChanged(Player player) playerLastWorld.clear();
{ }
final Location location = player.getLocation(); public synchronized boolean isRegionListChanged(Player player)
final World world = location.getWorld(); {
final Set<String> playerRegions = new HashSet<>(); final Location location = player.getLocation();
// WorldGuard final World world = location.getWorld();
if(worldguard != null && worldguard.isEnabled()) final Set<String> playerRegions = new HashSet<>();
try // WorldGuard
{ if(worldguard != null && worldguard.isEnabled())
final WorldGuardPlugin pluginWG = (WorldGuardPlugin)worldguard; try
final RegionManager rman = pluginWG.getRegionManager(world); {
if(rman == null) final WorldGuardPlugin pluginWG = (WorldGuardPlugin)worldguard;
return false; final RegionManager rman = pluginWG.getRegionManager(world);
// Get list if(rman == null)
final ApplicableRegionSet appregs = rman.getApplicableRegions(location); return false;
for(ProtectedRegion region : appregs) // Get list
playerRegions.add(region.getId()); final ApplicableRegionSet appregs = rman.getApplicableRegions(location);
} catch(RuntimeException | IncompatibleClassChangeError ex) { for(ProtectedRegion region : appregs)
worldguard = null; playerRegions.add(region.getId());
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_OLD.toString())); } catch(RuntimeException | IncompatibleClassChangeError ex) {
} worldguard = null;
// Residence rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_OLD.toString()));
if(residence != null && residence.isEnabled()) }
try // Residence
{ if(residence != null && residence.isEnabled())
// Get list try
final ResidenceManager residenceManager = ResidenceAPI.getResidenceManager(); {
if(residenceManager != null) // Get list
{ final ResidenceManager residenceManager = ResidenceAPI.getResidenceManager();
final ResidenceArea residenceArea = residenceManager.getByLocation(location); if(residenceManager != null)
if(residenceArea != null) {
playerRegions.add(residenceArea.getFullName()); final ResidenceArea residenceArea = residenceManager.getByLocation(location);
} if(residenceArea != null)
} catch(RuntimeException ex) { playerRegions.add(residenceArea.getFullName());
} }
// Is it changed? } catch(RuntimeException ex) {
int hashcode = playerRegions.hashCode(); }
if(playerLastWorld.containsKey(player)) // Is it changed?
if(playerLastWorld.get(player).equals(world)) int hashcode = playerRegions.hashCode();
if(hashcode == playerRegionHashes.get(player)) if(playerLastWorld.containsKey(player))
return false; if(playerLastWorld.get(player).equals(world))
// Update if(hashcode == playerRegionHashes.get(player))
playerRegionHashes.put(player, hashcode); return false;
regionsByPlayer.put(player, playerRegions); // Update
playerLastWorld.put(player, world); playerRegionHashes.put(player, hashcode);
return true; regionsByPlayer.put(player, playerRegions);
} playerLastWorld.put(player, world);
public synchronized Set<String> getPlayerRegions(Player player) return true;
{ }
Set<String> result = regionsByPlayer.get(player); public synchronized Set<String> getPlayerRegions(Player player)
return (result != null) ? result : Collections.<String>emptySet(); {
} Set<String> result = regionsByPlayer.get(player);
public synchronized void removePlayer(Player player) return (result != null) ? result : Collections.<String>emptySet();
{ }
playerRegionHashes.remove(player); public synchronized void removePlayer(Player player)
regionsByPlayer.remove(player); {
playerLastWorld.remove(player); playerRegionHashes.remove(player);
} regionsByPlayer.remove(player);
} playerLastWorld.remove(player);
}
}

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java

@ -17,7 +17,7 @@ public class CommandFetch
if(sender.hasPermission("rscp.admin.reload")) if(sender.hasPermission("rscp.admin.reload"))
{ {
rscp.commandHelper.threadFetchDatabaseContents.startDeamon(); rscp.commandHelper.threadFetchDatabaseContents.startDeamon();
throw new CommandAnswerException(Phrases.MYSQL_FETCHED.toString()); throw new CommandAnswerException(Phrases.FETCHED_ANSWER.toString());
} }
} }
} }

316
src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -1,159 +1,157 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitScheduler;
import org.mcstats.MetricsLite; import org.mcstats.MetricsLite;
import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase; import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase;
import ru.simsonic.rscPermissions.Engine.Backends.BackendJson; import ru.simsonic.rscPermissions.Engine.Backends.BackendJson;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Bukkit.BukkitEventListener; import ru.simsonic.rscPermissions.Bukkit.BukkitEventListener;
import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager; import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager;
import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration;
import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders; import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders;
import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands; import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands;
import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver; import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver;
import ru.simsonic.rscPermissions.Engine.InternalCache; import ru.simsonic.rscPermissions.Engine.InternalCache;
import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscPermissions.Engine.Phrases;
import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public final class BukkitPluginMain extends JavaPlugin public final class BukkitPluginMain extends JavaPlugin
{ {
public static final Logger consoleLog = Bukkit.getLogger(); public static final Logger consoleLog = Bukkit.getLogger();
public final Settings settings = new BukkitPluginConfiguration(this); public final Settings settings = new BukkitPluginConfiguration(this);
public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this); public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);
public final BukkitEventListener bukkitListener = new BukkitEventListener(this); public final BukkitEventListener bukkitListener = new BukkitEventListener(this);
public final BackendJson localStorage = new BackendJson(getDataFolder()); public final BackendJson localStorage = new BackendJson(getDataFolder());
public final BackendDatabase connection = new BackendDatabase(consoleLog); public final BackendDatabase connection = new BackendDatabase(consoleLog);
public final InternalCache internalCache = new InternalCache(); public final InternalCache internalCache = new InternalCache();
public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this); public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this);
public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this); public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this);
private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this); private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this);
public final BukkitCommands commandHelper = new BukkitCommands(this); public final BukkitCommands commandHelper = new BukkitCommands(this);
private MetricsLite metrics; private MetricsLite metrics;
@Override @Override
public void onLoad() public void onLoad()
{ {
Phrases.extractTranslations(getDataFolder()); Phrases.extractTranslations(getDataFolder());
settings.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] serverId value is set to \"{0}\". You can change it in server.properties.", getServer().getServerId());
consoleLog.log(Level.INFO, "[rscp] rscPermissions has been loaded."); consoleLog.log(Level.INFO, "[rscp] rscPermissions has been loaded.");
} }
@Override @Override
public void onEnable() public void onEnable()
{ {
// Read settings and setup components // Read settings and setup components
settings.readSettings(); settings.readSettings();
bukkitListener.onEnable(); bukkitListener.onEnable();
internalCache.setDefaultGroup( internalCache.setDefaultGroup(
settings.getDefaultGroup(), settings.getDefaultGroup(),
settings.isDefaultForever()); settings.isDefaultForever());
Phrases.applyTranslation(settings.getTranslationProvider()); Phrases.applyTranslation(settings.getTranslationProvider());
// Restore temporary cached data from json files // Restore temporary cached data from json files
final DatabaseContents contents = localStorage.retrieveContents(); final DatabaseContents contents = localStorage.retrieveContents();
contents.filterServerId(getServer().getServerId()).filterLifetime(); contents.filterServerId(getServer().getServerId()).filterLifetime();
internalCache.fill(contents); internalCache.fill(contents);
consoleLog.log(Level.INFO, getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(
"[rscp] Loaded {0} entity, {1} permission and {2} inheritance rows from local cache.", new Integer[] (Settings.chatPrefix + Phrases.FETCHED_LOCAL_CACHE.toString())
{ .replace("{:E}", String.valueOf(contents.entities.length))
contents.entities.length, .replace("{:P}", String.valueOf(contents.permissions.length))
contents.permissions.length, .replace("{:I}", String.valueOf(contents.inheritance.length))));
contents.inheritance.length, // Integrate Metrics
}); if(settings.isUseMetrics())
// Integrate Metrics try
if(settings.isUseMetrics()) {
try metrics = new MetricsLite(this);
{ metrics.start();
metrics = new MetricsLite(this); consoleLog.info(Phrases.PLUGIN_METRICS.toString());
metrics.start(); } catch(IOException ex) {
consoleLog.info(Phrases.PLUGIN_METRICS.toString()); consoleLog.log(Level.WARNING, "[rscp][Metrics] Exception: {0}", ex);
} catch(IOException ex) { }
consoleLog.log(Level.WARNING, "[rscp][Metrics] Exception: {0}", ex); // Register event's dispatcher
} getServer().getPluginManager().registerEvents(bukkitListener, this);
// Register event's dispatcher regionUpdateObserver.registerListeners();
getServer().getPluginManager().registerEvents(bukkitListener, this); // Integrate Vault and WEPIF
regionUpdateObserver.registerListeners(); bridgeForBukkit.setupVault();
// Integrate Vault and WEPIF getServer().getScheduler().runTask(this, new Runnable()
bridgeForBukkit.setupVault(); {
getServer().getScheduler().runTask(this, new Runnable() @Override
{ public void run()
@Override {
public void run() bridgeForBukkit.setupWEPIF();
{ }
bridgeForBukkit.setupWEPIF(); });
} // WorldGuard, Residence and other possible region list providers
}); regionListProvider.integrate();
// WorldGuard, Residence and other possible region list providers // Start all needed parallel threads as daemons
regionListProvider.integrate(); permissionManager.startDeamon();
// Start all needed parallel threads as daemons regionUpdateObserver.startDeamon();
permissionManager.startDeamon(); // Connect to database and initiate data fetching
regionUpdateObserver.startDeamon(); connection.initialize(settings.getConnectionParams());
// Connect to database and initiate data fetching if(settings.getAutoReloadDelayTicks() > 0)
connection.initialize(settings.getConnectionParams()); commandHelper.threadFetchDatabaseContents.startDeamon();
if(settings.getAutoReloadDelayTicks() > 0) // Done
commandHelper.threadFetchDatabaseContents.startDeamon(); consoleLog.info(Phrases.PLUGIN_ENABLED.toString());
// Done }
consoleLog.info(Phrases.PLUGIN_ENABLED.toString()); @Override
} public void onDisable()
@Override {
public void onDisable() getServer().getServicesManager().unregisterAll(this);
{ regionUpdateObserver.stop();
getServer().getServicesManager().unregisterAll(this); permissionManager.stop();
regionUpdateObserver.stop(); internalCache.clear();
permissionManager.stop(); connection.disconnect();
internalCache.clear(); regionListProvider.deintegrate();
connection.disconnect(); metrics = null;
regionListProvider.deintegrate(); consoleLog.info(Phrases.PLUGIN_DISABLED.toString());
metrics = null; }
consoleLog.info(Phrases.PLUGIN_DISABLED.toString()); private int nAutoUpdaterTaskId = -1;
} public void scheduleAutoUpdate()
private int nAutoUpdaterTaskId = -1; {
public void scheduleAutoUpdate() final BukkitScheduler scheduler = getServer().getScheduler();
{ if(nAutoUpdaterTaskId != -1)
final BukkitScheduler scheduler = getServer().getScheduler(); scheduler.cancelTask(nAutoUpdaterTaskId);
if(nAutoUpdaterTaskId != -1) final int delay = settings.getAutoReloadDelayTicks();
scheduler.cancelTask(nAutoUpdaterTaskId); nAutoUpdaterTaskId = delay > 0
final int delay = settings.getAutoReloadDelayTicks(); ? scheduler.scheduleSyncDelayedTask(this, new Runnable()
nAutoUpdaterTaskId = delay > 0 {
? scheduler.scheduleSyncDelayedTask(this, new Runnable() @Override
{ public void run()
@Override {
public void run() commandHelper.threadFetchDatabaseContents.startDeamon();
{ }
commandHelper.threadFetchDatabaseContents.startDeamon(); }, delay)
} : -1;
}, delay) }
: -1; @Override
} public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
@Override {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) if(sender != null)
{ try
if(sender != null) {
try switch(cmd.getName().toLowerCase())
{ {
switch(cmd.getName().toLowerCase()) case "rscp":
{ commandHelper.onCommandHub(sender, args);
case "rscp": break;
commandHelper.onCommandHub(sender, args); }
break; } catch(CommandAnswerException ex) {
} final boolean decolorize = Settings.decolorizeForConsole && sender instanceof ConsoleCommandSender;
} catch(CommandAnswerException ex) { for(String answer : ex.getMessageArray())
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;
answer = GenericChatCodes.processStringStatic(Settings.chatPrefix + answer); sender.sendMessage(textToSend);
final String textToSend = decolorize ? org.bukkit.ChatColor.stripColor(answer) : answer; }
sender.sendMessage(textToSend); }
} return true;
} }
return true; }
}
}

138
src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java

@ -1,68 +1,70 @@
package ru.simsonic.rscPermissions.Engine; package ru.simsonic.rscPermissions.Engine;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.channels.Channels; import java.nio.channels.Channels;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import ru.simsonic.rscPermissions.API.TranslationProvider; import ru.simsonic.rscPermissions.API.TranslationProvider;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
public enum Phrases public enum Phrases
{ {
PLUGIN_ENABLED ("generic.enabled"), PLUGIN_ENABLED ("generic.enabled"),
PLUGIN_DISABLED ("generic.disabled"), PLUGIN_DISABLED ("generic.disabled"),
PLUGIN_METRICS ("generic.metrics"), PLUGIN_METRICS ("generic.metrics"),
PLUGIN_RELOADED ("generic.reloaded"), PLUGIN_RELOADED ("generic.reloaded"),
PLUGIN_PLAYER_ONLY ("generic.player-only"), PLUGIN_PLAYER_ONLY ("generic.player-only"),
PLUGIN_CONSOLE_ONLY("generic.console-only"), PLUGIN_CONSOLE_ONLY("generic.console-only"),
INTEGRATION_V_Y ("integration.vault-yes"), INTEGRATION_V_Y ("integration.vault-yes"),
INTEGRATION_V_N ("integration.vault-no"), INTEGRATION_V_N ("integration.vault-no"),
INTEGRATION_WE_Y ("integration.worldedit-yes"), INTEGRATION_WE_Y ("integration.worldedit-yes"),
INTEGRATION_WE_N ("integration.worldedit-no"), INTEGRATION_WE_N ("integration.worldedit-no"),
INTEGRATION_WG_Y ("integration.worldguard-yes"), INTEGRATION_WG_Y ("integration.worldguard-yes"),
INTEGRATION_WG_N ("integration.worldguard-no"), INTEGRATION_WG_N ("integration.worldguard-no"),
INTEGRATION_WG_OLD ("integration.worldguard-old"), INTEGRATION_WG_OLD ("integration.worldguard-old"),
INTEGRATION_R_Y ("integration.residence-yes"), INTEGRATION_R_Y ("integration.residence-yes"),
INTEGRATION_R_N ("integration.residence-no"), INTEGRATION_R_N ("integration.residence-no"),
DEBUG_ON ("debug.enable"), DEBUG_ON ("debug.enable"),
DEBUG_OFF ("debug.disable"), DEBUG_OFF ("debug.disable"),
MYSQL_FETCHED ("mysql.fetched"), FETCHED_ANSWER ("database.command-answer"),
; FETCHED_LOCAL_CACHE("database.fetched-local"),
private final String node; FETCHED_REMOTE_DB ("database.fetched-remote"),
private String phrase; ;
private Phrases(String node) private final String node;
{ private String phrase;
this.node = node; private Phrases(String node)
} {
@Override this.node = node;
public String toString() }
{ @Override
return phrase; public String toString()
} {
public static void applyTranslation(TranslationProvider provider) return phrase;
{ }
for(Phrases value : Phrases.values()) public static void applyTranslation(TranslationProvider provider)
value.phrase = provider.getString(value.node); {
} for(Phrases value : Phrases.values())
public static void extractTranslations(File workingDir) value.phrase = provider.getString(value.node);
{ }
extractTranslation(workingDir, "english"); public static void extractTranslations(File workingDir)
extractTranslation(workingDir, "russian"); {
} extractTranslation(workingDir, "english");
private static void extractTranslation(File workingDir, String langName) extractTranslation(workingDir, "russian");
{ }
try private static void extractTranslation(File workingDir, String langName)
{ {
final File langFile = new File(workingDir, langName + ".yml"); try
if(langFile.isFile()) {
langFile.delete(); final File langFile = new File(workingDir, langName + ".yml");
final FileChannel fileChannel = new FileOutputStream(langFile).getChannel(); if(langFile.isFile())
fileChannel.force(true); langFile.delete();
final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); final FileChannel fileChannel = new FileOutputStream(langFile).getChannel();
fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE); fileChannel.force(true);
} catch(IOException ex) { final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml");
} fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE);
} } catch(IOException ex) {
} }
}
}

46
src/main/resources/languages/english.yml

@ -1,22 +1,24 @@
generic: generic:
enabled: "[rscp] rscPermissions has been successfully enabled." enabled: "[rscp] rscPermissions has been successfully enabled."
disabled: "[rscp] rscPermissions has been disabled." disabled: "[rscp] rscPermissions has been disabled."
reloaded: "[rscp] rscPermissions has been reloaded." reloaded: "[rscp] rscPermissions has been reloaded."
metrics: "[rscp] Metrics enabled." metrics: "[rscp] Metrics enabled."
player-only: "{_LR}This command cannot be run from console." player-only: "{_LR}This command cannot be run from console."
console-only: "{_LR}This command should be run from console." console-only: "{_LR}This command should be run from console."
integration: integration:
vault-yes: "{_LG}Vault was found and integrated." 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." 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-yes: "{_LG}WorldEdit (WEPIF) was found and integrated."
worldedit-no: "{_YL}WorldEdit (WEPIF) was not found." worldedit-no: "{_YL}WorldEdit (WEPIF) was not found."
worldguard-yes: "{_LG}WorldGuard was found and integrated." worldguard-yes: "{_LG}WorldGuard was found and integrated."
worldguard-no: "{_YL}WorldGuard was not found." 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." 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-yes: "{_LG}Residence was found and integrated."
residence-no: "{_YL}Residence was not found." residence-no: "{_YL}Residence was not found."
debug: debug:
enable: "You will see a lot of debugging information now." enable: "You will see a lot of debugging information now."
disable: "Debugging information is now hidden for you." disable: "Debugging information is now hidden for you."
mysql: database:
fetched: "Tables have been fetched." 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."

46
src/main/resources/languages/russian.yml

@ -1,22 +1,24 @@
generic: generic:
enabled: "[rscp] Плагин rscPermissions успешно включён." enabled: "[rscp] Плагин rscPermissions успешно включён."
disabled: "[rscp] Плагин rscPermissions выключен." disabled: "[rscp] Плагин rscPermissions выключен."
reloaded: "[rscp] Плагин rscPermissions перезапущен, конфигурация перечитана." reloaded: "[rscp] Плагин rscPermissions перезапущен, конфигурация перечитана."
metrics: "[rscp] Включён сбор метрики (mcstats.org)." metrics: "[rscp] Включён сбор метрики (mcstats.org)."
player-only: "{_LR}Эта команда не может быть использована из консоли." player-only: "{_LR}Эта команда не может быть использована из консоли."
console-only: "{_LR}Эта команда может быть использована только из консоли." console-only: "{_LR}Эта команда может быть использована только из консоли."
integration: integration:
vault-yes: "{_LG}Vault обнаружён и подключён." vault-yes: "{_LG}Vault обнаружён и подключён."
vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка."
worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён."
worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен."
worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." worldguard-yes: "{_LG}WorldGuard обнаружён и подключён."
worldguard-no: "{_YL}WorldGuard не обнаружен." worldguard-no: "{_YL}WorldGuard не обнаружен."
worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена."
residence-yes: "{_LG}Residence обнаружён и подключён." residence-yes: "{_LG}Residence обнаружён и подключён."
residence-no: "{_YL}Residence не обнаружен." residence-no: "{_YL}Residence не обнаружен."
debug: debug:
enable: "Теперь Вы будете видеть отладочную информацию." enable: "Теперь Вы будете видеть отладочную информацию."
disable: "Отладочная информация теперь скрыта от Вас." disable: "Отладочная информация теперь скрыта от Вас."
mysql: database:
fetched: "База данных перечитана." command-answer: "База данных перечитана."
fetched-local: "{_LG}Восстановлено {:E} сущностей, {:P} прав and {:I} наследований."
fetched-remote: "{_LG}Получено {:E} сущностей, {:P} прав and {:I} наследований."

Loading…
Cancel
Save