From 11ecf88eb2c7ae4f13c32c1261491efa5678188b Mon Sep 17 00:00:00 2001 From: Lionarius Date: Thu, 24 Jul 2025 03:20:16 +0300 Subject: [PATCH] add OnServerStopped event --- .../net/lionarius/skinrestorer/SkinRestorer.java | 14 ++++++++++++++ .../fabric/mixin/MinecraftServerMixin.java | 6 ++++++ .../skinrestorer/forge/SkinRestorerForge.java | 6 ++++++ .../neoforge/SkinRestorerNeoForge.java | 6 ++++++ 4 files changed, 32 insertions(+) diff --git a/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java b/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java index d8ac710..f2270f1 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java +++ b/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java @@ -19,6 +19,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.storage.LevelResource; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,6 +38,7 @@ public final class SkinRestorer { private static Path configDir; private static Config config; private static TickedScheduler tickedScheduler; + private static MinecraftServer minecraftServer; private SkinRestorer() {} @@ -60,6 +62,10 @@ public final class SkinRestorer { return SkinRestorer.tickedScheduler; } + public static @Nullable MinecraftServer getMinecraftServer() { + return SkinRestorer.minecraftServer; + } + public static Optional getProvider(String name) { return Optional.ofNullable(SkinRestorer.providersRegistry.get(name)); } @@ -173,6 +179,14 @@ public final class SkinRestorer { SkinRestorer.skinStorage = new SkinStorage(new SkinIO(worldSkinDirectory)); SkinRestorer.tickedScheduler = new TickedScheduler(server); server.addTickable(SkinRestorer.tickedScheduler); + + SkinRestorer.minecraftServer = server; + } + + public static void onServerStopped(MinecraftServer server) { + SkinRestorer.skinStorage = null; + SkinRestorer.tickedScheduler = null; + SkinRestorer.minecraftServer = null; } public static void onCommandRegister(CommandDispatcher dispatcher) { diff --git a/fabric/src/main/java/net/lionarius/skinrestorer/fabric/mixin/MinecraftServerMixin.java b/fabric/src/main/java/net/lionarius/skinrestorer/fabric/mixin/MinecraftServerMixin.java index f14d1ce..6212f81 100644 --- a/fabric/src/main/java/net/lionarius/skinrestorer/fabric/mixin/MinecraftServerMixin.java +++ b/fabric/src/main/java/net/lionarius/skinrestorer/fabric/mixin/MinecraftServerMixin.java @@ -15,4 +15,10 @@ public abstract class MinecraftServerMixin { private void onServerStarted(CallbackInfo ci) { SkinRestorer.Events.onServerStarted((MinecraftServer) (Object) this); } + + @Inject(method = "runServer", + at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;onServerExit()V")) + private void onServerStopped(CallbackInfo ci) { + SkinRestorer.Events.onServerStopped((MinecraftServer) (Object) this); + } } diff --git a/forge/src/main/java/net/lionarius/skinrestorer/forge/SkinRestorerForge.java b/forge/src/main/java/net/lionarius/skinrestorer/forge/SkinRestorerForge.java index da046fb..fb9d0fd 100644 --- a/forge/src/main/java/net/lionarius/skinrestorer/forge/SkinRestorerForge.java +++ b/forge/src/main/java/net/lionarius/skinrestorer/forge/SkinRestorerForge.java @@ -4,6 +4,7 @@ import net.lionarius.skinrestorer.SkinRestorer; import net.lionarius.skinrestorer.compat.skinshuffle.SkinShuffleCompatibility; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStoppedEvent; import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -27,4 +28,9 @@ public final class SkinRestorerForge { public static void onServerStarted(ServerStartedEvent event) { SkinRestorer.Events.onServerStarted(event.getServer()); } + + @SubscribeEvent + public static void onServerStopped(ServerStoppedEvent event) { + SkinRestorer.Events.onServerStopped(event.getServer()); + } } diff --git a/neoforge/src/main/java/net/lionarius/skinrestorer/neoforge/SkinRestorerNeoForge.java b/neoforge/src/main/java/net/lionarius/skinrestorer/neoforge/SkinRestorerNeoForge.java index b18b23c..e03e127 100644 --- a/neoforge/src/main/java/net/lionarius/skinrestorer/neoforge/SkinRestorerNeoForge.java +++ b/neoforge/src/main/java/net/lionarius/skinrestorer/neoforge/SkinRestorerNeoForge.java @@ -7,6 +7,7 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.neoforge.event.RegisterCommandsEvent; import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.server.ServerStoppedEvent; @Mod(SkinRestorer.MOD_ID) @EventBusSubscriber(modid = SkinRestorer.MOD_ID) @@ -28,4 +29,9 @@ public final class SkinRestorerNeoForge { public static void onServerStarted(ServerStartedEvent event) { SkinRestorer.Events.onServerStarted(event.getServer()); } + + @SubscribeEvent + public static void onServerStopped(ServerStoppedEvent event) { + SkinRestorer.Events.onServerStopped(event.getServer()); + } }