diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 21685624a..8233043b3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -1891,9 +1891,9 @@ public class PacketConsumers { if (discardedPayload == null || !discardedPayload.channel().equals(NetworkManager.MOD_CHANNEL_KEY)) return; FriendlyByteBuf buf = discardedPayload.toBuffer(); - NetWorkDataTypes dataType = NetWorkDataTypes.readType(buf); + NetWorkDataTypes dataType = buf.readEnumConstant(NetWorkDataTypes.class); if (dataType == NetWorkDataTypes.CLIENT_CUSTOM_BLOCK) { - int clientBlockRegistrySize = dataType.as(Integer.class).decode(buf); + int clientBlockRegistrySize = dataType.decode(buf); int serverBlockRegistrySize = RegistryUtils.currentBlockRegistrySize(); if (clientBlockRegistrySize != serverBlockRegistrySize) { user.kick(Component.translatable( @@ -1906,10 +1906,10 @@ public class PacketConsumers { user.setClientModState(true); } else if (dataType == NetWorkDataTypes.CANCEL_BLOCK_UPDATE) { if (!VersionHelper.isOrAbove1_20_2()) return; - if (dataType.as(Boolean.class).decode(buf)) { + if (dataType.decode(buf)) { FriendlyByteBuf bufPayload = new FriendlyByteBuf(Unpooled.buffer()); - dataType.writeType(bufPayload); - dataType.as(Boolean.class).encode(bufPayload, true); + bufPayload.writeEnumConstant(dataType); + dataType.encode(bufPayload, true); user.sendCustomPayload(NetworkManager.MOD_CHANNEL_KEY, bufPayload.array()); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/NetWorkDataTypes.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/NetWorkDataTypes.java index 5655e1028..37da1618d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/NetWorkDataTypes.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/payload/NetWorkDataTypes.java @@ -1,64 +1,28 @@ package net.momirealms.craftengine.bukkit.plugin.network.payload; +import io.netty.buffer.ByteBuf; -import net.momirealms.craftengine.core.util.FriendlyByteBuf; +public enum NetWorkDataTypes { + CLIENT_CUSTOM_BLOCK(NetWorkCodecs.INTEGER), + CANCEL_BLOCK_UPDATE(NetWorkCodecs.BOOLEAN); -import java.util.HashMap; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Function; + private final NetWorkCodec codec; -public class NetWorkDataTypes { - private static final Map> id2NetWorkDataTypes = new HashMap<>(); - - public static final NetWorkDataTypes CLIENT_CUSTOM_BLOCK = - new NetWorkDataTypes<>(0, FriendlyByteBuf::readInt, FriendlyByteBuf::writeInt); - - public static final NetWorkDataTypes CANCEL_BLOCK_UPDATE = - new NetWorkDataTypes<>(1, FriendlyByteBuf::readBoolean, FriendlyByteBuf::writeBoolean); - - static { - register(CLIENT_CUSTOM_BLOCK); - register(CANCEL_BLOCK_UPDATE); + NetWorkDataTypes(NetWorkCodec codec) { + this.codec = codec; } - private static void register(NetWorkDataTypes type) { - id2NetWorkDataTypes.put(type.id, type); + public NetWorkCodec codec() { + return codec; } - private final int id; - private final Function decoder; - private final BiConsumer encoder; - - public NetWorkDataTypes(int id, Function decoder, BiConsumer encoder) { - this.id = id; - this.decoder = decoder; - this.encoder = encoder; + @SuppressWarnings("unchecked") + public V decode(ByteBuf buf) { + return (V) codec.decode(buf); } - public T decode(FriendlyByteBuf buf) { - return decoder.apply(buf); - } - - public void encode(FriendlyByteBuf buf, T data) { - encoder.accept(buf, data); - } - - public int id() { - return id; - } - - public void writeType(FriendlyByteBuf buf) { - buf.writeVarInt(id); - } - - public static NetWorkDataTypes readType(FriendlyByteBuf buf) { - int id = buf.readVarInt(); - return id2NetWorkDataTypes.get(id); - } - - @SuppressWarnings({"unchecked", "unused"}) - public NetWorkDataTypes as(Class clazz) { - return (NetWorkDataTypes) this; + @SuppressWarnings("unchecked") + public void encode(ByteBuf buf, V value) { + ((NetWorkCodec) codec).encode(buf, value); } } \ No newline at end of file