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; + } }