package net.frankheijden.serverutils.common;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Optional;
import net.frankheijden.serverutils.common.entities.ServerUtilsPluginDescription;
import net.frankheijden.serverutils.common.entities.results.CloseablePluginResult;
import net.frankheijden.serverutils.common.entities.results.PluginResult;
import net.frankheijden.serverutils.common.entities.ServerUtilsAudience;
import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin;
import net.frankheijden.serverutils.common.tasks.UpdateCheckerTask;
public class ServerUtilsApp, P, T, C extends ServerUtilsAudience, S, D extends ServerUtilsPluginDescription> {
public static final int BSTATS_METRICS_ID = 7790;
public static final String VERSION = "{version}";
private final Object platformPlugin;
private final U plugin;
@SuppressWarnings("rawtypes")
private static ServerUtilsApp instance;
private ServerUtilsApp(Object platformPlugin, U plugin) {
this.platformPlugin = platformPlugin;
this.plugin = plugin;
}
public static <
U extends ServerUtilsPlugin
,
P,
T,
C extends ServerUtilsAudience,
S,
D extends ServerUtilsPluginDescription
> void init(
Object platformPlugin,
U plugin
) {
instance = new ServerUtilsApp<>(platformPlugin, plugin);
}
/**
* Tries checking for updates if enabled by the config.
*/
public static void tryCheckForUpdates() {
UpdateCheckerTask.tryStart(getPlugin(), getPlugin().getChatProvider().getConsoleServerAudience(), "boot");
}
/**
* Unloads the ServerUtilsUpdater and deletes the file.
*/
public static
void unloadServerUtilsUpdater() { ServerUtilsPlugin
plugin = getPlugin(); plugin.getTaskManager().runTaskLater(() -> { String updaterName = plugin.getPlatform() == ServerUtilsPlugin.Platform.VELOCITY ? "serverutilsupdater" : "ServerUtilsUpdater"; Optional
updaterPluginOptional = plugin.getPluginManager().getPlugin(updaterName); if (!updaterPluginOptional.isPresent()) return; P updaterPlugin = updaterPluginOptional.get(); @SuppressWarnings("VariableDeclarationUsageDistance") File file = plugin.getPluginManager().getPluginFile(updaterPlugin); PluginResult
disableResult = plugin.getPluginManager().disablePlugin(updaterPlugin); if (!disableResult.isSuccess()) { disableResult.sendTo(plugin.getChatProvider().getConsoleServerAudience(), null); return; } CloseablePluginResult
unloadResult = plugin.getPluginManager().unloadPlugin(disableResult.getPlugin()); if (!unloadResult.isSuccess()) { unloadResult.sendTo(plugin.getChatProvider().getConsoleServerAudience(), null); return; } unloadResult.tryClose(); if (Files.exists(file.toPath())) { try { Files.delete(file.toPath()); } catch (IOException ex) { ex.printStackTrace(); } } }, 10); } public static Object getPlatformPlugin() { return instance.platformPlugin; } @SuppressWarnings("unchecked") public static < U extends ServerUtilsPlugin
,
P,
T,
C extends ServerUtilsAudience,
S,
D extends ServerUtilsPluginDescription
> U getPlugin() {
return (U) instance.plugin;
}
}