From e963e56669f3dfb8dd2ba9c1bce905c667ccb1a0 Mon Sep 17 00:00:00 2001 From: Manuel Sabogal Date: Sat, 26 Oct 2024 20:54:01 +0200 Subject: [PATCH] Make sure to unregister only the specific listeners (cherry picked from commit 88a1eda7aa4082f7b853c891af659c306ddd1979) --- .../main/java/me/edoren/skin_changer/SkinChanger.java | 10 ++++++++++ .../edoren/skin_changer/client/ClientController.java | 5 ++++- .../edoren/skin_changer/server/ServerController.java | 4 ++++ .../skin_changer/server/SkinProviderController.java | 7 +++++-- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/me/edoren/skin_changer/SkinChanger.java b/common/src/main/java/me/edoren/skin_changer/SkinChanger.java index 6e551d8..6725916 100644 --- a/common/src/main/java/me/edoren/skin_changer/SkinChanger.java +++ b/common/src/main/java/me/edoren/skin_changer/SkinChanger.java @@ -21,8 +21,10 @@ public SkinChanger() { LifecycleEvent.SETUP.register(this::onSetup); if (Platform.getEnvironment() == Env.CLIENT) { ClientLifecycleEvent.CLIENT_SETUP.register(this::onClientSetup); + ClientLifecycleEvent.CLIENT_STOPPING.register(this::onClientStopping); } LifecycleEvent.SERVER_STARTED.register(this::onServerStarted); + LifecycleEvent.SERVER_STOPPED.register(this::onServerStopped); CommandRegistrationEvent.EVENT.register(this::onCommandRegistration); } @@ -34,10 +36,18 @@ void onClientSetup(Minecraft client) { ClientController.GetInstance().initialize(); } + void onClientStopping(Minecraft client) { + ClientController.GetInstance().deinitialize(); + } + void onServerStarted(MinecraftServer server) { ServerController.GetInstance().initialize(server); } + void onServerStopped(MinecraftServer server) { + ServerController.GetInstance().deinitialize(server); + } + void onCommandRegistration(CommandDispatcher commandSourceStackCommandDispatcher, CommandBuildContext commandBuildContext, Commands.CommandSelection commandSelection) { SkinsCommand.register(commandSourceStackCommandDispatcher); } diff --git a/common/src/main/java/me/edoren/skin_changer/client/ClientController.java b/common/src/main/java/me/edoren/skin_changer/client/ClientController.java index 01f3ad7..cd6623f 100644 --- a/common/src/main/java/me/edoren/skin_changer/client/ClientController.java +++ b/common/src/main/java/me/edoren/skin_changer/client/ClientController.java @@ -32,10 +32,13 @@ public static ClientController GetInstance() { } public void initialize() { - ClientTickEvent.CLIENT_PRE.clearListeners(); ClientTickEvent.CLIENT_PRE.register(this::onClientTickEvent); } + public void deinitialize() { + ClientTickEvent.CLIENT_PRE.unregister(this::onClientTickEvent); + } + public ResourceLocation getLocationCape(PlayerModel model) { ISkin cape = SkinLoaderService.GetInstance().getCape(model); if (cape != null && cape.isDataReady()) diff --git a/common/src/main/java/me/edoren/skin_changer/server/ServerController.java b/common/src/main/java/me/edoren/skin_changer/server/ServerController.java index 0124878..99cc058 100644 --- a/common/src/main/java/me/edoren/skin_changer/server/ServerController.java +++ b/common/src/main/java/me/edoren/skin_changer/server/ServerController.java @@ -33,4 +33,8 @@ public void initialize(MinecraftServer server) { SkinProviderController.GetInstance().registerSkinProvider(new MineskinSkinProvider()); SkinProviderController.GetInstance().registerCapeProvider(new CrafatarCapeProvider()); } + + public void deinitialize(MinecraftServer server) { + SkinProviderController.GetInstance().deinitialize(); + } } diff --git a/common/src/main/java/me/edoren/skin_changer/server/SkinProviderController.java b/common/src/main/java/me/edoren/skin_changer/server/SkinProviderController.java index 8617c8c..1798bd0 100644 --- a/common/src/main/java/me/edoren/skin_changer/server/SkinProviderController.java +++ b/common/src/main/java/me/edoren/skin_changer/server/SkinProviderController.java @@ -63,12 +63,15 @@ public void initialize(File saveFolder) { } this.cacheFile = cacheFile.getPath(); - PlayerEvent.PLAYER_JOIN.clearListeners(); - PlayerEvent.PLAYER_QUIT.clearListeners(); PlayerEvent.PLAYER_JOIN.register(this::onPlayerLogin); PlayerEvent.PLAYER_QUIT.register(this::onPlayerLogout); } + public void deinitialize() { + PlayerEvent.PLAYER_JOIN.unregister(this::onPlayerLogin); + PlayerEvent.PLAYER_QUIT.unregister(this::onPlayerLogout); + } + public void registerCapeProvider(ISkinProvider provider) { providers.get(DataType.CAPE).add(provider); }