From a07ac3f6e40edec07b51e724dcc7dcd6b1868e61 Mon Sep 17 00:00:00 2001 From: Frank van der Heijden Date: Tue, 5 Oct 2021 18:43:30 +0200 Subject: [PATCH] Feature: unload configured plugins after serverutils enabled --- .../common/entities/ServerUtilsPlugin.java | 29 +++++++++++++++++++ Common/src/main/resources/config.json | 4 +++ 2 files changed, 33 insertions(+) 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 30111c5..e72c993 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 @@ -7,8 +7,11 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; +import java.util.Optional; import java.util.logging.Logger; import net.frankheijden.serverutils.common.ServerUtilsApp; import net.frankheijden.serverutils.common.commands.brigadier.BrigadierHandler; @@ -16,6 +19,7 @@ import net.frankheijden.serverutils.common.config.CommandsResource; import net.frankheijden.serverutils.common.config.ConfigResource; import net.frankheijden.serverutils.common.config.MessageKey; import net.frankheijden.serverutils.common.config.MessagesResource; +import net.frankheijden.serverutils.common.entities.results.CloseablePluginResults; import net.frankheijden.serverutils.common.managers.AbstractPluginManager; import net.frankheijden.serverutils.common.managers.AbstractTaskManager; import net.frankheijden.serverutils.common.managers.UpdateManager; @@ -99,6 +103,27 @@ public abstract class ServerUtilsPlugin, return file; } + private void unloadConfiguredPlugins() { + List pluginIds = configResource.getConfig().getStringList("unload-after-startup.plugins"); + List

plugins = new ArrayList<>(pluginIds.size()); + for (String pluginId : pluginIds) { + Optional

pluginOptional = getPluginManager().getPlugin(pluginId); + if (!pluginOptional.isPresent()) { + getLogger().warning( + "Plugin '" + pluginId + "' defined in config.yml 'unload-after-startup' is not loaded!" + ); + continue; + } + plugins.add(pluginOptional.get()); + } + + if (plugins.isEmpty()) return; + + CloseablePluginResults

unloadResults = getPluginManager().unloadPlugins(plugins); + unloadResults.tryClose(); + unloadResults.sendTo(getChatProvider().getConsoleServerAudience(), MessageKey.UNLOADPLUGIN); + } + protected abstract CommandManager newCommandManager(); protected void handleBrigadier(CloudBrigadierManager brigadierManager) { @@ -121,6 +146,10 @@ public abstract class ServerUtilsPlugin, reload(); enablePlugin(); + getTaskManager().runTaskLater( + this::unloadConfiguredPlugins, + configResource.getConfig().getInt("unload-after-startup.delay-ticks") + ); ServerUtilsApp.tryCheckForUpdates(); ServerUtilsApp.unloadServerUtilsUpdater(); } diff --git a/Common/src/main/resources/config.json b/Common/src/main/resources/config.json index 879f5ad..054edea 100644 --- a/Common/src/main/resources/config.json +++ b/Common/src/main/resources/config.json @@ -7,5 +7,9 @@ "download-updates-login": false, "install-updates-boot": false, "install-updates-login": false + }, + "unload-after-startup": { + "delay-ticks": 20, + "plugins": [] } }