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;
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()));
}
}
}

14
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();
}

268
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<Player, Set<String>> regionsByPlayer = new HashMap<>();
private final Map<Player, Integer> playerRegionHashes = new HashMap<>();
private final Map<Player, World> 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<String> 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<String> getPlayerRegions(Player player)
{
Set<String> result = regionsByPlayer.get(player);
return (result != null) ? result : Collections.<String>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<Player, Set<String>> regionsByPlayer = new HashMap<>();
private final Map<Player, Integer> playerRegionHashes = new HashMap<>();
private final Map<Player, World> 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<String> 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<String> getPlayerRegions(Player player)
{
Set<String> result = regionsByPlayer.get(player);
return (result != null) ? result : Collections.<String>emptySet();
}
public synchronized void removePlayer(Player 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"))
{
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;
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;
}
}

138
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) {
}
}
}

46
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."

46
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} наследований."

Loading…
Cancel
Save