From 00929dd17a0b31506c3a0866b9d21d3a039f5b6f Mon Sep 17 00:00:00 2001 From: JFronny Date: Thu, 25 Apr 2024 09:53:04 +0200 Subject: [PATCH] chore(config-network): align packet serialization with recommendations in blog post --- .../packet/ConfigurationCompletePacket.java | 14 ++----- .../network/packet/ConfigurationPacket.java | 3 +- .../impl/network/packet/RequestPacket.java | 37 ++++++++++--------- .../impl/network/packet/ResponsePacket.java | 20 ++++------ 4 files changed, 33 insertions(+), 41 deletions(-) diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java index 1e00ba5..c405860 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationCompletePacket.java @@ -4,19 +4,11 @@ import io.gitlab.jfronny.libjf.config.impl.network.RequestRouter; import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.PacketCodec; import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; public record ConfigurationCompletePacket() implements CustomPayload { - public static final CustomPayload.Id ID = CustomPayload.id(RequestRouter.MOD_ID + ":handshake_complete"); - public static final PacketCodec CODEC = new PacketCodec<>() { - @Override - public ConfigurationCompletePacket decode(ByteBuf buf) { - return new ConfigurationCompletePacket(); - } - - @Override - public void encode(ByteBuf buf, ConfigurationCompletePacket value) { - } - }; + public static final CustomPayload.Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "handshake_complete")); + public static final PacketCodec CODEC = PacketCodec.unit(new ConfigurationCompletePacket()); @Override public Id getId() { diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java index 2b22032..9c17bbb 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ConfigurationPacket.java @@ -5,9 +5,10 @@ import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.PacketCodec; import net.minecraft.network.codec.PacketCodecs; import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; public record ConfigurationPacket(int version) implements CustomPayload { - public static final CustomPayload.Id ID = CustomPayload.id(RequestRouter.MOD_ID + ":handshake"); + public static final CustomPayload.Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "handshake")); public static final PacketCodec CODEC = PacketCodecs.INTEGER.xmap(ConfigurationPacket::new, ConfigurationPacket::version); @Override diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java index 50ecbb8..0dcffb3 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/RequestPacket.java @@ -4,27 +4,30 @@ import io.gitlab.jfronny.libjf.config.impl.network.RequestRouter; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; 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.jetbrains.annotations.Nullable; +import java.util.Optional; +import java.util.function.Function; + public record RequestPacket(long request, @Nullable Long parent, String name, PacketByteBuf aux) implements CustomPayload { - public static final Id ID = CustomPayload.id(RequestRouter.MOD_ID + ":request"); - public static final PacketCodec CODEC = PacketCodec.of( - (value, buf) -> { - buf.writeLong(value.request); - buf.writeBoolean(value.parent != null); - if (value.parent != null) buf.writeLong(value.parent); - buf.writeString(value.name); - buf.writeBytes(value.aux); - }, - buf -> { - long request = buf.readLong(); - Long parent = buf.readBoolean() ? buf.readLong() : null; - String name = buf.readString(); - PacketByteBuf aux = PacketByteBufs.copy(buf); - return new RequestPacket(request, parent, name, aux); - } - ); + public static final Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "request")); + public static final PacketCodec CODEC = PacketCodec.tuple( + PacketCodecs.VAR_LONG, RequestPacket::request, + PacketCodecs.optional(PacketCodecs.VAR_LONG), RequestPacket::optionalParent, + PacketCodecs.STRING, RequestPacket::name, + PacketCodec.of(PacketByteBuf::writeBytes, PacketByteBufs::copy), RequestPacket::aux, + RequestPacket::new); + + private RequestPacket(long request, Optional parent, String name, PacketByteBuf aux) { + this(request, parent.orElse(null), name, aux); + } + + private Optional optionalParent() { + return Optional.ofNullable(parent); + } @Override public Id getId() { diff --git a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java index 5d88123..433b3c9 100644 --- a/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java +++ b/libjf-config-network-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/network/packet/ResponsePacket.java @@ -4,21 +4,17 @@ import io.gitlab.jfronny.libjf.config.impl.network.RequestRouter; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; 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; public record ResponsePacket(long request, int status, PacketByteBuf aux) implements CustomPayload { - public static final CustomPayload.Id ID = CustomPayload.id(RequestRouter.MOD_ID + ":response"); - public static final PacketCodec CODEC = PacketCodec.of( - (value, buf) -> { - buf.writeLong(value.request()); - buf.writeInt(value.status()); - buf.writeBytes(value.aux()); - }, - buf -> { - long request = buf.readLong(); - int status = buf.readInt(); - return new ResponsePacket(request, status, PacketByteBufs.copy(buf)); - } + public static final CustomPayload.Id ID = new CustomPayload.Id<>(new Identifier(RequestRouter.MOD_ID, "response")); + public static final PacketCodec CODEC = PacketCodec.tuple( + PacketCodecs.VAR_LONG, ResponsePacket::request, + PacketCodecs.INTEGER, ResponsePacket::status, + PacketCodec.of(PacketByteBuf::writeBytes, PacketByteBufs::copy), ResponsePacket::aux, + ResponsePacket::new ); @Override