From 9b9f48111d47f7aaf4d7d29b1a553975e0a6d133 Mon Sep 17 00:00:00 2001 From: Vinrobot Date: Sun, 13 Aug 2023 00:36:39 +0200 Subject: [PATCH] Reload emotes when changing config --- .../client/MinecraftEmoteModClient.java | 16 ++++++++++++-- .../mcemote/config/ConfigurationManager.java | 21 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java b/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java index 285dd29..7461014 100644 --- a/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java +++ b/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java @@ -8,6 +8,7 @@ import net.vinrobot.mcemote.client.providers.IEmoteProvider; import net.vinrobot.mcemote.client.text.EmotesManager; import net.vinrobot.mcemote.config.Configuration; +import net.vinrobot.mcemote.config.ConfigurationManager; import webpdecoderjn.WebPLoader; import java.io.IOException; @@ -27,7 +28,18 @@ public void onInitializeClient() { MinecraftEmoteMod.LOGGER.error("Failed to initialize WebPDecoder", e); } - final Configuration config = MinecraftEmote.getInstance().getConfigManager().getConfig(); + final ConfigurationManager configManager = MinecraftEmote.getInstance().getConfigManager(); + + configManager.onChange((config) -> { + EMOTES_MANAGER.clearEmotes(); + this.registerEmotes(EMOTES_MANAGER, config); + }); + + // Load config at startup + configManager.getConfig(); + } + + private void registerEmotes(final EmotesManager manager, final Configuration config) { final ServiceLoader serviceLoader = ServiceLoader.load(IEmoteProvider.class); final List providers = ListHelper.sort(serviceLoader); @@ -41,7 +53,7 @@ public void onInitializeClient() { provider.registerEmotes(config, emotes::add); for (final Emote emote : emotes) { - EMOTES_MANAGER.addEmote(emote); + manager.addEmote(emote); } MinecraftEmoteMod.LOGGER.info("Registered " + emotes.size() + " emotes from provider " + providerName); diff --git a/src/main/java/net/vinrobot/mcemote/config/ConfigurationManager.java b/src/main/java/net/vinrobot/mcemote/config/ConfigurationManager.java index 4ca0212..9d414fb 100644 --- a/src/main/java/net/vinrobot/mcemote/config/ConfigurationManager.java +++ b/src/main/java/net/vinrobot/mcemote/config/ConfigurationManager.java @@ -1,10 +1,13 @@ package net.vinrobot.mcemote.config; import java.io.IOException; +import java.util.LinkedHashSet; +import java.util.Set; import static net.vinrobot.mcemote.MinecraftEmoteMod.LOGGER; public class ConfigurationManager { + private final Set changeCallbacks = new LinkedHashSet<>(); private final ConfigurationService configService; private Configuration configuration; @@ -25,12 +28,16 @@ public Configuration load() { } catch (final IOException e) { LOGGER.error("Failed to load config", e); return this.configuration = service.create(); + } finally { + this.triggerOnChange(); } } public void save() { final Configuration config = this.configuration; if (config != null) { + this.triggerOnChange(); + try { this.configService.save(config); } catch (final IOException e) { @@ -42,4 +49,18 @@ public void save() { public void reset() { this.configuration = this.configService.create(); } + + public void onChange(final ChangeCallback callback) { + this.changeCallbacks.add(callback); + } + + public void triggerOnChange() { + for (final ChangeCallback callback : this.changeCallbacks) { + callback.onChange(this.configuration); + } + } + + public interface ChangeCallback { + void onChange(Configuration config); + } }