From 08824ba04548cc1e4e72928d0adc8c32e46f645e Mon Sep 17 00:00:00 2001 From: frqnny <45723631+frqnny@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:15:07 -0400 Subject: [PATCH] 1.20.6 update --- gradle.properties | 8 +- .../java/draylar/omegaconfig/OmegaConfig.java | 81 ++++++++++--------- .../omegaconfig/mixin/ClientMixin.java | 7 +- 3 files changed, 51 insertions(+), 45 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5bed807..0b8d8c9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,15 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/versions.html -minecraft_version=1.20.1 -yarn_mappings=1.20.1+build.10 +minecraft_version=1.20.6 +yarn_mappings=1.20.6+build.3 loader_version=0.15.11 # Fabric API -fabric_version=0.92.2+1.20.1 +fabric_version=0.100.2+1.20.6 # Mod Properties -mod_version=1.4.1 +mod_version=1.4.2 maven_group=dev.draylar archives_base_name=omega-config modmenu_version=7.1.0 \ No newline at end of file diff --git a/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java b/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java index ea7fa8b..f120dac 100644 --- a/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java +++ b/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java @@ -5,14 +5,16 @@ import com.google.gson.GsonBuilder; import draylar.omegaconfig.api.Comment; import draylar.omegaconfig.api.Config; import draylar.omegaconfig.gson.SyncableExclusionStrategy; -import io.netty.buffer.Unpooled; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; -import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtList; import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; import net.minecraft.util.Identifier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -24,45 +26,15 @@ import java.lang.reflect.InvocationTargetException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; public class OmegaConfig implements ModInitializer { public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); - public static final Identifier CONFIG_SYNC_PACKET = new Identifier("omegaconfig", "sync"); public static final Gson SYNC_ONLY_GSON = new GsonBuilder().addSerializationExclusionStrategy(new SyncableExclusionStrategy()).setPrettyPrinting().create(); public static final Logger LOGGER = LogManager.getLogger(); private static final List REGISTERED_CONFIGURATIONS = new ArrayList<>(); - @Override - public void onInitialize() { - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> server.execute(() -> { - PacketByteBuf packet = new PacketByteBuf(Unpooled.buffer()); - - // list of configurations that are synced - NbtCompound root = new NbtCompound(); - NbtList configurations = new NbtList(); - - // Iterate over each configuration. - // Find values that should be synced and send the value over. - OmegaConfig.getRegisteredConfigurations().forEach(config -> { - if (config.hasAnySyncable()) { - configurations.add(config.writeSyncingTag()); - } - }); - - // save to packet and send to user - root.put("Configurations", configurations); - packet.writeNbt(root); - handler.sendPacket(ServerPlayNetworking.createS2CPacket(CONFIG_SYNC_PACKET, packet)); - })); - } - public static T register(Class configClass) { try { // Attempt to instantiate a new instance of this class. @@ -96,7 +68,8 @@ public class OmegaConfig implements ModInitializer { } return config; - } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException exception) { + } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | + InvocationTargetException exception) { exception.printStackTrace(); throw new RuntimeException("No valid constructor found for: " + configClass.getName()); } @@ -179,10 +152,8 @@ public class OmegaConfig implements ModInitializer { Class[] classes = aClass.getDeclaredClasses(); - if (classes.length != 0) { - for (Class clazz : classes) { - populateRecursively(list, clazz); - } + for (Class clazz : classes) { + populateRecursively(list, clazz); } } @@ -241,4 +212,38 @@ public class OmegaConfig implements ModInitializer { public static List getRegisteredConfigurations() { return REGISTERED_CONFIGURATIONS; } + + @Override + public void onInitialize() { + PayloadTypeRegistry.playS2C().register(OmegaConfig.SyncConfigPayload.ID, OmegaConfig.SyncConfigPayload.CODEC); + + ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> server.execute(() -> { + // list of configurations that are synced + NbtCompound root = new NbtCompound(); + NbtList configurations = new NbtList(); + + // Iterate over each configuration. + // Find values that should be synced and send the value over. + OmegaConfig.getRegisteredConfigurations().forEach(config -> { + if (config.hasAnySyncable()) { + configurations.add(config.writeSyncingTag()); + } + }); + + // save to packet and send to user + root.put("Configurations", configurations); + sender.sendPacket(new SyncConfigPayload(root)); + })); + } + + public record SyncConfigPayload(NbtCompound nbtCompound) implements CustomPayload { + public static final Identifier CONFIG_SYNC_PACKET = new Identifier("omegaconfig", "sync"); + public static final CustomPayload.Id ID = new Id<>(CONFIG_SYNC_PACKET); + public static final PacketCodec CODEC = PacketCodecs.NBT_COMPOUND.xmap(SyncConfigPayload::new, SyncConfigPayload::nbtCompound).cast(); + + @Override + public Id getId() { + return ID; + } + } } diff --git a/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java b/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java index 7ec6f13..e12673a 100644 --- a/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java +++ b/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java @@ -30,11 +30,12 @@ public class ClientMixin { method = "", at = @At("RETURN")) private void onReturn(RunArgs args, CallbackInfo ci) { - ClientPlayNetworking.registerGlobalReceiver(OmegaConfig.CONFIG_SYNC_PACKET, (client, handler, buf, responseSender) -> { - NbtCompound tag = buf.readNbt(); + ClientPlayNetworking.registerGlobalReceiver(OmegaConfig.SyncConfigPayload.ID, (payload, context) -> { + + NbtCompound tag = payload.nbtCompound(); savedClientConfig.clear(); - client.execute(() -> { + context.client().execute(() -> { if (tag != null && tag.contains("Configurations")) { NbtList list = tag.getList("Configurations", NbtType.COMPOUND); list.forEach(compound -> {