diff --git a/src/main/java/io/ix0rai/rainglow/client/RainglowClient.java b/src/main/java/io/ix0rai/rainglow/client/RainglowClient.java index 985ce8c..1907cd2 100644 --- a/src/main/java/io/ix0rai/rainglow/client/RainglowClient.java +++ b/src/main/java/io/ix0rai/rainglow/client/RainglowClient.java @@ -2,6 +2,7 @@ import folk.sisby.kaleido.lib.quiltconfig.api.values.TrackedValue; import folk.sisby.kaleido.lib.quiltconfig.api.values.ValueList; +import folk.sisby.kaleido.lib.quiltconfig.api.values.ValueMap; import io.ix0rai.rainglow.Rainglow; import io.ix0rai.rainglow.data.RainglowColour; import io.ix0rai.rainglow.data.RainglowMode; @@ -26,25 +27,33 @@ public class RainglowClient implements ClientModInitializer { public void onInitializeClient() { ClientPlayNetworking.registerGlobalReceiver(RainglowNetworking.ConfigSyncPayload.PACKET_ID, (payload, context) -> { MinecraftClient client = context.client(); - client.execute(() -> { - // custom must be set before mode so that if the server sends a custom mode it is set correctly - // otherwise the client's custom would be used - ValueList list = ValueList.create("", payload.customMode().stream().map(RainglowColour::getId).toArray(String[]::new)); - Rainglow.CONFIG.customColours.setOverride(list); - Rainglow.CONFIG.mode.setOverride(payload.currentMode()); + if (!client.isIntegratedServerRunning()) { + client.execute(() -> { + // custom must be set before mode so that if the server sends a custom mode it is set correctly + // otherwise the client's custom would be used + ValueList customColours = ValueList.create("", payload.customMode().stream().map(RainglowColour::getId).toArray(String[]::new)); + Rainglow.CONFIG.customColours.setOverride(customColours); + Rainglow.CONFIG.mode.setOverride(payload.currentMode()); - // todo override toggles + var rarities = ValueMap.builder(0); + for (var entry : payload.rarities().entrySet()) { + rarities.put(entry.getKey().getId(), entry.getValue()); + } + Rainglow.CONFIG.rarities.setOverride(rarities.build()); - for (var entry : payload.enabledMobs().entrySet()) { - Rainglow.CONFIG.setEntityEnabled(entry.getKey(), entry.getValue()); - } + var toggles = ValueMap.builder(true); + for (var entry : payload.enabledMobs().entrySet()) { + toggles.put(entry.getKey().getId(), entry.getValue()); + } + Rainglow.CONFIG.toggles.setOverride(toggles.build()); - // lock the config from reloading on resource reload - Rainglow.CONFIG.setEditLocked(true); + // lock the config from reloading on resource reload + Rainglow.CONFIG.setEditLocked(true); - // log - Rainglow.LOGGER.info("received config from server: set mode to " + payload.currentMode() + " and custom colours to " + payload.customMode()); - }); + // log + Rainglow.LOGGER.info("received config from server: set mode to " + payload.currentMode() + " and custom colours to " + payload.customMode()); + }); + } }); ClientPlayNetworking.registerGlobalReceiver(RainglowNetworking.ModeSyncPayload.PACKET_ID, (payload, context) -> { diff --git a/src/main/java/io/ix0rai/rainglow/config/RainglowConfig.java b/src/main/java/io/ix0rai/rainglow/config/RainglowConfig.java index b33eed8..08948eb 100644 --- a/src/main/java/io/ix0rai/rainglow/config/RainglowConfig.java +++ b/src/main/java/io/ix0rai/rainglow/config/RainglowConfig.java @@ -49,6 +49,15 @@ public Map getToggles() { return map; } + public Map getRarities() { + Map map = new HashMap<>(); + for (RainglowEntity entity : RainglowEntity.values()) { + map.put(entity, this.getRarity(entity)); + } + + return map; + } + public boolean isEntityEnabled(RainglowEntity entity) { return this.toggles.value().get(entity.getId()); } diff --git a/src/main/java/io/ix0rai/rainglow/config/RainglowConfigScreen.java b/src/main/java/io/ix0rai/rainglow/config/RainglowConfigScreen.java index 5aa8b97..5c01b5b 100644 --- a/src/main/java/io/ix0rai/rainglow/config/RainglowConfigScreen.java +++ b/src/main/java/io/ix0rai/rainglow/config/RainglowConfigScreen.java @@ -110,7 +110,7 @@ private DeferredSaveOption createEntityToggle(RainglowEntity entity) { "config.enable_" + e.getId(), "tooltip.entity_toggle", Rainglow.CONFIG.toggles.getRealValue().get(e.getId()), - enabled -> Rainglow.CONFIG.setEntityEnabled(e, enabled), + enabled -> Rainglow.CONFIG.toggles.getRealValue().put(e.getId(), enabled), enabled -> this.saveButton.active = true )); } @@ -122,7 +122,7 @@ private DeferredSaveOption createColourRaritySlider(RainglowEntity enti Rainglow.CONFIG.rarities.getRealValue().get(e.getId()), 0, 100, - rarity -> Rainglow.CONFIG.setRarity(e, rarity), + rarity -> Rainglow.CONFIG.rarities.getRealValue().put(e.getId(), rarity), rarity -> this.saveButton.active = true )); } diff --git a/src/main/java/io/ix0rai/rainglow/data/RainglowNetworking.java b/src/main/java/io/ix0rai/rainglow/data/RainglowNetworking.java index 6c972b4..c0b17ae 100644 --- a/src/main/java/io/ix0rai/rainglow/data/RainglowNetworking.java +++ b/src/main/java/io/ix0rai/rainglow/data/RainglowNetworking.java @@ -16,10 +16,10 @@ public class RainglowNetworking { public static void syncConfig(ServerPlayerEntity player) { // note: client does not need to know if server sync is enabled or not // they already know that it is enabled because they are receiving this packet - ServerPlayNetworking.send(player, new ConfigSyncPayload(Rainglow.CONFIG.mode.value(), Rainglow.CONFIG.getCustom(), Rainglow.CONFIG.getToggles())); + ServerPlayNetworking.send(player, new ConfigSyncPayload(Rainglow.CONFIG.mode.value(), Rainglow.CONFIG.getCustom(), Rainglow.CONFIG.getToggles(), Rainglow.CONFIG.getRarities())); } - public record ConfigSyncPayload(String currentMode, List customMode, Map enabledMobs) implements CustomPayload { + public record ConfigSyncPayload(String currentMode, List customMode, Map enabledMobs, Map rarities) implements CustomPayload { public static final CustomPayload.Id PACKET_ID = new CustomPayload.Id<>(Rainglow.id("config_sync")); public static final PacketCodec PACKET_CODEC = PacketCodec.create(ConfigSyncPayload::write, ConfigSyncPayload::read); @@ -27,13 +27,15 @@ public void write(RegistryByteBuf buf) { buf.writeString(this.currentMode); buf.writeCollection(this.customMode, RainglowColour::write); buf.writeMap(this.enabledMobs, RainglowEntity::write, PacketByteBuf::writeBoolean); + buf.writeMap(this.rarities, RainglowEntity::write, PacketByteBuf::writeVarInt); } public static ConfigSyncPayload read(RegistryByteBuf buf) { return new ConfigSyncPayload( buf.readString(), buf.readList(RainglowColour::read), - buf.readMap(RainglowEntity::read, PacketByteBuf::readBoolean) + buf.readMap(RainglowEntity::read, PacketByteBuf::readBoolean), + buf.readMap(RainglowEntity::read, PacketByteBuf::readVarInt) ); }