You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
6.0 KiB
157 lines
6.0 KiB
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; |
|
} |
|
}
|
|
|