From 8f09ec9492382a888209d7536b31ee270d3d1850 Mon Sep 17 00:00:00 2001 From: FirstMegaGame4 <84094287+FirstMegaGame4@users.noreply.github.com> Date: Fri, 11 Aug 2023 16:15:34 +0200 Subject: [PATCH] Breaking Changes: Improved Config Networking System Add Caches --- .../com/mmodding/mmodding_lib/Events.java | 18 ++++++ .../mmodding/mmodding_lib/LocalCaches.java | 19 +++++++ .../mmodding_lib/MModdingLibConfig.java | 1 + .../mmodding_lib/client/ClientCaches.java | 34 +++--------- .../mmodding_lib/client/ClientEvents.java | 2 +- .../client/MModdingModConfigsScreen.java | 7 +-- .../library/base/MModdingModInitializer.java | 7 --- .../mmodding_lib/library/caches/Caches.java | 55 +++++++++++++++++++ .../mmodding_lib/library/config/Config.java | 37 +++++++++++-- ...TemporaryConfig.java => StaticConfig.java} | 24 ++++---- .../client/ClientConfigNetworkingEvents.java | 16 +++--- .../server/ServerConfigNetworkingEvents.java | 28 ++++++++++ .../library/utils/ConfigUtils.java | 30 ++++++++-- .../networking/client/ClientOperations.java | 15 +++-- .../networking/server/ServerOperations.java | 16 ++++++ .../assets/mmodding_lib/lang/en_us.json | 3 +- 16 files changed, 241 insertions(+), 71 deletions(-) create mode 100644 src/main/java/com/mmodding/mmodding_lib/LocalCaches.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/caches/Caches.java rename src/main/java/com/mmodding/mmodding_lib/library/config/{client/TemporaryConfig.java => StaticConfig.java} (68%) diff --git a/src/main/java/com/mmodding/mmodding_lib/Events.java b/src/main/java/com/mmodding/mmodding_lib/Events.java index cf6eafe..dc2889f 100644 --- a/src/main/java/com/mmodding/mmodding_lib/Events.java +++ b/src/main/java/com/mmodding/mmodding_lib/Events.java @@ -1,6 +1,8 @@ package com.mmodding.mmodding_lib; import com.mmodding.mmodding_lib.ducks.GeneratorOptionsDuckInterface; +import com.mmodding.mmodding_lib.library.config.Config; +import com.mmodding.mmodding_lib.library.config.StaticConfig; import com.mmodding.mmodding_lib.networking.server.ServerOperations; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayNetworkHandler; @@ -22,13 +24,29 @@ private static void serverLoad(MinecraftServer server, ServerWorld world) { } private static void serverInit(ServerPlayNetworkHandler handler, MinecraftServer server) { + MModdingLib.CONFIGS.forEach((qualifier, config) -> { + if (config.getNetworkingSate() == Config.NetworkingState.LOCAL_CACHES) { + LocalCaches.CONFIGS.put(qualifier, StaticConfig.of(config)); + } + }); + + if (MModdingLib.MMODDING_LIBRARY_CONFIG.getContent().getBoolean("showMModdingLibraryLocalCaches")) { + LocalCaches.debugCaches(); + } + if (server.isDedicated()) { + ServerOperations.sendConfigsToClient(handler.getPlayer()); ServerOperations.sendGlintPacksToClient(handler.getPlayer()); } } + private static void serverDisconnect(ServerPlayNetworkHandler handler, MinecraftServer server) { + LocalCaches.clearCaches(); + } + public static void register() { ServerWorldLoadEvents.LOAD.register(Events::serverLoad); ServerPlayConnectionEvents.INIT.register(Events::serverInit); + ServerPlayConnectionEvents.DISCONNECT.register(Events::serverDisconnect); } } diff --git a/src/main/java/com/mmodding/mmodding_lib/LocalCaches.java b/src/main/java/com/mmodding/mmodding_lib/LocalCaches.java new file mode 100644 index 0000000..4473c2b --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/LocalCaches.java @@ -0,0 +1,19 @@ +package com.mmodding.mmodding_lib; + +import com.mmodding.mmodding_lib.library.caches.Caches; +import com.mmodding.mmodding_lib.library.config.Config; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +public class LocalCaches { + + public static final Caches.Local CONFIGS = new Caches.Local<>("Configs", "Qualifier", "Config"); + + public static void debugCaches() { + CONFIGS.debug(); + } + + public static void clearCaches() { + CONFIGS.clear(); + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/MModdingLibConfig.java b/src/main/java/com/mmodding/mmodding_lib/MModdingLibConfig.java index 629c939..8654c43 100644 --- a/src/main/java/com/mmodding/mmodding_lib/MModdingLibConfig.java +++ b/src/main/java/com/mmodding/mmodding_lib/MModdingLibConfig.java @@ -21,6 +21,7 @@ public String getFilePath() { public ConfigObject defaultConfig() { return new ConfigObject.Builder() .addBooleanParameter("showMModdingLibraryMods", true) + .addBooleanParameter("showMModdingLibraryLocalCaches", false) .build(); } diff --git a/src/main/java/com/mmodding/mmodding_lib/client/ClientCaches.java b/src/main/java/com/mmodding/mmodding_lib/client/ClientCaches.java index 30e7918..3f3fc38 100644 --- a/src/main/java/com/mmodding/mmodding_lib/client/ClientCaches.java +++ b/src/main/java/com/mmodding/mmodding_lib/client/ClientCaches.java @@ -1,48 +1,32 @@ package com.mmodding.mmodding_lib.client; +import com.mmodding.mmodding_lib.library.caches.Caches; +import com.mmodding.mmodding_lib.library.config.StaticConfig; import com.mmodding.mmodding_lib.library.glint.GlintPackView; import com.mmodding.mmodding_lib.library.glint.client.GlintPack; import net.minecraft.item.Item; import org.jetbrains.annotations.ApiStatus; import org.quiltmc.loader.api.minecraft.ClientOnly; -import java.util.HashMap; - @ClientOnly @ApiStatus.Internal public class ClientCaches { - public static final ClientCache GLINT_PACKS = new ClientCache<>("Glint Packs", "Item", "Glint Pack"); + public static final Caches.Client CONFIGS = new Caches.Client<>("Configs", "Qualifier", "Config"); + + public static final Caches.Client GLINT_PACKS = new Caches.Client<>("Glint Packs", "Item", "Glint Pack"); - public static final ClientCache GLINT_PACK_OVERRIDES = new ClientCache<>("Glint Pack Overrides", "Item", "Glint Pack View"); + public static final Caches.Client GLINT_PACK_OVERRIDES = new Caches.Client<>("Glint Pack Overrides", "Item", "Glint Pack View"); public static void debugCaches() { + CONFIGS.debug(); GLINT_PACKS.debug(); GLINT_PACK_OVERRIDES.debug(); } - public static void avoidCaches() { + public static void clearCaches() { + CONFIGS.clear(); GLINT_PACKS.clear(); GLINT_PACK_OVERRIDES.clear(); } - - public static class ClientCache extends HashMap { - - private final String cache; - private final String key; - private final String value; - - public ClientCache(String cache, String key, String value) { - this.cache = cache; - this.key = key; - this.value = value; - } - - public void debug() { - System.out.println("Client Cache {" + this.cache + "} :"); - this.forEach((key, value) -> System.out.println( - "- " + this.key + " : " + key + " | " + this.value + " : " + value - )); - } - } } diff --git a/src/main/java/com/mmodding/mmodding_lib/client/ClientEvents.java b/src/main/java/com/mmodding/mmodding_lib/client/ClientEvents.java index 78a78d5..d905855 100644 --- a/src/main/java/com/mmodding/mmodding_lib/client/ClientEvents.java +++ b/src/main/java/com/mmodding/mmodding_lib/client/ClientEvents.java @@ -40,7 +40,7 @@ private static void serverJoin(ClientPlayNetworkHandler handler, PacketSender se } private static void serverDisconnect(ClientPlayNetworkHandler handler, MinecraftClient client) { - ClientCaches.avoidCaches(); + ClientCaches.clearCaches(); } private static void itemTooltipCallback(ItemStack stack, PlayerEntity player, TooltipContext context, List lines) { diff --git a/src/main/java/com/mmodding/mmodding_lib/client/MModdingModConfigsScreen.java b/src/main/java/com/mmodding/mmodding_lib/client/MModdingModConfigsScreen.java index 9bd3426..be80731 100644 --- a/src/main/java/com/mmodding/mmodding_lib/client/MModdingModConfigsScreen.java +++ b/src/main/java/com/mmodding/mmodding_lib/client/MModdingModConfigsScreen.java @@ -2,7 +2,6 @@ import com.google.common.collect.ImmutableList; import com.mmodding.mmodding_lib.MModdingLib; -import com.mmodding.mmodding_lib.library.config.client.TemporaryConfig; import com.mmodding.mmodding_lib.library.config.Config; import com.mmodding.mmodding_lib.library.config.client.screen.ConfigScreen; import net.minecraft.client.MinecraftClient; @@ -59,11 +58,7 @@ public static class MModdingModConfigsListWidget extends ElementListWidget { - if (!(config instanceof TemporaryConfig)) { - this.addEntry(new MModdingModConfigsListEntry(screen, qualifier, config)); - } - }); + MModdingLibClient.CLIENT_CONFIGS.forEach((qualifier, config) -> this.addEntry(new MModdingModConfigsListEntry(screen, qualifier, config))); } else { MModdingLib.CONFIGS.forEach((qualifier, config) -> this.addEntry(new MModdingModConfigsListEntry(screen, qualifier, config))); diff --git a/src/main/java/com/mmodding/mmodding_lib/library/base/MModdingModInitializer.java b/src/main/java/com/mmodding/mmodding_lib/library/base/MModdingModInitializer.java index eb1770c..8860c3f 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/base/MModdingModInitializer.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/base/MModdingModInitializer.java @@ -1,15 +1,11 @@ package com.mmodding.mmodding_lib.library.base; import com.mmodding.mmodding_lib.MModdingLib; -import com.mmodding.mmodding_lib.client.MModdingLibClient; -import com.mmodding.mmodding_lib.library.config.client.TemporaryConfig; import com.mmodding.mmodding_lib.library.config.Config; import com.mmodding.mmodding_lib.library.initializers.ElementsInitializer; -import net.fabricmc.api.EnvType; import org.jetbrains.annotations.MustBeInvokedByOverriders; import org.jetbrains.annotations.Nullable; import org.quiltmc.loader.api.ModContainer; -import org.quiltmc.loader.api.minecraft.MinecraftQuiltLoader; import org.quiltmc.qsl.base.api.entrypoint.ModInitializer; import java.util.List; @@ -27,9 +23,6 @@ default void onInitialize(ModContainer mod) { if (this.getConfig() != null) { this.getConfig().initializeConfig(); MModdingLib.CONFIGS.put(this.getConfig().getQualifier(), this.getConfig()); - if (MinecraftQuiltLoader.getEnvironmentType() == EnvType.CLIENT) { - MModdingLibClient.CLIENT_CONFIGS.put(this.getConfig().getQualifier(), TemporaryConfig.fromConfig(this.getConfig())); - } } this.getElementsInitializers().forEach(ElementsInitializer::register); } diff --git a/src/main/java/com/mmodding/mmodding_lib/library/caches/Caches.java b/src/main/java/com/mmodding/mmodding_lib/library/caches/Caches.java new file mode 100644 index 0000000..2a5aeae --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/caches/Caches.java @@ -0,0 +1,55 @@ +package com.mmodding.mmodding_lib.library.caches; + +import org.quiltmc.loader.api.minecraft.ClientOnly; + +import java.util.HashMap; + +public class Caches { + + public abstract static class Cache extends HashMap { + + protected final String cache; + protected final String key; + protected final String value; + + private Cache(String cache, String key, String value) { + this.cache = cache; + this.key = key; + this.value = value; + } + + abstract public boolean clientReserved(); + + public void debug() { + System.out.println((this.clientReserved() ? "Client " : "Local ") + "Cache {" + this.cache + "} :"); + this.forEach((key, value) -> System.out.println( + "- " + this.key + " : " + key + " | " + this.value + " : " + value + )); + } + } + + public static class Local extends Cache { + + public Local(String cache, String key, String value) { + super(cache, key, value); + } + + @Override + public boolean clientReserved() { + return false; + } + } + + @ClientOnly + public static class Client extends Cache { + + public Client(String cache, String key, String value) { + super(cache, key, value); + } + + @Override + public boolean clientReserved() { + return true; + } + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/config/Config.java b/src/main/java/com/mmodding/mmodding_lib/library/config/Config.java index 4100b84..be6fd93 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/config/Config.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/config/Config.java @@ -17,21 +17,21 @@ public interface Config { /** * The "identifier" of the config. Used to define the translations keys of the config. - * You can take example on {@link MModdingLibConfig#getQualifier()}. + *
You can take example on {@link MModdingLibConfig#getQualifier()}. * @return the qualifier of the config */ String getQualifier(); /** * The file path. - * You can take example on {@link MModdingLibConfig#getPath()}. + *
You can take example on {@link MModdingLibConfig#getPath()}. * @return the path of the file (from the config directory and without file extension) */ String getFilePath(); /** * The default config object. - * You can take example on {@link MModdingLibConfig#defaultConfig()}. + *
You can take example on {@link MModdingLibConfig#defaultConfig()}. * @return the config object in its default state * @see ConfigObject.Builder */ @@ -39,12 +39,16 @@ public interface Config { /** * Some options used in the config screen. - * You can take example on {@link MModdingLibConfig#getConfigOptions()}. + *
You can take example on {@link MModdingLibConfig#getConfigOptions()}. * @return the config screen options * @see ConfigScreenOptions */ ConfigScreenOptions getConfigOptions(); + default NetworkingState getNetworkingSate() { + return NetworkingState.CLIENT_CACHES; + } + /** * The config content directly read from the config json file. * @return the config content @@ -120,4 +124,29 @@ default void initializeConfig() { throw new RuntimeException(e); } } + + + /** + * Refers to the current config networking state + * @see Config#getNetworkingSate() + */ + enum NetworkingState { + + /** + * When a world is joined, the current configuration is statically stored locally. + *
When a server is joined, the current configuration is sent to the client. + */ + LOCAL_CACHES, + + /** + * When a server is joined, the current configuration is sent to the client. + * @apiNote Default value of {@link Config#getNetworkingSate()} + */ + CLIENT_CACHES, + + /** + * The current configuration is never cached. + */ + WITHOUT_CACHES + } } diff --git a/src/main/java/com/mmodding/mmodding_lib/library/config/client/TemporaryConfig.java b/src/main/java/com/mmodding/mmodding_lib/library/config/StaticConfig.java similarity index 68% rename from src/main/java/com/mmodding/mmodding_lib/library/config/client/TemporaryConfig.java rename to src/main/java/com/mmodding/mmodding_lib/library/config/StaticConfig.java index ac4658e..2587d6f 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/config/client/TemporaryConfig.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/config/StaticConfig.java @@ -1,25 +1,24 @@ -package com.mmodding.mmodding_lib.library.config.client; +package com.mmodding.mmodding_lib.library.config; -import com.mmodding.mmodding_lib.library.config.Config; -import com.mmodding.mmodding_lib.library.config.ConfigObject; import com.mmodding.mmodding_lib.library.config.client.screen.ConfigScreenOptions; -public abstract class TemporaryConfig implements Config { +public abstract class StaticConfig implements Config { private ConfigObject configObject = Config.super.getContent(); - @Override - public void saveConfig(ConfigObject configObject) { - this.configObject = configObject; - } @Override public ConfigObject getContent() { return this.configObject; } - public static TemporaryConfig fromConfig(Config config) { + @Override + public void saveConfig(ConfigObject configObject) { + this.configObject = configObject; + } + + public static StaticConfig of(Config config) { - return new TemporaryConfig() { + return new StaticConfig() { @Override public String getQualifier() { @@ -40,6 +39,11 @@ public ConfigObject defaultConfig() { public ConfigScreenOptions getConfigOptions() { return config.getConfigOptions(); } + + @Override + public NetworkingState getNetworkingSate() { + return config.getNetworkingSate(); + } }; } } diff --git a/src/main/java/com/mmodding/mmodding_lib/library/events/client/ClientConfigNetworkingEvents.java b/src/main/java/com/mmodding/mmodding_lib/library/events/client/ClientConfigNetworkingEvents.java index 7dab541..59ccfd5 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/events/client/ClientConfigNetworkingEvents.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/events/client/ClientConfigNetworkingEvents.java @@ -1,21 +1,23 @@ package com.mmodding.mmodding_lib.library.events.client; -import com.mmodding.mmodding_lib.library.config.Config; +import com.mmodding.mmodding_lib.library.config.StaticConfig; import org.quiltmc.loader.api.minecraft.ClientOnly; import org.quiltmc.qsl.base.api.event.Event; +import java.util.Map; + @ClientOnly public class ClientConfigNetworkingEvents { - public static final Event BEFORE = Event.create(Before.class, callbacks -> config -> { + public static final Event BEFORE = Event.create(Before.class, callbacks -> configs -> { for (Before callback : callbacks) { - callback.beforeConfigReceived(config); + callback.beforeConfigReceived(configs); } }); - public static final Event AFTER = Event.create(After.class, callbacks -> config -> { + public static final Event AFTER = Event.create(After.class, callbacks -> configs -> { for (After callback : callbacks) { - callback.afterConfigReceived(config); + callback.afterConfigReceived(configs); } }); @@ -23,13 +25,13 @@ public class ClientConfigNetworkingEvents { @FunctionalInterface public interface Before { - void beforeConfigReceived(Config config); + void beforeConfigReceived(Map configs); } @ClientOnly @FunctionalInterface public interface After { - void afterConfigReceived(Config config); + void afterConfigReceived(Map configs); } } diff --git a/src/main/java/com/mmodding/mmodding_lib/library/events/server/ServerConfigNetworkingEvents.java b/src/main/java/com/mmodding/mmodding_lib/library/events/server/ServerConfigNetworkingEvents.java index 79d4ef3..1dfe411 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/events/server/ServerConfigNetworkingEvents.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/events/server/ServerConfigNetworkingEvents.java @@ -4,6 +4,8 @@ import org.quiltmc.loader.api.minecraft.DedicatedServerOnly; import org.quiltmc.qsl.base.api.event.Event; +import java.util.Map; + @DedicatedServerOnly public class ServerConfigNetworkingEvents { @@ -19,6 +21,18 @@ public class ServerConfigNetworkingEvents { } }); + public static final Event BEFORE_ALL = Event.create(BeforeAll.class, callbacks -> configs -> { + for (BeforeAll callback : callbacks) { + callback.beforeAllConfigsSent(configs); + } + }); + + public static final Event AFTER_ALL = Event.create(AfterAll.class, callbacks -> configs -> { + for (AfterAll callback : callbacks) { + callback.afterAllConfigsSent(configs); + } + }); + @DedicatedServerOnly @FunctionalInterface public interface Before { @@ -32,4 +46,18 @@ public interface After { void afterConfigSent(Config config); } + + @DedicatedServerOnly + @FunctionalInterface + public interface BeforeAll { + + void beforeAllConfigsSent(Map configs); + } + + @DedicatedServerOnly + @FunctionalInterface + public interface AfterAll { + + void afterAllConfigsSent(Map configs); + } } diff --git a/src/main/java/com/mmodding/mmodding_lib/library/utils/ConfigUtils.java b/src/main/java/com/mmodding/mmodding_lib/library/utils/ConfigUtils.java index cd32878..6fc0c14 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/utils/ConfigUtils.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/utils/ConfigUtils.java @@ -1,6 +1,8 @@ package com.mmodding.mmodding_lib.library.utils; +import com.mmodding.mmodding_lib.LocalCaches; import com.mmodding.mmodding_lib.MModdingLib; +import com.mmodding.mmodding_lib.client.ClientCaches; import com.mmodding.mmodding_lib.client.MModdingLibClient; import com.mmodding.mmodding_lib.library.config.Config; import net.minecraft.util.Util; @@ -8,13 +10,33 @@ public class ConfigUtils { - public static Config getConfig(String configName) { - return MModdingLib.CONFIGS.get(configName); + public static Config getConfig(String qualifier) { + Config.NetworkingState networkingState = MModdingLib.CONFIGS.get(qualifier).getNetworkingSate(); + + return switch (networkingState) { + case LOCAL_CACHES -> { + if (!EnvironmentUtils.isInSinglePlayer() && EnvironmentUtils.isClient()) { + yield ClientCaches.CONFIGS.get(qualifier); + } + else { + yield LocalCaches.CONFIGS.get(qualifier); + } + } + case CLIENT_CACHES -> { + if (!EnvironmentUtils.isInSinglePlayer() && EnvironmentUtils.isClient()) { + yield ClientCaches.CONFIGS.get(qualifier); + } + else { + yield MModdingLib.CONFIGS.get(qualifier); + } + } + case WITHOUT_CACHES -> MModdingLib.CONFIGS.get(qualifier); + }; } @ClientOnly - public static Config getClientConfig(String configName) { - return MModdingLibClient.CLIENT_CONFIGS.get(configName); + public static Config getClientConfig(String qualifier) { + return MModdingLibClient.CLIENT_CONFIGS.get(qualifier); } public static String getSeparator() { diff --git a/src/main/java/com/mmodding/mmodding_lib/networking/client/ClientOperations.java b/src/main/java/com/mmodding/mmodding_lib/networking/client/ClientOperations.java index a378b68..4740182 100644 --- a/src/main/java/com/mmodding/mmodding_lib/networking/client/ClientOperations.java +++ b/src/main/java/com/mmodding/mmodding_lib/networking/client/ClientOperations.java @@ -1,8 +1,9 @@ package com.mmodding.mmodding_lib.networking.client; import com.google.gson.JsonParser; +import com.mmodding.mmodding_lib.MModdingLib; import com.mmodding.mmodding_lib.client.ClientCaches; -import com.mmodding.mmodding_lib.client.MModdingLibClient; +import com.mmodding.mmodding_lib.library.config.StaticConfig; import com.mmodding.mmodding_lib.library.glint.client.GlintPack; import com.mmodding.mmodding_lib.library.client.utils.MModdingClientGlobalMaps; import com.mmodding.mmodding_lib.library.config.ConfigObject; @@ -17,14 +18,16 @@ public class ClientOperations { public static void receiveConfigOnClient(PacketByteBuf packet) { - String configName = packet.readString(); - String configContent = packet.readString(); + String qualifier = packet.readString(); + String content = packet.readString(); - ClientConfigNetworkingEvents.BEFORE.invoker().beforeConfigReceived(MModdingLibClient.CLIENT_CONFIGS.get(configName)); + ClientConfigNetworkingEvents.BEFORE.invoker().beforeConfigReceived(ClientCaches.CONFIGS); - MModdingLibClient.CLIENT_CONFIGS.get(configName).saveConfig(new ConfigObject(JsonParser.parseString(configContent).getAsJsonObject())); + StaticConfig staticConfig = StaticConfig.of(MModdingLib.CONFIGS.get(qualifier)); + staticConfig.saveConfig(new ConfigObject(JsonParser.parseString(content).getAsJsonObject())); + ClientCaches.CONFIGS.put(qualifier, staticConfig); - ClientConfigNetworkingEvents.AFTER.invoker().afterConfigReceived(MModdingLibClient.CLIENT_CONFIGS.get(configName)); + ClientConfigNetworkingEvents.AFTER.invoker().afterConfigReceived(ClientCaches.CONFIGS); } public static void receiveGlintPackOnClient(PacketByteBuf packet) { diff --git a/src/main/java/com/mmodding/mmodding_lib/networking/server/ServerOperations.java b/src/main/java/com/mmodding/mmodding_lib/networking/server/ServerOperations.java index d604612..432c864 100644 --- a/src/main/java/com/mmodding/mmodding_lib/networking/server/ServerOperations.java +++ b/src/main/java/com/mmodding/mmodding_lib/networking/server/ServerOperations.java @@ -1,5 +1,6 @@ package com.mmodding.mmodding_lib.networking.server; +import com.mmodding.mmodding_lib.MModdingLib; import com.mmodding.mmodding_lib.library.glint.GlintPackView; import com.mmodding.mmodding_lib.library.config.Config; import com.mmodding.mmodding_lib.library.config.ConfigObject; @@ -33,6 +34,21 @@ public static void sendConfigToClient(Config config, ServerPlayerEntity player) ServerConfigNetworkingEvents.AFTER.invoker().afterConfigSent(config); } + public static void sendConfigsToClient(ServerPlayerEntity player) { + + ServerConfigNetworkingEvents.BEFORE_ALL.invoker().beforeAllConfigsSent(MModdingLib.CONFIGS); + + MModdingLib.CONFIGS.forEach((qualifier, config) -> { + boolean isLocalCache = config.getNetworkingSate() == Config.NetworkingState.LOCAL_CACHES; + boolean isClientCache = config.getNetworkingSate() == Config.NetworkingState.CLIENT_CACHES; + if (isLocalCache || isClientCache) { + ServerOperations.sendConfigToClient(config, player); + } + }); + + ServerConfigNetworkingEvents.AFTER_ALL.invoker().afterAllConfigsSent(MModdingLib.CONFIGS); + } + public static void sendGlintPackToClient(Item item, GlintPackView view, ServerPlayerEntity player) { PacketByteBuf packet = PacketByteBufs.create(); diff --git a/src/main/resources/assets/mmodding_lib/lang/en_us.json b/src/main/resources/assets/mmodding_lib/lang/en_us.json index f9713d4..366fdaf 100644 --- a/src/main/resources/assets/mmodding_lib/lang/en_us.json +++ b/src/main/resources/assets/mmodding_lib/lang/en_us.json @@ -1,7 +1,8 @@ { + "config.mmodding_lib.showMModdingLibraryLocalCaches": "Show Local Caches", "config.mmodding_lib.showMModdingLibraryMods": "Show MModding Library Mods", "config.mmodding_lib_client.applyGlintPackOverridesToVanillaItems": "Apply Glint Pack Overrides To Vanilla Items", - "config.mmodding_lib_client.showMModdingLibraryClientCaches": "Show MModding Library Client Caches", + "config.mmodding_lib_client.showMModdingLibraryClientCaches": "Show Client Caches", "mmodding_lib.commands.redirections.weather": "The weather command only works when executed in the overworld, use this instead:", "mmodding_lib.commands.redirections.weather.fixed": "Fixed Command", "mmodding_lib.commands.redirections.weather.hover": "Execute fixed weather %s command",