From e67b20dee0c2a3553137304f3c326ccb46bc3972 Mon Sep 17 00:00:00 2001 From: Frank van der Heijden Date: Sun, 5 Jul 2020 16:07:36 +0200 Subject: [PATCH] More abstractions - Abstracted UpdateCheckerTask - Merged PluginProvider into the PluginManagers --- .../serverutils/bukkit/ServerUtils.java | 27 ++----- .../bukkit/commands/CommandPlugins.java | 10 +-- .../bukkit/commands/CommandServerUtils.java | 18 ++--- .../bukkit/entities/BukkitChatProvider.java | 25 ++++++ .../bukkit/entities/BukkitColorProvider.java | 12 --- .../bukkit/entities/BukkitCommandSender.java | 5 ++ .../bukkit/entities/BukkitPlugin.java | 41 ++++++---- .../bukkit/entities/BukkitPluginProvider.java | 34 -------- .../bukkit/listeners/BukkitListener.java | 21 +++++ .../bukkit/listeners/MainListener.java | 31 ------- ...nManager.java => BukkitPluginManager.java} | 68 +++++++++++++--- .../bukkit/managers/BukkitTaskManager.java | 13 +++ .../bukkit/managers/BukkitVersionManager.java | 15 ++++ .../bukkit/managers/VersionManager.java | 45 ----------- .../bukkit/reflection/RJavaPlugin.java | 8 +- .../serverutils/bungee/ServerUtils.java | 14 ++-- .../bungee/commands/CommandPlugins.java | 9 +-- .../bungee/commands/CommandServerUtils.java | 12 ++- .../bungee/entities/BungeeChatProvider.java | 27 +++++++ .../bungee/entities/BungeeColorProvider.java | 12 --- .../bungee/entities/BungeeCommandSender.java | 5 ++ .../bungee/entities/BungeePlugin.java | 41 ++++++---- .../bungee/entities/BungeePluginProvider.java | 51 ------------ .../bungee/listeners/BungeeListener.java | 16 ++++ ...nManager.java => BungeePluginManager.java} | 81 ++++++++++++++++--- .../bungee/managers/BungeeTaskManager.java | 13 +++ .../bungee/managers/BungeeVersionManager.java | 15 ++++ .../serverutils/common/ServerUtilsApp.java | 34 ++++++-- .../serverutils/common/config/Messenger.java | 8 +- .../common/entities/ServerCommandSender.java | 2 + .../common/entities/ServerUtilsPlugin.java | 17 ++-- .../common/listeners/ServerListener.java | 19 +++++ .../managers/AbstractPluginManager.java | 25 ++++++ .../common/managers/AbstractTaskManager.java | 6 ++ .../managers/AbstractVersionManager.java | 37 +++++++++ .../common/providers/ChatProvider.java | 12 +++ .../common/providers/ColorProvider.java | 6 -- .../common/providers/PluginProvider.java | 2 + .../common}/tasks/UpdateCheckerTask.java | 55 +++++-------- .../serverutils/common/utils/ListBuilder.java | 1 + 40 files changed, 546 insertions(+), 347 deletions(-) create mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java delete mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitColorProvider.java delete mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPluginProvider.java create mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/BukkitListener.java delete mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/MainListener.java rename Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/{PluginManager.java => BukkitPluginManager.java} (86%) create mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitTaskManager.java create mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitVersionManager.java delete mode 100644 Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/VersionManager.java create mode 100644 Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java delete mode 100644 Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeColorProvider.java delete mode 100644 Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePluginProvider.java create mode 100644 Bungee/src/main/java/net/frankheijden/serverutils/bungee/listeners/BungeeListener.java rename Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/{PluginManager.java => BungeePluginManager.java} (75%) create mode 100644 Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeTaskManager.java create mode 100644 Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeVersionManager.java create mode 100644 Common/src/main/java/net/frankheijden/serverutils/common/listeners/ServerListener.java create mode 100644 Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractPluginManager.java create mode 100644 Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractTaskManager.java create mode 100644 Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractVersionManager.java create mode 100644 Common/src/main/java/net/frankheijden/serverutils/common/providers/ChatProvider.java delete mode 100644 Common/src/main/java/net/frankheijden/serverutils/common/providers/ColorProvider.java rename {Bukkit/src/main/java/net/frankheijden/serverutils/bukkit => Common/src/main/java/net/frankheijden/serverutils/common}/tasks/UpdateCheckerTask.java (80%) diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java index 9bdb327..736e691 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/ServerUtils.java @@ -11,23 +11,19 @@ import java.util.Map; import net.frankheijden.serverutils.bukkit.commands.CommandPlugins; import net.frankheijden.serverutils.bukkit.commands.CommandServerUtils; import net.frankheijden.serverutils.bukkit.entities.BukkitPlugin; -import net.frankheijden.serverutils.bukkit.listeners.MainListener; -import net.frankheijden.serverutils.bukkit.managers.VersionManager; +import net.frankheijden.serverutils.bukkit.listeners.BukkitListener; +import net.frankheijden.serverutils.bukkit.managers.BukkitPluginManager; import net.frankheijden.serverutils.bukkit.entities.BukkitReflection; import net.frankheijden.serverutils.bukkit.reflection.RCommandMap; import net.frankheijden.serverutils.bukkit.reflection.RCraftServer; -import net.frankheijden.serverutils.bukkit.tasks.UpdateCheckerTask; -import net.frankheijden.serverutils.bukkit.utils.BukkitUtils; import net.frankheijden.serverutils.common.ServerUtilsApp; import net.frankheijden.serverutils.common.config.Config; import net.frankheijden.serverutils.common.config.Messenger; -import net.frankheijden.serverutils.common.providers.PluginProvider; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.defaults.PluginsCommand; -import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; public class ServerUtils extends JavaPlugin implements CommandExecutor { @@ -46,7 +42,7 @@ public class ServerUtils extends JavaPlugin implements CommandExecutor { instance = this; this.plugin = new BukkitPlugin(this); - ServerUtilsApp.init(plugin); + ServerUtilsApp.init(this, plugin); new Metrics(this, ServerUtilsApp.BSTATS_METRICS_ID); new BukkitReflection(); @@ -55,10 +51,10 @@ public class ServerUtils extends JavaPlugin implements CommandExecutor { commandManager.registerCommand(new CommandServerUtils()); this.commandPlugins = null; - PluginProvider provider = plugin.getPluginProvider(); + BukkitPluginManager manager = plugin.getPluginManager(); CommandCompletions completions = commandManager.getCommandCompletions(); - completions.registerAsyncCompletion("plugins", context -> provider.getPluginNames()); - completions.registerAsyncCompletion("pluginJars", context -> provider.getPluginFileNames()); + completions.registerAsyncCompletion("plugins", context -> manager.getPluginNames()); + completions.registerAsyncCompletion("pluginJars", context -> manager.getPluginFileNames()); completions.registerAsyncCompletion("supportedConfigs ", context -> CommandServerUtils.getSupportedConfigs()); completions.registerAsyncCompletion("commands", context -> { try { @@ -70,10 +66,9 @@ public class ServerUtils extends JavaPlugin implements CommandExecutor { }); reload(); - Bukkit.getPluginManager().registerEvents(new MainListener(), this); + Bukkit.getPluginManager().registerEvents(new BukkitListener(), this); - new VersionManager(); - checkForUpdates(); + ServerUtilsApp.checkForUpdates(); } public static ServerUtils getInstance() { @@ -131,10 +126,4 @@ public class ServerUtils extends JavaPlugin implements CommandExecutor { public PaperCommandManager getCommandManager() { return commandManager; } - - private void checkForUpdates() { - if (Config.getInstance().getConfig().getBoolean("settings.check-updates")) { - UpdateCheckerTask.start(BukkitUtils.wrap(Bukkit.getConsoleSender()), true); - } - } } diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandPlugins.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandPlugins.java index 175c61a..bf067bd 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandPlugins.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandPlugins.java @@ -7,18 +7,16 @@ import co.aikar.commands.annotation.Default; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Subcommand; -import net.frankheijden.serverutils.bukkit.ServerUtils; +import net.frankheijden.serverutils.bukkit.managers.BukkitPluginManager; import net.frankheijden.serverutils.bukkit.utils.BukkitUtils; import net.frankheijden.serverutils.common.commands.Plugins; import net.frankheijden.serverutils.common.config.Messenger; -import net.frankheijden.serverutils.common.providers.PluginProvider; import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; @CommandAlias("plugins|pl") public class CommandPlugins extends BaseCommand { - private static final PluginProvider provider = ServerUtils.getInstance().getPlugin().getPluginProvider(); + private static final BukkitPluginManager manager = BukkitPluginManager.get(); /** * Sends the plugin list to the sender, without plugin version. @@ -28,7 +26,7 @@ public class CommandPlugins extends BaseCommand { @CommandPermission("serverutils.plugins") @Description("Shows the plugins of this server.") public void onPlugins(CommandSender sender) { - Plugins.sendPlugins(BukkitUtils.wrap(sender), provider.getPluginsSorted(), pl -> { + Plugins.sendPlugins(BukkitUtils.wrap(sender), manager.getPluginsSorted(), pl -> { String format = "serverutils.plugins.format" + (pl.isEnabled() ? "" : "_disabled"); return Messenger.getMessage(format, "%plugin%", pl.getName()); }); @@ -42,7 +40,7 @@ public class CommandPlugins extends BaseCommand { @CommandPermission("serverutils.plugins.version") @Description("Shows the plugins of this server with version.") public void onPluginsWithVersion(CommandSender sender) { - Plugins.sendPlugins(BukkitUtils.wrap(sender), provider.getPluginsSorted(), pl -> { + Plugins.sendPlugins(BukkitUtils.wrap(sender), manager.getPluginsSorted(), pl -> { String format = "serverutils.plugins.format" + (pl.isEnabled() ? "" : "_disabled"); String version = Messenger.getMessage("serverutils.plugins.version", "%version%", pl.getDescription().getVersion()); diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandServerUtils.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandServerUtils.java index 9fe63a0..08c5ec2 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandServerUtils.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/commands/CommandServerUtils.java @@ -19,7 +19,7 @@ import java.util.Set; import net.frankheijden.serverutils.bukkit.ServerUtils; import net.frankheijden.serverutils.bukkit.entities.BukkitLoadResult; -import net.frankheijden.serverutils.bukkit.managers.PluginManager; +import net.frankheijden.serverutils.bukkit.managers.BukkitPluginManager; import net.frankheijden.serverutils.bukkit.reflection.RCraftServer; import net.frankheijden.serverutils.bukkit.utils.BukkitUtils; import net.frankheijden.serverutils.bukkit.utils.ReloadHandler; @@ -152,13 +152,13 @@ public class CommandServerUtils extends BaseCommand { public void onLoadPlugin(CommandSender commandSender, String jarFile) { ServerCommandSender sender = BukkitUtils.wrap(commandSender); - BukkitLoadResult loadResult = PluginManager.loadPlugin(jarFile); + BukkitLoadResult loadResult = BukkitPluginManager.get().loadPlugin(jarFile); if (!loadResult.isSuccess()) { loadResult.getResult().sendTo(sender, "load", jarFile); return; } - Result result = PluginManager.enablePlugin(loadResult.get()); + Result result = BukkitPluginManager.get().enablePlugin(loadResult.get()); result.sendTo(sender, "load", jarFile); } @@ -174,13 +174,13 @@ public class CommandServerUtils extends BaseCommand { public void onUnloadPlugin(CommandSender commandSender, String pluginName) { ServerCommandSender sender = BukkitUtils.wrap(commandSender); - Result disableResult = PluginManager.disablePlugin(pluginName); + Result disableResult = BukkitPluginManager.disablePlugin(pluginName); if (disableResult != Result.SUCCESS && disableResult != Result.ALREADY_DISABLED) { disableResult.sendTo(sender, "disabl", pluginName); return; } - CloseableResult result = PluginManager.unloadPlugin(pluginName); + CloseableResult result = BukkitPluginManager.get().unloadPlugin(pluginName); result.getResult().sendTo(sender, "unload", pluginName); result.tryClose(); } @@ -195,7 +195,7 @@ public class CommandServerUtils extends BaseCommand { @CommandPermission("serverutils.reloadplugin") @Description("Reloads a specified plugin.") public void onReloadPlugin(CommandSender sender, String pluginName) { - CloseableResult result = PluginManager.reloadPlugin(pluginName); + CloseableResult result = BukkitPluginManager.get().reloadPlugin(pluginName); result.getResult().sendTo(BukkitUtils.wrap(sender), "reload", pluginName); result.tryClose(); } @@ -210,7 +210,7 @@ public class CommandServerUtils extends BaseCommand { @CommandPermission("serverutils.enableplugin") @Description("Enables the loaded plugin.") public void onEnablePlugin(CommandSender sender, String pluginName) { - Result result = PluginManager.enablePlugin(pluginName); + Result result = BukkitPluginManager.get().enablePlugin(pluginName); result.sendTo(BukkitUtils.wrap(sender), "enabl", pluginName); } @@ -224,7 +224,7 @@ public class CommandServerUtils extends BaseCommand { @CommandPermission("serverutils.disableplugin") @Description("Disables the specified plugin.") public void onDisablePlugin(CommandSender sender, String pluginName) { - Result result = PluginManager.disablePlugin(pluginName); + Result result = BukkitPluginManager.disablePlugin(pluginName); result.sendTo(BukkitUtils.wrap(sender), "disabl", pluginName); } @@ -309,7 +309,7 @@ public class CommandServerUtils extends BaseCommand { public void onCommandInfo(CommandSender commandSender, String command) { ServerCommandSender sender = BukkitUtils.wrap(commandSender); - Command cmd = PluginManager.getCommand(command); + Command cmd = BukkitPluginManager.getCommand(command); if (cmd == null) { Messenger.sendMessage(sender, "serverutils.commandinfo.not_exists"); return; diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java new file mode 100644 index 0000000..f546017 --- /dev/null +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitChatProvider.java @@ -0,0 +1,25 @@ +package net.frankheijden.serverutils.bukkit.entities; + +import net.frankheijden.serverutils.bukkit.utils.BukkitUtils; +import net.frankheijden.serverutils.common.entities.ServerCommandSender; +import net.frankheijden.serverutils.common.providers.ChatProvider; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; + +public class BukkitChatProvider extends ChatProvider { + + @Override + public ServerCommandSender getConsoleSender() { + return BukkitUtils.wrap(Bukkit.getConsoleSender()); + } + + @Override + public String color(String str) { + return ChatColor.translateAlternateColorCodes('&', str); + } + + @Override + public void broadcast(String permission, String message) { + Bukkit.broadcast(message, permission); + } +} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitColorProvider.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitColorProvider.java deleted file mode 100644 index 13f21ae..0000000 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitColorProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.frankheijden.serverutils.bukkit.entities; - -import net.frankheijden.serverutils.common.providers.ColorProvider; -import net.md_5.bungee.api.ChatColor; - -public class BukkitColorProvider implements ColorProvider { - - @Override - public String apply(String str) { - return ChatColor.translateAlternateColorCodes('&', str); - } -} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitCommandSender.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitCommandSender.java index 01bd01f..b963957 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitCommandSender.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitCommandSender.java @@ -15,4 +15,9 @@ public class BukkitCommandSender implements ServerCommandSender { public void sendMessage(String message) { sender.sendMessage(message); } + + @Override + public boolean hasPermission(String permission) { + return sender.hasPermission(permission); + } } diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPlugin.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPlugin.java index a4a757d..c6309a7 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPlugin.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPlugin.java @@ -4,18 +4,19 @@ import java.io.File; import java.util.logging.Logger; import net.frankheijden.serverutils.bukkit.ServerUtils; -import net.frankheijden.serverutils.common.providers.ColorProvider; -import net.frankheijden.serverutils.common.providers.PluginProvider; -import net.frankheijden.serverutils.common.providers.ResourceProvider; +import net.frankheijden.serverutils.bukkit.managers.BukkitPluginManager; +import net.frankheijden.serverutils.bukkit.managers.BukkitTaskManager; +import net.frankheijden.serverutils.bukkit.managers.BukkitVersionManager; import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin; -import org.bukkit.plugin.Plugin; public class BukkitPlugin extends ServerUtilsPlugin { private final ServerUtils plugin; - private final PluginProvider pluginProvider; - private final ResourceProvider resourceProvider; - private final ColorProvider colorProvider; + private final BukkitPluginManager pluginManager; + private final BukkitTaskManager taskManager; + private final BukkitResourceProvider resourceProvider; + private final BukkitChatProvider chatProvider; + private final BukkitVersionManager versionManager; /** * Creates a new BukkitPlugin instance of ServerUtils. @@ -23,25 +24,37 @@ public class BukkitPlugin extends ServerUtilsPlugin { */ public BukkitPlugin(ServerUtils plugin) { this.plugin = plugin; - this.pluginProvider = new BukkitPluginProvider(plugin); + this.pluginManager = new BukkitPluginManager(plugin); + this.taskManager = new BukkitTaskManager(); this.resourceProvider = new BukkitResourceProvider(plugin); - this.colorProvider = new BukkitColorProvider(); + this.chatProvider = new BukkitChatProvider(); + this.versionManager = new BukkitVersionManager(plugin); } @Override @SuppressWarnings("unchecked") - public PluginProvider getPluginProvider() { - return pluginProvider; + public BukkitPluginManager getPluginManager() { + return pluginManager; } @Override - public ResourceProvider getResourceProvider() { + public BukkitTaskManager getTaskManager() { + return taskManager; + } + + @Override + public BukkitResourceProvider getResourceProvider() { return resourceProvider; } @Override - public ColorProvider getColorProvider() { - return colorProvider; + public BukkitChatProvider getChatProvider() { + return chatProvider; + } + + @Override + public BukkitVersionManager getVersionManager() { + return versionManager; } @Override diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPluginProvider.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPluginProvider.java deleted file mode 100644 index 6ef83d4..0000000 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/entities/BukkitPluginProvider.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.frankheijden.serverutils.bukkit.entities; - -import net.frankheijden.serverutils.bukkit.ServerUtils; -import net.frankheijden.serverutils.common.providers.PluginProvider; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; - -import java.io.File; -import java.util.Arrays; -import java.util.List; - -public class BukkitPluginProvider extends PluginProvider { - - private final ServerUtils plugin; - - public BukkitPluginProvider(ServerUtils plugin) { - this.plugin = plugin; - } - - @Override - public File getPluginsFolder() { - return plugin.getDataFolder().getParentFile(); - } - - @Override - public List getPlugins() { - return Arrays.asList(Bukkit.getPluginManager().getPlugins()); - } - - @Override - public String getPluginName(Plugin plugin) { - return plugin.getName(); - } -} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/BukkitListener.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/BukkitListener.java new file mode 100644 index 0000000..c66403f --- /dev/null +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/BukkitListener.java @@ -0,0 +1,21 @@ +package net.frankheijden.serverutils.bukkit.listeners; + +import net.frankheijden.serverutils.common.listeners.ServerListener; +import net.frankheijden.serverutils.bukkit.utils.BukkitUtils; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class BukkitListener implements Listener { + + /** + * Called when a player joins the server. + * Used for sending an update message to the player, if enabled and has permission. + * @param event The PlayerJoinEvent. + */ + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerJoin(PlayerJoinEvent event) { + ServerListener.handleUpdate(BukkitUtils.wrap(event.getPlayer())); + } +} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/MainListener.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/MainListener.java deleted file mode 100644 index ab11f83..0000000 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/listeners/MainListener.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.frankheijden.serverutils.bukkit.listeners; - -import net.frankheijden.serverutils.bukkit.tasks.UpdateCheckerTask; -import net.frankheijden.serverutils.bukkit.utils.BukkitUtils; -import net.frankheijden.serverutils.common.config.Config; -import net.frankheijden.serverutils.common.config.YamlConfig; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; - -public class MainListener implements Listener { - - private static final YamlConfig config = Config.getInstance().getConfig(); - - /** - * Called when a player joins the server. - * Used for sending an update message to the player, if enabled and has permission. - * @param event The PlayerJoinEvent. - */ - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerJoin(PlayerJoinEvent event) { - if (!config.getBoolean("settings.check-updates-login")) return; - - Player player = event.getPlayer(); - if (player.hasPermission("serverutils.notification.update")) { - UpdateCheckerTask.start(BukkitUtils.wrap(player)); - } - } -} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/PluginManager.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitPluginManager.java similarity index 86% rename from Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/PluginManager.java rename to Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitPluginManager.java index e104e59..f1d5aec 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/PluginManager.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitPluginManager.java @@ -2,6 +2,8 @@ package net.frankheijden.serverutils.bukkit.managers; import java.io.Closeable; import java.io.File; +import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -14,6 +16,7 @@ import net.frankheijden.serverutils.bukkit.reflection.RCraftingManager; import net.frankheijden.serverutils.bukkit.reflection.RJavaPlugin; import net.frankheijden.serverutils.bukkit.reflection.RPluginClassLoader; import net.frankheijden.serverutils.bukkit.reflection.RSimplePluginManager; +import net.frankheijden.serverutils.common.managers.AbstractPluginManager; import net.frankheijden.serverutils.common.entities.CloseableResult; import net.frankheijden.serverutils.common.entities.Result; import org.bukkit.Bukkit; @@ -26,14 +29,27 @@ import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginLoader; import org.bukkit.plugin.UnknownDependencyException; -public class PluginManager { +public class BukkitPluginManager extends AbstractPluginManager { + + private final ServerUtils plugin; + private static BukkitPluginManager instance; + + public BukkitPluginManager(ServerUtils plugin) { + this.plugin = plugin; + instance = this; + } + + public static BukkitPluginManager get() { + return instance; + } /** * Loads the specified file as a plugin. * @param jarFile The name of the file in the plugins/ folder. * @return The result of the loading procedure. */ - public static BukkitLoadResult loadPlugin(String jarFile) { + @Override + public BukkitLoadResult loadPlugin(String jarFile) { return loadPlugin(new File(ServerUtils.getInstance().getDataFolder().getParent(), jarFile)); } @@ -42,7 +58,8 @@ public class PluginManager { * @param file The file to be loaded. * @return The result of the loading procedure. */ - public static BukkitLoadResult loadPlugin(File file) { + @Override + public BukkitLoadResult loadPlugin(File file) { if (!file.exists()) return new BukkitLoadResult(Result.NOT_EXISTS); Plugin loadedPlugin = getLoadedPlugin(file); @@ -104,7 +121,8 @@ public class PluginManager { * @param pluginName The plugin to unload. * @return The result of the unload. */ - public static CloseableResult unloadPlugin(String pluginName) { + @Override + public CloseableResult unloadPlugin(String pluginName) { return unloadPlugin(Bukkit.getPluginManager().getPlugin(pluginName)); } @@ -113,7 +131,8 @@ public class PluginManager { * @param plugin The plugin to unload. * @return The result of the unload. */ - public static CloseableResult unloadPlugin(Plugin plugin) { + @Override + public CloseableResult unloadPlugin(Plugin plugin) { if (plugin == null) return new CloseableResult(Result.NOT_EXISTS); Closeable closeable; try { @@ -132,7 +151,7 @@ public class PluginManager { * @param pluginName The plugin to enable. * @return The result of the enabling. */ - public static Result enablePlugin(String pluginName) { + public Result enablePlugin(String pluginName) { return enablePlugin(Bukkit.getPluginManager().getPlugin(pluginName)); } @@ -141,7 +160,8 @@ public class PluginManager { * @param plugin The plugin to enable. * @return The result of the enabling. */ - public static Result enablePlugin(Plugin plugin) { + @Override + public Result enablePlugin(Plugin plugin) { if (plugin == null) return Result.NOT_EXISTS; if (Bukkit.getPluginManager().isPluginEnabled(plugin.getName())) return Result.ALREADY_ENABLED; Bukkit.getPluginManager().enablePlugin(plugin); @@ -156,7 +176,8 @@ public class PluginManager { * @param pluginName The plugin to reload. * @return The result of the reload. */ - public static CloseableResult reloadPlugin(String pluginName) { + @Override + public CloseableResult reloadPlugin(String pluginName) { Plugin plugin = Bukkit.getPluginManager().getPlugin(pluginName); if (plugin == null) return new CloseableResult(Result.NOT_EXISTS); return reloadPlugin(plugin); @@ -167,7 +188,8 @@ public class PluginManager { * @param plugin The plugin to reload. * @return The result of the reload. */ - public static CloseableResult reloadPlugin(Plugin plugin) { + @Override + public CloseableResult reloadPlugin(Plugin plugin) { Result disableResult = disablePlugin(plugin); if (disableResult != Result.SUCCESS && disableResult != Result.ALREADY_DISABLED) { return new CloseableResult(disableResult); @@ -293,8 +315,8 @@ public class PluginManager { * @param pluginName The plugin name. * @return The file, or null if invalid or not found. */ - public static File getPluginFile(String pluginName) { - for (File file : ServerUtils.getInstance().getPlugin().getPluginProvider().getPluginJars()) { + public File getPluginFile(String pluginName) { + for (File file : getPluginJars()) { PluginDescriptionFile descriptionFile; try { descriptionFile = getPluginDescription(file); @@ -306,4 +328,28 @@ public class PluginManager { } return null; } + + @Override + public File getPluginsFolder() { + return plugin.getDataFolder().getParentFile(); + } + + @Override + public List getPlugins() { + return Arrays.asList(Bukkit.getPluginManager().getPlugins()); + } + + @Override + public String getPluginName(Plugin plugin) { + return plugin.getName(); + } + + @Override + public File getPluginFile(Plugin plugin) { + try { + return RJavaPlugin.getFile(plugin); + } catch (ReflectiveOperationException ex) { + throw new RuntimeException("Error retrieving current plugin file", ex); + } + } } diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitTaskManager.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitTaskManager.java new file mode 100644 index 0000000..f6a3513 --- /dev/null +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitTaskManager.java @@ -0,0 +1,13 @@ +package net.frankheijden.serverutils.bukkit.managers; + +import net.frankheijden.serverutils.bukkit.ServerUtils; +import net.frankheijden.serverutils.common.managers.AbstractTaskManager; +import org.bukkit.Bukkit; + +public class BukkitTaskManager extends AbstractTaskManager { + + @Override + public void runTaskAsynchronously(Runnable runnable) { + Bukkit.getScheduler().runTaskAsynchronously(ServerUtils.getInstance(), runnable); + } +} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitVersionManager.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitVersionManager.java new file mode 100644 index 0000000..9a8a42a --- /dev/null +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/BukkitVersionManager.java @@ -0,0 +1,15 @@ +package net.frankheijden.serverutils.bukkit.managers; + +import net.frankheijden.serverutils.bukkit.ServerUtils; +import net.frankheijden.serverutils.common.managers.AbstractVersionManager; + +public class BukkitVersionManager extends AbstractVersionManager { + + /** + * Creates a new VersionManager instance. + * Used for automatic updating. + */ + public BukkitVersionManager(ServerUtils plugin) { + super(plugin.getDescription().getVersion()); + } +} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/VersionManager.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/VersionManager.java deleted file mode 100644 index 8f09409..0000000 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/managers/VersionManager.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.frankheijden.serverutils.bukkit.managers; - -import net.frankheijden.serverutils.bukkit.ServerUtils; - -public class VersionManager { - - private static VersionManager instance; - private final ServerUtils plugin = ServerUtils.getInstance(); - private final String currentVersion; - private String downloadedVersion; - - /** - * Creates a new VersionManager instance. - * Used for automatic updating. - */ - public VersionManager() { - instance = this; - this.currentVersion = plugin.getDescription().getVersion(); - this.downloadedVersion = currentVersion; - } - - public static VersionManager getInstance() { - return instance; - } - - public String getCurrentVersion() { - return currentVersion; - } - - public String getDownloadedVersion() { - return downloadedVersion; - } - - public boolean hasDownloaded() { - return !downloadedVersion.equals(currentVersion); - } - - public boolean isDownloadedVersion(String version) { - return downloadedVersion.equals(version); - } - - public void setDownloadedVersion(String downloadedVersion) { - this.downloadedVersion = downloadedVersion; - } -} diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/reflection/RJavaPlugin.java b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/reflection/RJavaPlugin.java index 903def4..926edf2 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/reflection/RJavaPlugin.java +++ b/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/reflection/RJavaPlugin.java @@ -5,6 +5,7 @@ import static net.frankheijden.serverutils.common.reflection.ReflectionUtils.get import static net.frankheijden.serverutils.common.reflection.ReflectionUtils.invoke; import static net.frankheijden.serverutils.common.reflection.VersionParam.ALL_VERSIONS; +import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; @@ -20,7 +21,8 @@ public class RJavaPlugin { try { javaPluginClass = JavaPlugin.class; methods = getAllMethods(javaPluginClass, - methodOf("getClassLoader", ALL_VERSIONS)); + methodOf("getClassLoader", ALL_VERSIONS), + methodOf("getFile", ALL_VERSIONS)); } catch (Exception ex) { ex.printStackTrace(); } @@ -29,4 +31,8 @@ public class RJavaPlugin { public static ClassLoader getClassLoader(Object instance) throws InvocationTargetException, IllegalAccessException { return (ClassLoader) invoke(methods, instance, "getClassLoader"); } + + public static File getFile(Object instance) throws ReflectiveOperationException { + return (File) invoke(methods, instance, "getFile"); + } } diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/ServerUtils.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/ServerUtils.java index bdac547..a5ae2b5 100644 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/ServerUtils.java +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/ServerUtils.java @@ -7,10 +7,11 @@ import net.frankheijden.serverutils.bungee.commands.CommandPlugins; import net.frankheijden.serverutils.bungee.commands.CommandServerUtils; import net.frankheijden.serverutils.bungee.entities.BungeePlugin; import net.frankheijden.serverutils.bungee.entities.BungeeReflection; +import net.frankheijden.serverutils.bungee.listeners.BungeeListener; +import net.frankheijden.serverutils.bungee.managers.BungeePluginManager; import net.frankheijden.serverutils.common.ServerUtilsApp; import net.frankheijden.serverutils.common.config.Config; import net.frankheijden.serverutils.common.config.Messenger; -import net.frankheijden.serverutils.common.providers.PluginProvider; import net.md_5.bungee.api.plugin.Plugin; import org.bstats.bungeecord.Metrics; @@ -29,7 +30,7 @@ public class ServerUtils extends Plugin { instance = this; this.plugin = new BungeePlugin(this); - ServerUtilsApp.init(plugin); + ServerUtilsApp.init(this, plugin); new Metrics(this, ServerUtilsApp.BSTATS_METRICS_ID); new BungeeReflection(); @@ -38,12 +39,15 @@ public class ServerUtils extends Plugin { commandManager.registerCommand(new CommandPlugins()); commandManager.registerCommand(new CommandServerUtils()); - PluginProvider provider = plugin.getPluginProvider(); + BungeePluginManager manager = plugin.getPluginManager(); CommandCompletions commandCompletions = commandManager.getCommandCompletions(); - commandCompletions.registerAsyncCompletion("plugins", context -> provider.getPluginNames()); - commandCompletions.registerAsyncCompletion("pluginJars", context -> provider.getPluginFileNames()); + commandCompletions.registerAsyncCompletion("plugins", context -> manager.getPluginNames()); + commandCompletions.registerAsyncCompletion("pluginJars", context -> manager.getPluginFileNames()); reload(); + getProxy().getPluginManager().registerListener(this, new BungeeListener()); + + ServerUtilsApp.checkForUpdates(); } public static ServerUtils getInstance() { diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandPlugins.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandPlugins.java index 6d4b06d..71eac85 100644 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandPlugins.java +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandPlugins.java @@ -6,9 +6,7 @@ import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Default; import co.aikar.commands.annotation.Description; -import co.aikar.commands.annotation.Subcommand; -import net.frankheijden.serverutils.bungee.ServerUtils; -import net.frankheijden.serverutils.bungee.entities.BungeePluginProvider; +import net.frankheijden.serverutils.bungee.managers.BungeePluginManager; import net.frankheijden.serverutils.bungee.utils.BungeeUtils; import net.frankheijden.serverutils.common.commands.Plugins; import net.frankheijden.serverutils.common.config.Messenger; @@ -17,8 +15,7 @@ import net.md_5.bungee.api.CommandSender; @CommandAlias("bpl|bplugins|bungeepl") public class CommandPlugins extends BaseCommand { - private static final ServerUtils plugin = ServerUtils.getInstance(); - private static final BungeePluginProvider provider = (BungeePluginProvider) plugin.getPlugin().getPluginProvider(); + private static final BungeePluginManager manager = BungeePluginManager.get(); /** * Sends the plugin list to the sender. @@ -33,7 +30,7 @@ public class CommandPlugins extends BaseCommand { public void onPlugins(CommandSender sender, String... args) { boolean version = contains(args, "-v"); boolean modules = contains(args, "-m"); - Plugins.sendPlugins(BungeeUtils.wrap(sender), provider.getPluginsSorted(modules), pl -> { + Plugins.sendPlugins(BungeeUtils.wrap(sender), manager.getPluginsSorted(modules), pl -> { String ver = version ? Messenger.getMessage("serverutils.plugins.version", "%version%", pl.getDescription().getVersion()) : ""; return Messenger.getMessage("serverutils.plugins.format", diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandServerUtils.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandServerUtils.java index 1f7d4c6..3322a76 100644 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandServerUtils.java +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/commands/CommandServerUtils.java @@ -1,17 +1,15 @@ package net.frankheijden.serverutils.bungee.commands; import co.aikar.commands.BaseCommand; -import co.aikar.commands.RegisteredCommand; import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandCompletion; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Default; import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Subcommand; -import com.google.common.collect.SetMultimap; import net.frankheijden.serverutils.bungee.ServerUtils; import net.frankheijden.serverutils.bungee.entities.BungeeLoadResult; -import net.frankheijden.serverutils.bungee.managers.PluginManager; +import net.frankheijden.serverutils.bungee.managers.BungeePluginManager; import net.frankheijden.serverutils.bungee.reflection.RPluginManager; import net.frankheijden.serverutils.bungee.utils.BungeeUtils; import net.frankheijden.serverutils.common.config.Messenger; @@ -101,14 +99,14 @@ public class CommandServerUtils extends BaseCommand { public void onLoadPlugin(CommandSender commandSender, String jarFile) { ServerCommandSender sender = BungeeUtils.wrap(commandSender); - BungeeLoadResult loadResult = PluginManager.loadPlugin(jarFile); + BungeeLoadResult loadResult = BungeePluginManager.get().loadPlugin(jarFile); if (!loadResult.isSuccess()) { loadResult.getResult().sendTo(sender, "load", jarFile); return; } Plugin plugin = loadResult.get(); - Result result = PluginManager.enablePlugin(plugin); + Result result = BungeePluginManager.get().enablePlugin(plugin); result.sendTo(sender, "load", plugin.getDescription().getName()); } @@ -122,7 +120,7 @@ public class CommandServerUtils extends BaseCommand { @CommandPermission("serverutils.unloadplugin") @Description("Disables and unloads the specified plugin.") public void onUnloadPlugin(CommandSender commandSender, String pluginName) { - CloseableResult result = PluginManager.unloadPlugin(pluginName); + CloseableResult result = BungeePluginManager.get().unloadPlugin(pluginName); result.getResult().sendTo(BungeeUtils.wrap(commandSender), "unload", pluginName); result.tryClose(); } @@ -137,7 +135,7 @@ public class CommandServerUtils extends BaseCommand { @CommandPermission("serverutils.reloadplugin") @Description("Reloads a specified plugin.") public void onReloadPlugin(CommandSender sender, String pluginName) { - CloseableResult result = PluginManager.reloadPlugin(pluginName); + CloseableResult result = BungeePluginManager.get().reloadPlugin(pluginName); result.getResult().sendTo(BungeeUtils.wrap(sender), "reload", pluginName); result.tryClose(); } diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java new file mode 100644 index 0000000..7445282 --- /dev/null +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeChatProvider.java @@ -0,0 +1,27 @@ +package net.frankheijden.serverutils.bungee.entities; + +import net.frankheijden.serverutils.bungee.utils.BungeeUtils; +import net.frankheijden.serverutils.common.entities.ServerCommandSender; +import net.frankheijden.serverutils.common.providers.ChatProvider; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; + +public class BungeeChatProvider extends ChatProvider { + + @Override + public ServerCommandSender getConsoleSender() { + return BungeeUtils.wrap(ProxyServer.getInstance().getConsole()); + } + + @Override + public String color(String str) { + return ChatColor.translateAlternateColorCodes('&', str); + } + + @Override + public void broadcast(String permission, String message) { + ProxyServer.getInstance().getPlayers().stream() + .filter(p -> p.hasPermission(permission)) + .forEach(p -> p.sendMessage(message)); + } +} diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeColorProvider.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeColorProvider.java deleted file mode 100644 index e54ca40..0000000 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeColorProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.frankheijden.serverutils.bungee.entities; - -import net.frankheijden.serverutils.common.providers.ColorProvider; -import net.md_5.bungee.api.ChatColor; - -public class BungeeColorProvider implements ColorProvider { - - @Override - public String apply(String str) { - return ChatColor.translateAlternateColorCodes('&', str); - } -} diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeCommandSender.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeCommandSender.java index 09709e6..6c09ef4 100644 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeCommandSender.java +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeeCommandSender.java @@ -15,4 +15,9 @@ public class BungeeCommandSender implements ServerCommandSender { public void sendMessage(String message) { sender.sendMessage(message); } + + @Override + public boolean hasPermission(String permission) { + return sender.hasPermission(permission); + } } diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePlugin.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePlugin.java index da12f09..c4fcd21 100644 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePlugin.java +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePlugin.java @@ -4,18 +4,19 @@ import java.io.File; import java.util.logging.Logger; import net.frankheijden.serverutils.bungee.ServerUtils; -import net.frankheijden.serverutils.common.providers.ColorProvider; -import net.frankheijden.serverutils.common.providers.PluginProvider; -import net.frankheijden.serverutils.common.providers.ResourceProvider; +import net.frankheijden.serverutils.bungee.managers.BungeePluginManager; +import net.frankheijden.serverutils.bungee.managers.BungeeTaskManager; +import net.frankheijden.serverutils.bungee.managers.BungeeVersionManager; import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin; -import net.md_5.bungee.api.plugin.Plugin; public class BungeePlugin extends ServerUtilsPlugin { private final ServerUtils plugin; - private final PluginProvider pluginProvider; - private final ResourceProvider resourceProvider; - private final ColorProvider colorProvider; + private final BungeePluginManager pluginManager; + private final BungeeTaskManager taskManager; + private final BungeeResourceProvider resourceProvider; + private final BungeeChatProvider chatProvider; + private final BungeeVersionManager versionManager; /** * Creates a new BungeePlugin instance of ServerUtils. @@ -23,25 +24,37 @@ public class BungeePlugin extends ServerUtilsPlugin { */ public BungeePlugin(ServerUtils plugin) { this.plugin = plugin; - this.pluginProvider = new BungeePluginProvider(plugin); + this.pluginManager = new BungeePluginManager(); + this.taskManager = new BungeeTaskManager(); this.resourceProvider = new BungeeResourceProvider(plugin); - this.colorProvider = new BungeeColorProvider(); + this.chatProvider = new BungeeChatProvider(); + this.versionManager = new BungeeVersionManager(plugin); } @Override @SuppressWarnings("unchecked") - public PluginProvider getPluginProvider() { - return pluginProvider; + public BungeePluginManager getPluginManager() { + return pluginManager; } @Override - public ResourceProvider getResourceProvider() { + public BungeeTaskManager getTaskManager() { + return taskManager; + } + + @Override + public BungeeResourceProvider getResourceProvider() { return resourceProvider; } @Override - public ColorProvider getColorProvider() { - return colorProvider; + public BungeeChatProvider getChatProvider() { + return chatProvider; + } + + @Override + public BungeeVersionManager getVersionManager() { + return versionManager; } @Override diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePluginProvider.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePluginProvider.java deleted file mode 100644 index e41fd34..0000000 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/entities/BungeePluginProvider.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.frankheijden.serverutils.bungee.entities; - -import net.frankheijden.serverutils.bungee.ServerUtils; -import net.frankheijden.serverutils.bungee.managers.PluginManager; -import net.frankheijden.serverutils.common.providers.PluginProvider; -import net.md_5.bungee.api.plugin.Plugin; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - -public class BungeePluginProvider extends PluginProvider { - - private final ServerUtils plugin; - - public BungeePluginProvider(ServerUtils plugin) { - this.plugin = plugin; - } - - @Override - public File getPluginsFolder() { - return plugin.getProxy().getPluginsFolder(); - } - - @Override - public List getPlugins() { - return getPlugins(false); - } - - public List getPlugins(boolean modules) { - Collection plugins = plugin.getProxy().getPluginManager().getPlugins(); - if (modules) return new ArrayList<>(plugins); - return plugins.stream() - .filter(PluginManager::isPlugin) - .collect(Collectors.toList()); - } - - @Override - public String getPluginName(Plugin plugin) { - return plugin.getDataFolder().getName(); - } - - public List getPluginsSorted(boolean modules) { - List plugins = getPlugins(modules); - plugins.sort(Comparator.comparing(this::getPluginName)); - return plugins; - } -} diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/listeners/BungeeListener.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/listeners/BungeeListener.java new file mode 100644 index 0000000..a6238bf --- /dev/null +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/listeners/BungeeListener.java @@ -0,0 +1,16 @@ +package net.frankheijden.serverutils.bungee.listeners; + +import net.frankheijden.serverutils.bungee.utils.BungeeUtils; +import net.frankheijden.serverutils.common.listeners.ServerListener; +import net.md_5.bungee.api.event.ServerConnectEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +public class BungeeListener implements Listener { + + @EventHandler + public void onServerConnect(ServerConnectEvent event) { + if (event.getReason() != ServerConnectEvent.Reason.JOIN_PROXY) return; + ServerListener.handleUpdate(BungeeUtils.wrap(event.getPlayer())); + } +} diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/PluginManager.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeePluginManager.java similarity index 75% rename from Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/PluginManager.java rename to Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeePluginManager.java index 0d9dc6e..6dd9cc6 100644 --- a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/PluginManager.java +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeePluginManager.java @@ -3,9 +3,9 @@ package net.frankheijden.serverutils.bungee.managers; import com.google.common.base.Preconditions; import net.frankheijden.serverutils.bungee.ServerUtils; import net.frankheijden.serverutils.bungee.entities.BungeeLoadResult; -import net.frankheijden.serverutils.bungee.entities.BungeePluginProvider; import net.frankheijden.serverutils.bungee.reflection.RPluginClassLoader; import net.frankheijden.serverutils.bungee.reflection.RPluginManager; +import net.frankheijden.serverutils.common.managers.AbstractPluginManager; import net.frankheijden.serverutils.common.entities.CloseableResult; import net.frankheijden.serverutils.common.entities.Result; import net.md_5.bungee.api.ProxyServer; @@ -18,15 +18,29 @@ import java.io.File; import java.io.InputStream; import java.net.URL; import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Level; +import java.util.stream.Collectors; -public class PluginManager { +public class BungeePluginManager extends AbstractPluginManager { private static final ProxyServer proxy = ProxyServer.getInstance(); private static final ServerUtils plugin = ServerUtils.getInstance(); - private static final BungeePluginProvider provider = (BungeePluginProvider) plugin.getPlugin().getPluginProvider(); + + private static BungeePluginManager instance; + + public BungeePluginManager() { + instance = this; + } + + public static BungeePluginManager get() { + return instance; + } /** * Checks whether a loaded plugin is a module. @@ -46,13 +60,15 @@ public class PluginManager { return !isModule(plugin); } - public static BungeeLoadResult loadPlugin(String fileName) { - File file = getPluginFileExact(fileName); + @Override + public BungeeLoadResult loadPlugin(String pluginFile) { + File file = getPluginFileExact(pluginFile); if (!file.exists()) return new BungeeLoadResult(Result.NOT_EXISTS); return loadPlugin(file); } - public static BungeeLoadResult loadPlugin(File file) { + @Override + public BungeeLoadResult loadPlugin(File file) { PluginDescription desc; try { desc = getPluginDescription(file); @@ -80,7 +96,8 @@ public class PluginManager { } } - public static Result enablePlugin(Plugin plugin) { + @Override + public Result enablePlugin(Plugin plugin) { PluginDescription desc = plugin.getDescription(); String name = desc.getName(); try { @@ -95,13 +112,15 @@ public class PluginManager { } } - public static CloseableResult reloadPlugin(String pluginName) { + @Override + public CloseableResult reloadPlugin(String pluginName) { Plugin plugin = proxy.getPluginManager().getPlugin(pluginName); if (plugin == null) return new CloseableResult(Result.NOT_ENABLED); return reloadPlugin(plugin); } - public static CloseableResult reloadPlugin(Plugin plugin) { + @Override + public CloseableResult reloadPlugin(Plugin plugin) { CloseableResult result = unloadPlugin(plugin); if (result.getResult() != Result.SUCCESS) return result; @@ -114,13 +133,15 @@ public class PluginManager { return result.set(enablePlugin(loadResult.get())); } - public static CloseableResult unloadPlugin(String pluginName) { + @Override + public CloseableResult unloadPlugin(String pluginName) { Plugin plugin = proxy.getPluginManager().getPlugin(pluginName); if (plugin == null) return new CloseableResult(Result.NOT_ENABLED); return unloadPlugin(plugin); } - public static CloseableResult unloadPlugin(Plugin plugin) { + @Override + public CloseableResult unloadPlugin(Plugin plugin) { plugin.onDisable(); proxy.getPluginManager().unregisterCommands(plugin); proxy.getPluginManager().unregisterListeners(plugin); @@ -137,8 +158,8 @@ public class PluginManager { return new File(proxy.getPluginsFolder(), fileName); } - public static File getPluginFile(String pluginName) { - for (File file : provider.getPluginJars()) { + public File getPluginFile(String pluginName) { + for (File file : getPluginJars()) { PluginDescription desc; try { desc = getPluginDescription(file); @@ -179,4 +200,38 @@ public class PluginManager { if (loader instanceof Closeable) return (Closeable) loader; return null; } + + @Override + public File getPluginsFolder() { + return plugin.getProxy().getPluginsFolder(); + } + + @Override + public List getPlugins() { + return getPlugins(false); + } + + public List getPlugins(boolean modules) { + Collection plugins = plugin.getProxy().getPluginManager().getPlugins(); + if (modules) return new ArrayList<>(plugins); + return plugins.stream() + .filter(BungeePluginManager::isPlugin) + .collect(Collectors.toList()); + } + + @Override + public String getPluginName(Plugin plugin) { + return plugin.getDataFolder().getName(); + } + + @Override + public File getPluginFile(Plugin plugin) { + return plugin.getFile(); + } + + public List getPluginsSorted(boolean modules) { + List plugins = getPlugins(modules); + plugins.sort(Comparator.comparing(this::getPluginName)); + return plugins; + } } diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeTaskManager.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeTaskManager.java new file mode 100644 index 0000000..f21a09b --- /dev/null +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeTaskManager.java @@ -0,0 +1,13 @@ +package net.frankheijden.serverutils.bungee.managers; + +import net.frankheijden.serverutils.bungee.ServerUtils; +import net.frankheijden.serverutils.common.managers.AbstractTaskManager; +import net.md_5.bungee.api.ProxyServer; + +public class BungeeTaskManager extends AbstractTaskManager { + + @Override + public void runTaskAsynchronously(Runnable runnable) { + ProxyServer.getInstance().getScheduler().runAsync(ServerUtils.getInstance(), runnable); + } +} diff --git a/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeVersionManager.java b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeVersionManager.java new file mode 100644 index 0000000..6f6c1f4 --- /dev/null +++ b/Bungee/src/main/java/net/frankheijden/serverutils/bungee/managers/BungeeVersionManager.java @@ -0,0 +1,15 @@ +package net.frankheijden.serverutils.bungee.managers; + +import net.frankheijden.serverutils.bungee.ServerUtils; +import net.frankheijden.serverutils.common.managers.AbstractVersionManager; + +public class BungeeVersionManager extends AbstractVersionManager { + + /** + * Creates a new VersionManager instance. + * Used for automatic updating. + */ + public BungeeVersionManager(ServerUtils plugin) { + super(plugin.getDescription().getVersion()); + } +} diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/ServerUtilsApp.java b/Common/src/main/java/net/frankheijden/serverutils/common/ServerUtilsApp.java index f174f04..230bf7a 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/ServerUtilsApp.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/ServerUtilsApp.java @@ -1,17 +1,41 @@ package net.frankheijden.serverutils.common; +import net.frankheijden.serverutils.common.config.Config; import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin; +import net.frankheijden.serverutils.common.tasks.UpdateCheckerTask; -public class ServerUtilsApp { +public class ServerUtilsApp { public static final int BSTATS_METRICS_ID = 7790; - private static ServerUtilsPlugin plugin; - public static void init(ServerUtilsPlugin plugin) { - ServerUtilsApp.plugin = plugin; + private final T platformPlugin; + private final ServerUtilsPlugin plugin; + + @SuppressWarnings("rawtypes") + private static ServerUtilsApp instance; + + private ServerUtilsApp(T platformPlugin, ServerUtilsPlugin plugin) { + this.platformPlugin = platformPlugin; + this.plugin = plugin; + instance = this; + } + + public static void init(T obj, ServerUtilsPlugin plugin) { + new ServerUtilsApp<>(obj, plugin); + } + + public static void checkForUpdates() { + if (Config.getInstance().getConfig().getBoolean("settings.check-updates")) { + UpdateCheckerTask.start(getPlugin().getChatProvider().getConsoleSender(), true); + } } public static ServerUtilsPlugin getPlugin() { - return plugin; + return instance.plugin; + } + + @SuppressWarnings("unchecked") + public static T getPlatformPlugin() { + return (T) instance.platformPlugin; } } diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/config/Messenger.java b/Common/src/main/java/net/frankheijden/serverutils/common/config/Messenger.java index f6df6e0..7a2f238 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/config/Messenger.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/config/Messenger.java @@ -30,7 +30,7 @@ public class Messenger extends YamlResource { if (message != null) { return StringUtils.apply(message, replacements); } else { - instance.plugin.getLogger().severe("Missing locale in messages.yml at path '" + path + "'!"); + Messenger.plugin.getLogger().severe("Missing locale in messages.yml at path '" + path + "'!"); } return null; } @@ -44,7 +44,7 @@ public class Messenger extends YamlResource { public static void sendRawMessage(ServerCommandSender sender, String msg, String... replacements) { String message = StringUtils.apply(msg, replacements); if (message != null) { - sender.sendMessage(instance.plugin.getColorProvider().apply(message)); + sender.sendMessage(Messenger.plugin.getChatProvider().color(message)); } } @@ -57,11 +57,11 @@ public class Messenger extends YamlResource { public static void sendMessage(ServerCommandSender sender, String path, String... replacements) { String message = getMessage(path, replacements); if (message != null) { - sender.sendMessage(instance.plugin.getColorProvider().apply(message)); + sender.sendMessage(Messenger.plugin.getChatProvider().color(message)); } } public static String color(String str) { - return instance.plugin.getColorProvider().apply(str); + return Messenger.plugin.getChatProvider().color(str); } } diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerCommandSender.java b/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerCommandSender.java index 40f6616..83a62fe 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerCommandSender.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerCommandSender.java @@ -3,4 +3,6 @@ package net.frankheijden.serverutils.common.entities; public interface ServerCommandSender { void sendMessage(String message); + + boolean hasPermission(String permission); } diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerUtilsPlugin.java b/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerUtilsPlugin.java index d924c1c..731f456 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerUtilsPlugin.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/entities/ServerUtilsPlugin.java @@ -2,23 +2,26 @@ package net.frankheijden.serverutils.common.entities; import java.io.File; import java.io.IOException; -import java.util.Arrays; -import java.util.List; import java.util.logging.Logger; -import java.util.stream.Collectors; -import net.frankheijden.serverutils.common.providers.ColorProvider; -import net.frankheijden.serverutils.common.providers.PluginProvider; +import net.frankheijden.serverutils.common.managers.AbstractPluginManager; +import net.frankheijden.serverutils.common.managers.AbstractTaskManager; +import net.frankheijden.serverutils.common.managers.AbstractVersionManager; +import net.frankheijden.serverutils.common.providers.ChatProvider; import net.frankheijden.serverutils.common.providers.ResourceProvider; import net.frankheijden.serverutils.common.utils.FileUtils; public abstract class ServerUtilsPlugin { - public abstract PluginProvider getPluginProvider(); + public abstract AbstractPluginManager getPluginManager(); + + public abstract AbstractTaskManager getTaskManager(); public abstract ResourceProvider getResourceProvider(); - public abstract ColorProvider getColorProvider(); + public abstract ChatProvider getChatProvider(); + + public abstract AbstractVersionManager getVersionManager(); public abstract Logger getLogger(); diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/listeners/ServerListener.java b/Common/src/main/java/net/frankheijden/serverutils/common/listeners/ServerListener.java new file mode 100644 index 0000000..d9b5af5 --- /dev/null +++ b/Common/src/main/java/net/frankheijden/serverutils/common/listeners/ServerListener.java @@ -0,0 +1,19 @@ +package net.frankheijden.serverutils.common.listeners; + +import net.frankheijden.serverutils.common.config.Config; +import net.frankheijden.serverutils.common.config.YamlConfig; +import net.frankheijden.serverutils.common.entities.ServerCommandSender; +import net.frankheijden.serverutils.common.tasks.UpdateCheckerTask; + +public class ServerListener { + + private static final YamlConfig config = Config.getInstance().getConfig(); + + public static void handleUpdate(ServerCommandSender sender) { + if (!config.getBoolean("settings.check-updates-login")) return; + + if (sender.hasPermission("serverutils.notification.update")) { + UpdateCheckerTask.start(sender); + } + } +} diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractPluginManager.java b/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractPluginManager.java new file mode 100644 index 0000000..0d34ff6 --- /dev/null +++ b/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractPluginManager.java @@ -0,0 +1,25 @@ +package net.frankheijden.serverutils.common.managers; + +import net.frankheijden.serverutils.common.entities.CloseableResult; +import net.frankheijden.serverutils.common.entities.LoadResult; +import net.frankheijden.serverutils.common.entities.Result; +import net.frankheijden.serverutils.common.providers.PluginProvider; + +import java.io.File; + +public abstract class AbstractPluginManager extends PluginProvider { + + public abstract LoadResult loadPlugin(String pluginFile); + + public abstract LoadResult loadPlugin(File file); + + public abstract Result enablePlugin(T plugin); + + public abstract CloseableResult reloadPlugin(String pluginName); + + public abstract CloseableResult reloadPlugin(T plugin); + + public abstract CloseableResult unloadPlugin(String pluginName); + + public abstract CloseableResult unloadPlugin(T plugin); +} diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractTaskManager.java b/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractTaskManager.java new file mode 100644 index 0000000..7844677 --- /dev/null +++ b/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractTaskManager.java @@ -0,0 +1,6 @@ +package net.frankheijden.serverutils.common.managers; + +public abstract class AbstractTaskManager { + + public abstract void runTaskAsynchronously(Runnable runnable); +} diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractVersionManager.java b/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractVersionManager.java new file mode 100644 index 0000000..a19831c --- /dev/null +++ b/Common/src/main/java/net/frankheijden/serverutils/common/managers/AbstractVersionManager.java @@ -0,0 +1,37 @@ +package net.frankheijden.serverutils.common.managers; + +public abstract class AbstractVersionManager { + + private final String currentVersion; + private String downloadedVersion; + + /** + * Creates a new VersionManager instance. + * Used for automatic updating. + * @param currentVersion The current version of the plugin. + */ + public AbstractVersionManager(String currentVersion) { + this.currentVersion = currentVersion; + this.downloadedVersion = currentVersion; + } + + public String getCurrentVersion() { + return currentVersion; + } + + public String getDownloadedVersion() { + return downloadedVersion; + } + + public boolean hasDownloaded() { + return !downloadedVersion.equals(currentVersion); + } + + public boolean isDownloaded(String version) { + return downloadedVersion.equals(version); + } + + public void setDownloaded(String version) { + this.downloadedVersion = version; + } +} diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/providers/ChatProvider.java b/Common/src/main/java/net/frankheijden/serverutils/common/providers/ChatProvider.java new file mode 100644 index 0000000..700a97b --- /dev/null +++ b/Common/src/main/java/net/frankheijden/serverutils/common/providers/ChatProvider.java @@ -0,0 +1,12 @@ +package net.frankheijden.serverutils.common.providers; + +import net.frankheijden.serverutils.common.entities.ServerCommandSender; + +public abstract class ChatProvider { + + public abstract ServerCommandSender getConsoleSender(); + + public abstract String color(String str); + + public abstract void broadcast(String permission, String message); +} diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/providers/ColorProvider.java b/Common/src/main/java/net/frankheijden/serverutils/common/providers/ColorProvider.java deleted file mode 100644 index 664023a..0000000 --- a/Common/src/main/java/net/frankheijden/serverutils/common/providers/ColorProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package net.frankheijden.serverutils.common.providers; - -public interface ColorProvider { - - String apply(String str); -} diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/providers/PluginProvider.java b/Common/src/main/java/net/frankheijden/serverutils/common/providers/PluginProvider.java index 5165e3f..2ffad03 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/providers/PluginProvider.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/providers/PluginProvider.java @@ -14,6 +14,8 @@ public abstract class PluginProvider { public abstract String getPluginName(T plugin); + public abstract File getPluginFile(T plugin); + public List getPluginsSorted() { List plugins = getPlugins(); plugins.sort(Comparator.comparing(this::getPluginName)); diff --git a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/tasks/UpdateCheckerTask.java b/Common/src/main/java/net/frankheijden/serverutils/common/tasks/UpdateCheckerTask.java similarity index 80% rename from Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/tasks/UpdateCheckerTask.java rename to Common/src/main/java/net/frankheijden/serverutils/common/tasks/UpdateCheckerTask.java index b460e55..7428d4e 100644 --- a/Bukkit/src/main/java/net/frankheijden/serverutils/bukkit/tasks/UpdateCheckerTask.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/tasks/UpdateCheckerTask.java @@ -1,21 +1,19 @@ -package net.frankheijden.serverutils.bukkit.tasks; +package net.frankheijden.serverutils.common.tasks; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.lang.reflect.Method; import java.net.ConnectException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.util.logging.Level; -import net.frankheijden.serverutils.bukkit.ServerUtils; -import net.frankheijden.serverutils.bukkit.managers.PluginManager; -import net.frankheijden.serverutils.bukkit.managers.VersionManager; +import net.frankheijden.serverutils.common.ServerUtilsApp; +import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin; +import net.frankheijden.serverutils.common.managers.AbstractVersionManager; import net.frankheijden.serverutils.common.config.Config; import net.frankheijden.serverutils.common.config.Messenger; import net.frankheijden.serverutils.common.config.YamlConfig; @@ -23,16 +21,14 @@ import net.frankheijden.serverutils.common.entities.CloseableResult; import net.frankheijden.serverutils.common.entities.ServerCommandSender; import net.frankheijden.serverutils.common.utils.FileUtils; import net.frankheijden.serverutils.common.utils.VersionUtils; -import org.bukkit.Bukkit; -import org.bukkit.plugin.java.JavaPlugin; public class UpdateCheckerTask implements Runnable { - private static final ServerUtils plugin = ServerUtils.getInstance(); + private static final ServerUtilsPlugin plugin = ServerUtilsApp.getPlugin(); private static final YamlConfig config = Config.getInstance().getConfig(); - private static final VersionManager versionManager = VersionManager.getInstance(); + + private final AbstractVersionManager versionManager; private final ServerCommandSender sender; - private final String currentVersion; private final boolean startup; private static final String GITHUB_LINK = "https://api.github.com/repos/FrankHeijden/ServerUtils/releases/latest"; @@ -50,8 +46,8 @@ public class UpdateCheckerTask implements Runnable { private static final String UP_TO_DATE = "We are up-to-date!"; private UpdateCheckerTask(ServerCommandSender sender, boolean startup) { + this.versionManager = plugin.getVersionManager(); this.sender = sender; - this.currentVersion = plugin.getDescription().getVersion(); this.startup = startup; } @@ -61,7 +57,7 @@ public class UpdateCheckerTask implements Runnable { public static void start(ServerCommandSender sender, boolean startup) { UpdateCheckerTask task = new UpdateCheckerTask(sender, startup); - Bukkit.getScheduler().runTaskAsynchronously(plugin, task); + plugin.getTaskManager().runTaskAsynchronously(task); } public boolean isStartupCheck() { @@ -102,7 +98,9 @@ public class UpdateCheckerTask implements Runnable { String body = jsonObject.getAsJsonPrimitive("body").getAsString(); String downloadUrl = getDownloadUrl(jsonObject); - if (VersionUtils.isNewVersion(currentVersion, githubVersion)) { + String downloaded = versionManager.getDownloadedVersion(); + String current = versionManager.getCurrentVersion(); + if (VersionUtils.isNewVersion(downloaded, githubVersion)) { if (isStartupCheck()) { plugin.getLogger().info(String.format(UPDATE_AVAILABLE, githubVersion)); plugin.getLogger().info("Release info: " + body); @@ -112,7 +110,7 @@ public class UpdateCheckerTask implements Runnable { plugin.getLogger().info(String.format(DOWNLOAD_START, downloadUrl)); } else { Messenger.sendMessage(sender, "serverutils.update.downloading", - "%old%", currentVersion, + "%old%", current, "%new%", githubVersion, "%info%", body); } @@ -120,7 +118,7 @@ public class UpdateCheckerTask implements Runnable { tryReloadPlugin(); } else if (!isStartupCheck()) { Messenger.sendMessage(sender, "serverutils.update.available", - "%old%", currentVersion, + "%old%", current, "%new%", githubVersion, "%info%", body); } @@ -150,7 +148,7 @@ public class UpdateCheckerTask implements Runnable { } private void downloadPlugin(String githubVersion, String downloadLink) { - if (versionManager.isDownloadedVersion(githubVersion)) { + if (versionManager.isDownloaded(githubVersion)) { broadcastDownloadStatus(githubVersion, false); return; } @@ -161,13 +159,13 @@ public class UpdateCheckerTask implements Runnable { } try { - FileUtils.download(downloadLink, getPluginFile()); + FileUtils.download(downloadLink, plugin.getPluginManager().getPluginFile(ServerUtilsApp.getPlatformPlugin())); } catch (IOException ex) { broadcastDownloadStatus(githubVersion, true); throw new RuntimeException(DOWNLOAD_ERROR, ex); } - versionManager.setDownloadedVersion(githubVersion); + versionManager.setDownloaded(githubVersion); } private void tryReloadPlugin() { @@ -175,7 +173,7 @@ public class UpdateCheckerTask implements Runnable { if (isStartupCheck()) { plugin.getLogger().info(String.format(DOWNLOADED_RESTART, downloadedVersion)); - CloseableResult result = PluginManager.reloadPlugin(plugin); + CloseableResult result = plugin.getPluginManager().reloadPlugin(ServerUtilsApp.getPlatformPlugin()); plugin.getLogger().info(String.format(UPGRADE_SUCCESS, downloadedVersion)); result.tryClose(); } else { @@ -185,20 +183,7 @@ public class UpdateCheckerTask implements Runnable { private void broadcastDownloadStatus(String githubVersion, boolean isError) { final String path = "serverutils.update." + (isError ? "failed" : "success"); - Bukkit.getOnlinePlayers().forEach((p) -> { - if (p.hasPermission("serverutils.notification.update")) { - Messenger.sendMessage(sender, path, "%new%", githubVersion); - } - }); - } - - private File getPluginFile() { - try { - Method method = JavaPlugin.class.getDeclaredMethod("getFile"); - method.setAccessible(true); - return (File) method.invoke(plugin); - } catch (ReflectiveOperationException ex) { - throw new RuntimeException("Error retrieving current plugin file", ex); - } + String message = Messenger.getMessage(path,"%new%", githubVersion); + plugin.getChatProvider().broadcast("serverutils.notification.update", message); } } diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/utils/ListBuilder.java b/Common/src/main/java/net/frankheijden/serverutils/common/utils/ListBuilder.java index f21c698..0365a15 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/utils/ListBuilder.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/utils/ListBuilder.java @@ -24,6 +24,7 @@ public class ListBuilder { return new ListBuilder<>(new ArrayList<>(list)); } + @SafeVarargs public static ListBuilder create(T... elements) { return new ListBuilder<>(Arrays.asList(elements)); }