From 462a10363c4f39391b5cffb8f948bc3a727dd930 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Sat, 3 Aug 2024 20:35:22 +0200 Subject: [PATCH] Only print reload info when needed, add additional log message after shutdown Thanks to its name and dependency order, ViaVersion will generally be the last plugin to be disabled and has occasionally been blamed for other plugins stalling server shutdown --- .../viaversion/api/platform/ViaPlatform.java | 9 +++++++++ .../api/platform/ViaServerProxyPlatform.java | 5 +++++ .../com/viaversion/viaversion/ViaVersionPlugin.java | 5 +++++ .../viaversion/bukkit/platform/PaperViaInjector.java | 10 ++++++++++ .../java/com/viaversion/viaversion/ViaManagerImpl.java | 8 ++++++-- .../viaversion/common/dummy/TestPlatform.java | 5 +++++ 6 files changed, 40 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/com/viaversion/viaversion/api/platform/ViaPlatform.java b/api/src/main/java/com/viaversion/viaversion/api/platform/ViaPlatform.java index 190bba759..3c09393e4 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/platform/ViaPlatform.java +++ b/api/src/main/java/com/viaversion/viaversion/api/platform/ViaPlatform.java @@ -215,4 +215,13 @@ public interface ViaPlatform { * @return whether the platform has a plugin/mod with the given name */ boolean hasPlugin(String name); + + /** + * Returns whether the platform might be reloading. + * + * @return whether the platform might be reloading + */ + default boolean couldBeReloading() { + return true; + } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/platform/ViaServerProxyPlatform.java b/api/src/main/java/com/viaversion/viaversion/api/platform/ViaServerProxyPlatform.java index 5c6f0ca25..9c815458d 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/platform/ViaServerProxyPlatform.java +++ b/api/src/main/java/com/viaversion/viaversion/api/platform/ViaServerProxyPlatform.java @@ -30,4 +30,9 @@ public interface ViaServerProxyPlatform extends ViaPlatform { * @return protocol detector service */ ProtocolDetectorService protocolDetectorService(); + + @Override + default boolean couldBeReloading() { + return false; + } } diff --git a/bukkit/src/main/java/com/viaversion/viaversion/ViaVersionPlugin.java b/bukkit/src/main/java/com/viaversion/viaversion/ViaVersionPlugin.java index 1878534dc..a11c8cef4 100644 --- a/bukkit/src/main/java/com/viaversion/viaversion/ViaVersionPlugin.java +++ b/bukkit/src/main/java/com/viaversion/viaversion/ViaVersionPlugin.java @@ -268,6 +268,11 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform return getServer().getPluginManager().getPlugin(name) != null; } + @Override + public boolean couldBeReloading() { + return !(PaperViaInjector.PAPER_IS_STOPPING_METHOD && Bukkit.isStopping()); + } + public boolean isLateBind() { return lateBind; } diff --git a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/PaperViaInjector.java b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/PaperViaInjector.java index 7f23ce301..366ad3ecb 100644 --- a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/PaperViaInjector.java +++ b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/platform/PaperViaInjector.java @@ -28,6 +28,7 @@ public final class PaperViaInjector { public static final boolean PAPER_INJECTION_METHOD = hasPaperInjectionMethod(); public static final boolean PAPER_PROTOCOL_METHOD = hasServerProtocolMethod(); public static final boolean PAPER_PACKET_LIMITER = hasPacketLimiter(); + public static final boolean PAPER_IS_STOPPING_METHOD = hasIsStoppingMethod(); private PaperViaInjector() { } @@ -76,6 +77,15 @@ public final class PaperViaInjector { return hasClass("io.papermc.paper.network.ChannelInitializeListener"); } + private static boolean hasIsStoppingMethod() { + try { + Bukkit.class.getDeclaredMethod("isStopping"); + return true; + } catch (final NoSuchMethodException e) { + return false; + } + } + private static boolean hasPacketLimiter() { return hasClass("com.destroystokyo.paper.PaperConfig$PacketLimit") || hasClass("io.papermc.paper.configuration.GlobalConfiguration$PacketLimiter"); } diff --git a/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java b/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java index 1c67e8f2d..8999053a0 100644 --- a/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java +++ b/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java @@ -210,8 +210,10 @@ public class ViaManagerImpl implements ViaManager { } public void destroy() { - // Uninject - platform.getLogger().info("ViaVersion is disabling, if this is a reload and you experience issues consider rebooting."); + if (platform.couldBeReloading()) { + platform.getLogger().info("ViaVersion is disabling. If this is a reload and you experience issues, please reboot instead."); + } + try { injector.uninject(); } catch (Exception e) { @@ -220,6 +222,8 @@ public class ViaManagerImpl implements ViaManager { loader.unload(); scheduler.shutdown(); + + platform.getLogger().info("ViaVersion has been disabled; uninjected the platform shut down the scheduler."); } private void checkJavaVersion() { // Stolen from Paper diff --git a/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java b/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java index 28affc63d..ecae95db6 100644 --- a/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java +++ b/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java @@ -136,4 +136,9 @@ public final class TestPlatform implements ViaPlatform { public boolean hasPlugin(final String name) { return false; } + + @Override + public boolean couldBeReloading() { + return false; + } }