From 8d7360d797489008ef7a9466496efee9e232da9f Mon Sep 17 00:00:00 2001 From: hax0r31337 Date: Fri, 6 Feb 2026 17:18:44 +0000 Subject: [PATCH 1/4] feat: netease v630 --- .../v630/BedrockCodecHelper_v630_NetEase.java | 63 ++++++++++++ .../extension/v630/Bedrock_v630_NetEase.java | 42 ++++++++ ...layerAuthInputSerializer_v630_NetEase.java | 97 +++++++++++++++++++ .../v630/TextSerializer_v630_NetEase.java | 34 +++++++ 4 files changed, 236 insertions(+) create mode 100644 src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java create mode 100644 src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java create mode 100644 src/main/java/org/allaymc/protocol/extension/v630/PlayerAuthInputSerializer_v630_NetEase.java create mode 100644 src/main/java/org/allaymc/protocol/extension/v630/TextSerializer_v630_NetEase.java diff --git a/src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java new file mode 100644 index 0000000..f76dd6b --- /dev/null +++ b/src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java @@ -0,0 +1,63 @@ +package org.allaymc.protocol.extension.v630; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; +import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; +import org.cloudburstmc.protocol.common.util.TypeMap; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.math.BigInteger; +import java.util.Set; + +/** + * @author daoge_cmd + */ +public class BedrockCodecHelper_v630_NetEase extends BedrockCodecHelper_v575 { + + private static final int PLAYER_AUTH_INPUT_DATA_NETEASE = PlayerAuthInputData.RECEIVED_SERVER_DATA.ordinal() + 1; + + public BedrockCodecHelper_v630_NetEase(EntityDataTypeMap entityData, TypeMap> gameRulesTypes, TypeMap stackRequestActionTypes, TypeMap containerSlotTypes, TypeMap abilities, TypeMap textProcessingEventOrigins) { + super(entityData, gameRulesTypes, stackRequestActionTypes, containerSlotTypes, abilities, textProcessingEventOrigins); + } + + @Override + public > void readLargeVarIntFlags(ByteBuf buffer, Set flags, Class clazz) { + var needNetEaseAdaptation = clazz == PlayerAuthInputData.class; + BigInteger flagsInt = VarInts.readUnsignedBigVarInt(buffer, clazz.getEnumConstants().length); + for (T flag : clazz.getEnumConstants()) { + var ordinal = flag.ordinal(); + if (needNetEaseAdaptation) { + if (ordinal == PLAYER_AUTH_INPUT_DATA_NETEASE) { + // Ignore PlayerAuthInputData.NETEASE + continue; + } + + if (ordinal > PLAYER_AUTH_INPUT_DATA_NETEASE) { + ordinal -= 1; + } + } + if (flagsInt.testBit(ordinal)) { + flags.add(flag); + } + } + } + + @Override + public > void writeLargeVarIntFlags(ByteBuf buffer, Set flags, Class clazz) { + var needNetEaseAdaptation = clazz == PlayerAuthInputData.class; + BigInteger flagsInt = BigInteger.ZERO; + for (T flag : flags) { + var ordinal = flag.ordinal(); + if (needNetEaseAdaptation && ordinal >= PLAYER_AUTH_INPUT_DATA_NETEASE) { + ordinal += 1; + } + flagsInt = flagsInt.setBit(ordinal); + } + VarInts.writeUnsignedBigVarInt(buffer, flagsInt); + } +} diff --git a/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java new file mode 100644 index 0000000..0da1793 --- /dev/null +++ b/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java @@ -0,0 +1,42 @@ +package org.allaymc.protocol.extension.v630; + +import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; +import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; +import org.allaymc.protocol.extension.packet.PyRpcPacket; +import org.allaymc.protocol.extension.packet.StoreBuySuccessPacket; +import org.allaymc.protocol.extension.v766.*; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; +import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerEnchantOptionsPacket; +import org.cloudburstmc.protocol.bedrock.packet.TextPacket; +import org.cloudburstmc.protocol.common.util.TypeMap; + +/** + * NetEase variant of the v766 codec. + * + * @author daoge_cmd + */ +public class Bedrock_v630_NetEase extends Bedrock_v766 { + + protected static final TypeMap CONTAINER_SLOT_TYPES_NETEASE = CONTAINER_SLOT_TYPES + .toBuilder() + // NetEase: RECIPE_CUSTOM + .shift(17, 1) + .build(); + + public static final BedrockCodec CODEC = Bedrock_v630.CODEC.toBuilder() + .raknetProtocolVersion(8) + .helper(() -> new BedrockCodecHelper_v630_NetEase(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v630_NetEase.INSTANCE) + .updateSerializer(TextPacket.class, TextSerializer_v630_NetEase.INSTANCE) + .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v766_NetEase.INSTANCE) + .registerPacket(PyRpcPacket::new, PyRpcSerializer_v766_NetEase.INSTANCE, 200, PacketRecipient.BOTH) + .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer_v766_NetEase.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient + .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer_v766_NetEase.INSTANCE, 203, PacketRecipient.BOTH) + .registerPacket(ConfirmSkinPacket::new, ConfirmSkinSerializer_v766_NetEase.INSTANCE, 228, PacketRecipient.CLIENT) + .build(); +} diff --git a/src/main/java/org/allaymc/protocol/extension/v630/PlayerAuthInputSerializer_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v630/PlayerAuthInputSerializer_v630_NetEase.java new file mode 100644 index 0000000..1c3be63 --- /dev/null +++ b/src/main/java/org/allaymc/protocol/extension/v630/PlayerAuthInputSerializer_v630_NetEase.java @@ -0,0 +1,97 @@ +package org.allaymc.protocol.extension.v630; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector2f; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v575.serializer.PlayerAuthInputSerializer_v575; +import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; +import org.cloudburstmc.protocol.bedrock.data.PlayerBlockActionData; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +/** + * @author daoge_cmd + */ +public class PlayerAuthInputSerializer_v630_NetEase extends PlayerAuthInputSerializer_v575 { + + public static final PlayerAuthInputSerializer_v575 INSTANCE = new PlayerAuthInputSerializer_v630_NetEase(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInputPacket packet) { + Vector3f rotation = packet.getRotation(); + buffer.writeFloatLE(rotation.getX()); + buffer.writeFloatLE(rotation.getY()); + helper.writeVector3f(buffer, packet.getPosition()); + buffer.writeFloatLE(packet.getMotion().getX()); + buffer.writeFloatLE(packet.getMotion().getY()); + buffer.writeFloatLE(rotation.getZ()); + helper.writeLargeVarIntFlags(buffer, packet.getInputData(), PlayerAuthInputData.class); + VarInts.writeUnsignedInt(buffer, packet.getInputMode().ordinal()); + VarInts.writeUnsignedInt(buffer, packet.getPlayMode().ordinal()); + writeInteractionModel(buffer, helper, packet); + helper.writeVector2f(buffer, packet.getInteractRotation()); + VarInts.writeUnsignedLong(buffer, packet.getTick()); + helper.writeVector3f(buffer, packet.getDelta()); + + // NetEase only: cameraDeparted + buffer.writeBoolean(false); + + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_INTERACTION)) { + this.writeItemUseTransaction(buffer, helper, packet.getItemUseTransaction()); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_STACK_REQUEST)) { + helper.writeItemStackRequest(buffer, packet.getItemStackRequest()); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_BLOCK_ACTIONS)) { + VarInts.writeInt(buffer, packet.getPlayerActions().size()); + for (PlayerBlockActionData actionData : packet.getPlayerActions()) { + writePlayerBlockActionData(buffer, helper, actionData); + } + } + if (packet.getInputData().contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { + helper.writeVector2f(buffer, packet.getVehicleRotation()); + VarInts.writeLong(buffer, packet.getPredictedVehicle()); + } + helper.writeVector2f(buffer, packet.getAnalogMoveVector()); +// helper.writeVector3f(buffer, packet.getCameraOrientation()); +// helper.writeVector2f(buffer, packet.getRawMoveVector()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInputPacket packet) { + float x = buffer.readFloatLE(); + float y = buffer.readFloatLE(); + packet.setPosition(helper.readVector3f(buffer)); + packet.setMotion(Vector2f.from(buffer.readFloatLE(), buffer.readFloatLE())); + float z = buffer.readFloatLE(); + packet.setRotation(Vector3f.from(x, y, z)); + helper.readLargeVarIntFlags(buffer, packet.getInputData(), PlayerAuthInputData.class); + packet.setInputMode(INPUT_MODES[VarInts.readUnsignedInt(buffer)]); + packet.setPlayMode(CLIENT_PLAY_MODES[VarInts.readUnsignedInt(buffer)]); + readInteractionModel(buffer, helper, packet); + packet.setInteractRotation(helper.readVector2f(buffer)); + packet.setTick(VarInts.readUnsignedLong(buffer)); + packet.setDelta(helper.readVector3f(buffer)); + + // NetEase only: cameraDeparted + buffer.readBoolean(); + + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_INTERACTION)) { + packet.setItemUseTransaction(this.readItemUseTransaction(buffer, helper)); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_STACK_REQUEST)) { + packet.setItemStackRequest(helper.readItemStackRequest(buffer)); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_BLOCK_ACTIONS)) { + helper.readArray(buffer, packet.getPlayerActions(), VarInts::readInt, this::readPlayerBlockActionData, 32); // 32 is more than enough + } + if (packet.getInputData().contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { + packet.setVehicleRotation(helper.readVector2f(buffer)); + packet.setPredictedVehicle(VarInts.readLong(buffer)); + } + packet.setAnalogMoveVector(helper.readVector2f(buffer)); +// packet.setCameraOrientation(helper.readVector3f(buffer)); +// packet.setRawMoveVector(helper.readVector2f(buffer)); + } +} diff --git a/src/main/java/org/allaymc/protocol/extension/v630/TextSerializer_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v630/TextSerializer_v630_NetEase.java new file mode 100644 index 0000000..730c9e0 --- /dev/null +++ b/src/main/java/org/allaymc/protocol/extension/v630/TextSerializer_v630_NetEase.java @@ -0,0 +1,34 @@ +package org.allaymc.protocol.extension.v630; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v554.serializer.TextSerializer_v554; +import org.cloudburstmc.protocol.bedrock.packet.TextPacket; + +/** + * @author daoge_cmd + */ +public class TextSerializer_v630_NetEase extends TextSerializer_v554 { + + public static final TextSerializer_v554 INSTANCE = new TextSerializer_v630_NetEase(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + super.serialize(buffer, helper, packet); + + var type = packet.getType(); + if (type == TextPacket.Type.CHAT || type == TextPacket.Type.POPUP) { + helper.writeString(buffer, ""); + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + super.deserialize(buffer, helper, packet); + + var type = packet.getType(); + if (type == TextPacket.Type.CHAT || type == TextPacket.Type.POPUP) { + helper.readString(buffer); + } + } +} From 8ba74aa5c99e3324ab802f136cd3f9e18de7f586 Mon Sep 17 00:00:00 2001 From: hax0r31337 Date: Fri, 6 Feb 2026 20:29:39 +0000 Subject: [PATCH 2/4] feat: improve api --- .../ConfirmSkinSerializer.java} | 6 +++--- .../NetEaseJsonSerializer.java} | 6 +++--- .../PyRpcSerializer.java} | 6 +++--- .../StoreBuySuccessSerializer.java} | 6 +++--- .../extension/v630/Bedrock_v630_NetEase.java | 15 +++++++++------ .../extension/v766/Bedrock_v766_NetEase.java | 12 ++++++++---- 6 files changed, 29 insertions(+), 22 deletions(-) rename src/main/java/org/allaymc/protocol/extension/{v766/ConfirmSkinSerializer_v766_NetEase.java => common/ConfirmSkinSerializer.java} (86%) rename src/main/java/org/allaymc/protocol/extension/{v766/NetEaseJsonSerializer_v766_NetEase.java => common/NetEaseJsonSerializer.java} (70%) rename src/main/java/org/allaymc/protocol/extension/{v766/PyRpcSerializer_v766_NetEase.java => common/PyRpcSerializer.java} (73%) rename src/main/java/org/allaymc/protocol/extension/{v766/StoreBuySuccessSerializer_v766_NetEase.java => common/StoreBuySuccessSerializer.java} (66%) diff --git a/src/main/java/org/allaymc/protocol/extension/v766/ConfirmSkinSerializer_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/common/ConfirmSkinSerializer.java similarity index 86% rename from src/main/java/org/allaymc/protocol/extension/v766/ConfirmSkinSerializer_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/common/ConfirmSkinSerializer.java index 224510a..cfb457d 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/ConfirmSkinSerializer_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/common/ConfirmSkinSerializer.java @@ -1,12 +1,12 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.common; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; -public class ConfirmSkinSerializer_v766_NetEase implements BedrockPacketSerializer { - public static final ConfirmSkinSerializer_v766_NetEase INSTANCE = new ConfirmSkinSerializer_v766_NetEase(); +public class ConfirmSkinSerializer implements BedrockPacketSerializer { + public static final ConfirmSkinSerializer INSTANCE = new ConfirmSkinSerializer(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ConfirmSkinPacket packet) { diff --git a/src/main/java/org/allaymc/protocol/extension/v766/NetEaseJsonSerializer_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/common/NetEaseJsonSerializer.java similarity index 70% rename from src/main/java/org/allaymc/protocol/extension/v766/NetEaseJsonSerializer_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/common/NetEaseJsonSerializer.java index e155507..5e21240 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/NetEaseJsonSerializer_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/common/NetEaseJsonSerializer.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.common; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; @@ -8,8 +8,8 @@ /** * @author daoge_cmd */ -public class NetEaseJsonSerializer_v766_NetEase implements BedrockPacketSerializer { - public static final NetEaseJsonSerializer_v766_NetEase INSTANCE = new NetEaseJsonSerializer_v766_NetEase(); +public class NetEaseJsonSerializer implements BedrockPacketSerializer { + public static final NetEaseJsonSerializer INSTANCE = new NetEaseJsonSerializer(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, NetEaseJsonPacket packet) { diff --git a/src/main/java/org/allaymc/protocol/extension/v766/PyRpcSerializer_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/common/PyRpcSerializer.java similarity index 73% rename from src/main/java/org/allaymc/protocol/extension/v766/PyRpcSerializer_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/common/PyRpcSerializer.java index 4565893..010a726 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/PyRpcSerializer_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/common/PyRpcSerializer.java @@ -1,12 +1,12 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.common; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.PyRpcPacket; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; -public class PyRpcSerializer_v766_NetEase implements BedrockPacketSerializer { - public static final PyRpcSerializer_v766_NetEase INSTANCE = new PyRpcSerializer_v766_NetEase(); +public class PyRpcSerializer implements BedrockPacketSerializer { + public static final PyRpcSerializer INSTANCE = new PyRpcSerializer(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PyRpcPacket packet) { diff --git a/src/main/java/org/allaymc/protocol/extension/v766/StoreBuySuccessSerializer_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/common/StoreBuySuccessSerializer.java similarity index 66% rename from src/main/java/org/allaymc/protocol/extension/v766/StoreBuySuccessSerializer_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/common/StoreBuySuccessSerializer.java index 732f2d2..8ca18fd 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/StoreBuySuccessSerializer_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/common/StoreBuySuccessSerializer.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.common; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.StoreBuySuccessPacket; @@ -8,8 +8,8 @@ /** * @author daoge_cmd */ -public class StoreBuySuccessSerializer_v766_NetEase implements BedrockPacketSerializer { - public static final StoreBuySuccessSerializer_v766_NetEase INSTANCE = new StoreBuySuccessSerializer_v766_NetEase(); +public class StoreBuySuccessSerializer implements BedrockPacketSerializer { + public static final StoreBuySuccessSerializer INSTANCE = new StoreBuySuccessSerializer(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, StoreBuySuccessPacket packet) { diff --git a/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java index 0da1793..b7f1dea 100644 --- a/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java @@ -1,5 +1,9 @@ package org.allaymc.protocol.extension.v630; +import org.allaymc.protocol.extension.common.ConfirmSkinSerializer; +import org.allaymc.protocol.extension.common.NetEaseJsonSerializer; +import org.allaymc.protocol.extension.common.PyRpcSerializer; +import org.allaymc.protocol.extension.common.StoreBuySuccessSerializer; import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; import org.allaymc.protocol.extension.packet.PyRpcPacket; @@ -7,7 +11,6 @@ import org.allaymc.protocol.extension.v766.*; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; -import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; @@ -20,7 +23,7 @@ * * @author daoge_cmd */ -public class Bedrock_v630_NetEase extends Bedrock_v766 { +public class Bedrock_v630_NetEase extends Bedrock_v630 { protected static final TypeMap CONTAINER_SLOT_TYPES_NETEASE = CONTAINER_SLOT_TYPES .toBuilder() @@ -34,9 +37,9 @@ public class Bedrock_v630_NetEase extends Bedrock_v766 { .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v630_NetEase.INSTANCE) .updateSerializer(TextPacket.class, TextSerializer_v630_NetEase.INSTANCE) .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v766_NetEase.INSTANCE) - .registerPacket(PyRpcPacket::new, PyRpcSerializer_v766_NetEase.INSTANCE, 200, PacketRecipient.BOTH) - .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer_v766_NetEase.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient - .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer_v766_NetEase.INSTANCE, 203, PacketRecipient.BOTH) - .registerPacket(ConfirmSkinPacket::new, ConfirmSkinSerializer_v766_NetEase.INSTANCE, 228, PacketRecipient.CLIENT) + .registerPacket(PyRpcPacket::new, PyRpcSerializer.INSTANCE, 200, PacketRecipient.BOTH) + .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient + .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer.INSTANCE, 203, PacketRecipient.BOTH) + .registerPacket(ConfirmSkinPacket::new, ConfirmSkinSerializer.INSTANCE, 228, PacketRecipient.CLIENT) .build(); } diff --git a/src/main/java/org/allaymc/protocol/extension/v766/Bedrock_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v766/Bedrock_v766_NetEase.java index 471ee8d..56516f3 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/Bedrock_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/v766/Bedrock_v766_NetEase.java @@ -1,5 +1,9 @@ package org.allaymc.protocol.extension.v766; +import org.allaymc.protocol.extension.common.ConfirmSkinSerializer; +import org.allaymc.protocol.extension.common.NetEaseJsonSerializer; +import org.allaymc.protocol.extension.common.PyRpcSerializer; +import org.allaymc.protocol.extension.common.StoreBuySuccessSerializer; import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; import org.allaymc.protocol.extension.packet.PyRpcPacket; @@ -33,9 +37,9 @@ public class Bedrock_v766_NetEase extends Bedrock_v766 { .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v766_NetEase.INSTANCE) .updateSerializer(TextPacket.class, TextSerializer_v766_NetEase.INSTANCE) .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v766_NetEase.INSTANCE) - .registerPacket(PyRpcPacket::new, PyRpcSerializer_v766_NetEase.INSTANCE, 200, PacketRecipient.BOTH) - .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer_v766_NetEase.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient - .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer_v766_NetEase.INSTANCE, 203, PacketRecipient.BOTH) - .registerPacket(ConfirmSkinPacket::new, ConfirmSkinSerializer_v766_NetEase.INSTANCE, 228, PacketRecipient.CLIENT) + .registerPacket(PyRpcPacket::new, PyRpcSerializer.INSTANCE, 200, PacketRecipient.BOTH) + .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient + .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer.INSTANCE, 203, PacketRecipient.BOTH) + .registerPacket(ConfirmSkinPacket::new, ConfirmSkinSerializer.INSTANCE, 228, PacketRecipient.CLIENT) .build(); } From 3d56b1a0fb5d053abc89d837210e55ac40b47919 Mon Sep 17 00:00:00 2001 From: LT_Name <572413378@qq.com> Date: Sat, 7 Feb 2026 11:08:34 +0800 Subject: [PATCH 3/4] NetEase 686 --- .../extension/v686/Bedrock_v686_NetEase.java | 46 +++++++++++++++++++ .../v686/TextSerializer_v686_NetEase.java | 31 +++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/main/java/org/allaymc/protocol/extension/v686/Bedrock_v686_NetEase.java create mode 100644 src/main/java/org/allaymc/protocol/extension/v686/TextSerializer_v686_NetEase.java diff --git a/src/main/java/org/allaymc/protocol/extension/v686/Bedrock_v686_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v686/Bedrock_v686_NetEase.java new file mode 100644 index 0000000..54a6122 --- /dev/null +++ b/src/main/java/org/allaymc/protocol/extension/v686/Bedrock_v686_NetEase.java @@ -0,0 +1,46 @@ +package org.allaymc.protocol.extension.v686; + +import org.allaymc.protocol.extension.common.ConfirmSkinSerializer; +import org.allaymc.protocol.extension.common.NetEaseJsonSerializer; +import org.allaymc.protocol.extension.common.PyRpcSerializer; +import org.allaymc.protocol.extension.common.StoreBuySuccessSerializer; +import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; +import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; +import org.allaymc.protocol.extension.packet.PyRpcPacket; +import org.allaymc.protocol.extension.packet.StoreBuySuccessPacket; +import org.allaymc.protocol.extension.v630.BedrockCodecHelper_v630_NetEase; +import org.allaymc.protocol.extension.v630.PlayerAuthInputSerializer_v630_NetEase; +import org.allaymc.protocol.extension.v766.PlayerEnchantOptionsSerializer_v766_NetEase; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; +import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerEnchantOptionsPacket; +import org.cloudburstmc.protocol.bedrock.packet.TextPacket; +import org.cloudburstmc.protocol.common.util.TypeMap; + +/** + * NetEase variant of the v686 codec. + */ +public class Bedrock_v686_NetEase extends Bedrock_v686 { + + protected static final TypeMap CONTAINER_SLOT_TYPES = Bedrock_v630.CONTAINER_SLOT_TYPES + .toBuilder() + // NetEase: RECIPE_CUSTOM + .shift(17, 1) + .build(); + + public static final BedrockCodec CODEC = Bedrock_v686.CODEC.toBuilder() + .raknetProtocolVersion(8) + .helper(() -> new BedrockCodecHelper_v630_NetEase(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v630_NetEase.INSTANCE) + .updateSerializer(TextPacket.class, TextSerializer_v686_NetEase.INSTANCE) + .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v766_NetEase.INSTANCE) + .registerPacket(PyRpcPacket::new, PyRpcSerializer.INSTANCE, 200, PacketRecipient.BOTH) + .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient + .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer.INSTANCE, 203, PacketRecipient.BOTH) + .registerPacket(ConfirmSkinPacket::new, ConfirmSkinSerializer.INSTANCE, 228, PacketRecipient.CLIENT) + .build(); +} diff --git a/src/main/java/org/allaymc/protocol/extension/v686/TextSerializer_v686_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v686/TextSerializer_v686_NetEase.java new file mode 100644 index 0000000..c897977 --- /dev/null +++ b/src/main/java/org/allaymc/protocol/extension/v686/TextSerializer_v686_NetEase.java @@ -0,0 +1,31 @@ +package org.allaymc.protocol.extension.v686; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v685.serializer.TextSerializer_v685; +import org.cloudburstmc.protocol.bedrock.packet.TextPacket; + +public class TextSerializer_v686_NetEase extends TextSerializer_v685 { + + public static final TextSerializer_v685 INSTANCE = new TextSerializer_v686_NetEase(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + super.serialize(buffer, helper, packet); + + var type = packet.getType(); + if (type == TextPacket.Type.CHAT || type == TextPacket.Type.POPUP) { + helper.writeString(buffer, ""); + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + super.deserialize(buffer, helper, packet); + + var type = packet.getType(); + if (type == TextPacket.Type.CHAT || type == TextPacket.Type.POPUP) { + helper.readString(buffer); + } + } +} From aa6966749d053edd0acde21a6184c24eb6c3ac3e Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sat, 7 Feb 2026 14:28:43 +0800 Subject: [PATCH 4/4] refactor: reorganize NetEase codec package structure --- README.md | 4 +- .../serializer}/ConfirmSkinSerializer.java | 2 +- .../serializer}/NetEaseJsonSerializer.java | 2 +- ...nchantOptionsSerializer_v407_NetEase.java} | 6 +- .../common/serializer}/PyRpcSerializer.java | 2 +- .../StoreBuySuccessSerializer.java | 2 +- .../v630/Bedrock_v630_NetEase.java | 23 +++-- ...layerAuthInputSerializer_v630_NetEase.java | 16 +--- .../TextSerializer_v630_NetEase.java | 4 +- .../v686/Bedrock_v686_NetEase.java | 28 +++--- ...layerAuthInputSerializer_v686_NetEase.java | 93 +++++++++++++++++++ .../TextSerializer_v686_NetEase.java | 4 +- .../v766/BedrockCodecHelper_v766_NetEase.java | 2 +- .../v766/Bedrock_v766_NetEase.java | 13 ++- ...layerAuthInputSerializer_v766_NetEase.java | 4 +- .../v630/BedrockCodecHelper_v630_NetEase.java | 63 ------------- .../v766/TextSerializer_v766_NetEase.java | 34 ------- 17 files changed, 146 insertions(+), 156 deletions(-) rename src/main/java/org/allaymc/protocol/extension/{common => codec/common/serializer}/ConfirmSkinSerializer.java (96%) rename src/main/java/org/allaymc/protocol/extension/{common => codec/common/serializer}/NetEaseJsonSerializer.java (92%) rename src/main/java/org/allaymc/protocol/extension/{v766/PlayerEnchantOptionsSerializer_v766_NetEase.java => codec/common/serializer/PlayerEnchantOptionsSerializer_v407_NetEase.java} (92%) rename src/main/java/org/allaymc/protocol/extension/{common => codec/common/serializer}/PyRpcSerializer.java (92%) rename src/main/java/org/allaymc/protocol/extension/{common => codec/common/serializer}/StoreBuySuccessSerializer.java (92%) rename src/main/java/org/allaymc/protocol/extension/{ => codec}/v630/Bedrock_v630_NetEase.java (64%) rename src/main/java/org/allaymc/protocol/extension/{v630 => codec/v630/serializer}/PlayerAuthInputSerializer_v630_NetEase.java (81%) rename src/main/java/org/allaymc/protocol/extension/{v630 => codec/v630/serializer}/TextSerializer_v630_NetEase.java (86%) rename src/main/java/org/allaymc/protocol/extension/{ => codec}/v686/Bedrock_v686_NetEase.java (63%) create mode 100644 src/main/java/org/allaymc/protocol/extension/codec/v686/serializer/PlayerAuthInputSerializer_v686_NetEase.java rename src/main/java/org/allaymc/protocol/extension/{v686 => codec/v686/serializer}/TextSerializer_v686_NetEase.java (85%) rename src/main/java/org/allaymc/protocol/extension/{ => codec}/v766/BedrockCodecHelper_v766_NetEase.java (98%) rename src/main/java/org/allaymc/protocol/extension/{ => codec}/v766/Bedrock_v766_NetEase.java (85%) rename src/main/java/org/allaymc/protocol/extension/{v766 => codec/v766/serializer}/PlayerAuthInputSerializer_v766_NetEase.java (96%) delete mode 100644 src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java delete mode 100644 src/main/java/org/allaymc/protocol/extension/v766/TextSerializer_v766_NetEase.java diff --git a/README.md b/README.md index caa7d66..402899a 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ A NetEase (China) Minecraft protocol extension library for [CloudburstMC/Protoco | Protocol Version | Minecraft Version | |------------------|-------------------| +| v630 | 1.20.50 | +| v686 | 1.21.2 | | v766 | 1.21.50 | ## Installation @@ -44,7 +46,7 @@ dependencies { ### Using NetEase Codec ```java -import org.allaymc.protocol.extension.v766.Bedrock_v766_NetEase; +import org.allaymc.protocol.extension.codec.v766.Bedrock_v766_NetEase; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; BedrockCodec codec = Bedrock_v766_NetEase.CODEC; diff --git a/src/main/java/org/allaymc/protocol/extension/common/ConfirmSkinSerializer.java b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/ConfirmSkinSerializer.java similarity index 96% rename from src/main/java/org/allaymc/protocol/extension/common/ConfirmSkinSerializer.java rename to src/main/java/org/allaymc/protocol/extension/codec/common/serializer/ConfirmSkinSerializer.java index cfb457d..de488b2 100644 --- a/src/main/java/org/allaymc/protocol/extension/common/ConfirmSkinSerializer.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/ConfirmSkinSerializer.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.common; +package org.allaymc.protocol.extension.codec.common.serializer; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; diff --git a/src/main/java/org/allaymc/protocol/extension/common/NetEaseJsonSerializer.java b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/NetEaseJsonSerializer.java similarity index 92% rename from src/main/java/org/allaymc/protocol/extension/common/NetEaseJsonSerializer.java rename to src/main/java/org/allaymc/protocol/extension/codec/common/serializer/NetEaseJsonSerializer.java index 5e21240..5995e05 100644 --- a/src/main/java/org/allaymc/protocol/extension/common/NetEaseJsonSerializer.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/NetEaseJsonSerializer.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.common; +package org.allaymc.protocol.extension.codec.common.serializer; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; diff --git a/src/main/java/org/allaymc/protocol/extension/v766/PlayerEnchantOptionsSerializer_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/PlayerEnchantOptionsSerializer_v407_NetEase.java similarity index 92% rename from src/main/java/org/allaymc/protocol/extension/v766/PlayerEnchantOptionsSerializer_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/common/serializer/PlayerEnchantOptionsSerializer_v407_NetEase.java index 8f35d88..961e8f2 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/PlayerEnchantOptionsSerializer_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/PlayerEnchantOptionsSerializer_v407_NetEase.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.codec.common.serializer; import io.netty.buffer.ByteBuf; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -15,9 +15,9 @@ /** * @author daoge_cmd */ -public class PlayerEnchantOptionsSerializer_v766_NetEase extends PlayerEnchantOptionsSerializer_v407 { +public class PlayerEnchantOptionsSerializer_v407_NetEase extends PlayerEnchantOptionsSerializer_v407 { - public static final PlayerEnchantOptionsSerializer_v766_NetEase INSTANCE = new PlayerEnchantOptionsSerializer_v766_NetEase(); + public static final PlayerEnchantOptionsSerializer_v407_NetEase INSTANCE = new PlayerEnchantOptionsSerializer_v407_NetEase(); protected void writeOption(ByteBuf buffer, BedrockCodecHelper helper, EnchantOptionData option) { VarInts.writeUnsignedInt(buffer, option.getCost()); diff --git a/src/main/java/org/allaymc/protocol/extension/common/PyRpcSerializer.java b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/PyRpcSerializer.java similarity index 92% rename from src/main/java/org/allaymc/protocol/extension/common/PyRpcSerializer.java rename to src/main/java/org/allaymc/protocol/extension/codec/common/serializer/PyRpcSerializer.java index 010a726..c22fcee 100644 --- a/src/main/java/org/allaymc/protocol/extension/common/PyRpcSerializer.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/PyRpcSerializer.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.common; +package org.allaymc.protocol.extension.codec.common.serializer; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.PyRpcPacket; diff --git a/src/main/java/org/allaymc/protocol/extension/common/StoreBuySuccessSerializer.java b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/StoreBuySuccessSerializer.java similarity index 92% rename from src/main/java/org/allaymc/protocol/extension/common/StoreBuySuccessSerializer.java rename to src/main/java/org/allaymc/protocol/extension/codec/common/serializer/StoreBuySuccessSerializer.java index 8ca18fd..3656f7a 100644 --- a/src/main/java/org/allaymc/protocol/extension/common/StoreBuySuccessSerializer.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/common/serializer/StoreBuySuccessSerializer.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.common; +package org.allaymc.protocol.extension.codec.common.serializer; import io.netty.buffer.ByteBuf; import org.allaymc.protocol.extension.packet.StoreBuySuccessPacket; diff --git a/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v630/Bedrock_v630_NetEase.java similarity index 64% rename from src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v630/Bedrock_v630_NetEase.java index b7f1dea..29649ce 100644 --- a/src/main/java/org/allaymc/protocol/extension/v630/Bedrock_v630_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v630/Bedrock_v630_NetEase.java @@ -1,15 +1,18 @@ -package org.allaymc.protocol.extension.v630; +package org.allaymc.protocol.extension.codec.v630; -import org.allaymc.protocol.extension.common.ConfirmSkinSerializer; -import org.allaymc.protocol.extension.common.NetEaseJsonSerializer; -import org.allaymc.protocol.extension.common.PyRpcSerializer; -import org.allaymc.protocol.extension.common.StoreBuySuccessSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.ConfirmSkinSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.NetEaseJsonSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.PyRpcSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.StoreBuySuccessSerializer; +import org.allaymc.protocol.extension.codec.v630.serializer.PlayerAuthInputSerializer_v630_NetEase; +import org.allaymc.protocol.extension.codec.v630.serializer.TextSerializer_v630_NetEase; +import org.allaymc.protocol.extension.codec.common.serializer.PlayerEnchantOptionsSerializer_v407_NetEase; import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; import org.allaymc.protocol.extension.packet.PyRpcPacket; import org.allaymc.protocol.extension.packet.StoreBuySuccessPacket; -import org.allaymc.protocol.extension.v766.*; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; @@ -19,13 +22,13 @@ import org.cloudburstmc.protocol.common.util.TypeMap; /** - * NetEase variant of the v766 codec. + * NetEase variant of the v630 codec. * * @author daoge_cmd */ public class Bedrock_v630_NetEase extends Bedrock_v630 { - protected static final TypeMap CONTAINER_SLOT_TYPES_NETEASE = CONTAINER_SLOT_TYPES + protected static final TypeMap CONTAINER_SLOT_TYPES = Bedrock_v630.CONTAINER_SLOT_TYPES .toBuilder() // NetEase: RECIPE_CUSTOM .shift(17, 1) @@ -33,10 +36,10 @@ public class Bedrock_v630_NetEase extends Bedrock_v630 { public static final BedrockCodec CODEC = Bedrock_v630.CODEC.toBuilder() .raknetProtocolVersion(8) - .helper(() -> new BedrockCodecHelper_v630_NetEase(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v630_NetEase.INSTANCE) .updateSerializer(TextPacket.class, TextSerializer_v630_NetEase.INSTANCE) - .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v766_NetEase.INSTANCE) + .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v407_NetEase.INSTANCE) .registerPacket(PyRpcPacket::new, PyRpcSerializer.INSTANCE, 200, PacketRecipient.BOTH) .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer.INSTANCE, 203, PacketRecipient.BOTH) diff --git a/src/main/java/org/allaymc/protocol/extension/v630/PlayerAuthInputSerializer_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v630/serializer/PlayerAuthInputSerializer_v630_NetEase.java similarity index 81% rename from src/main/java/org/allaymc/protocol/extension/v630/PlayerAuthInputSerializer_v630_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v630/serializer/PlayerAuthInputSerializer_v630_NetEase.java index 1c3be63..c27b0de 100644 --- a/src/main/java/org/allaymc/protocol/extension/v630/PlayerAuthInputSerializer_v630_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v630/serializer/PlayerAuthInputSerializer_v630_NetEase.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v630; +package org.allaymc.protocol.extension.codec.v630.serializer; import io.netty.buffer.ByteBuf; import org.cloudburstmc.math.vector.Vector2f; @@ -15,7 +15,7 @@ */ public class PlayerAuthInputSerializer_v630_NetEase extends PlayerAuthInputSerializer_v575 { - public static final PlayerAuthInputSerializer_v575 INSTANCE = new PlayerAuthInputSerializer_v630_NetEase(); + public static final PlayerAuthInputSerializer_v630_NetEase INSTANCE = new PlayerAuthInputSerializer_v630_NetEase(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInputPacket packet) { @@ -49,13 +49,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInput writePlayerBlockActionData(buffer, helper, actionData); } } - if (packet.getInputData().contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { - helper.writeVector2f(buffer, packet.getVehicleRotation()); - VarInts.writeLong(buffer, packet.getPredictedVehicle()); - } helper.writeVector2f(buffer, packet.getAnalogMoveVector()); -// helper.writeVector3f(buffer, packet.getCameraOrientation()); -// helper.writeVector2f(buffer, packet.getRawMoveVector()); } @Override @@ -86,12 +80,6 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInp if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_BLOCK_ACTIONS)) { helper.readArray(buffer, packet.getPlayerActions(), VarInts::readInt, this::readPlayerBlockActionData, 32); // 32 is more than enough } - if (packet.getInputData().contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { - packet.setVehicleRotation(helper.readVector2f(buffer)); - packet.setPredictedVehicle(VarInts.readLong(buffer)); - } packet.setAnalogMoveVector(helper.readVector2f(buffer)); -// packet.setCameraOrientation(helper.readVector3f(buffer)); -// packet.setRawMoveVector(helper.readVector2f(buffer)); } } diff --git a/src/main/java/org/allaymc/protocol/extension/v630/TextSerializer_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v630/serializer/TextSerializer_v630_NetEase.java similarity index 86% rename from src/main/java/org/allaymc/protocol/extension/v630/TextSerializer_v630_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v630/serializer/TextSerializer_v630_NetEase.java index 730c9e0..bd25e0b 100644 --- a/src/main/java/org/allaymc/protocol/extension/v630/TextSerializer_v630_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v630/serializer/TextSerializer_v630_NetEase.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v630; +package org.allaymc.protocol.extension.codec.v630.serializer; import io.netty.buffer.ByteBuf; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; @@ -10,7 +10,7 @@ */ public class TextSerializer_v630_NetEase extends TextSerializer_v554 { - public static final TextSerializer_v554 INSTANCE = new TextSerializer_v630_NetEase(); + public static final TextSerializer_v630_NetEase INSTANCE = new TextSerializer_v630_NetEase(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { diff --git a/src/main/java/org/allaymc/protocol/extension/v686/Bedrock_v686_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v686/Bedrock_v686_NetEase.java similarity index 63% rename from src/main/java/org/allaymc/protocol/extension/v686/Bedrock_v686_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v686/Bedrock_v686_NetEase.java index 54a6122..65b3a1d 100644 --- a/src/main/java/org/allaymc/protocol/extension/v686/Bedrock_v686_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v686/Bedrock_v686_NetEase.java @@ -1,18 +1,18 @@ -package org.allaymc.protocol.extension.v686; +package org.allaymc.protocol.extension.codec.v686; -import org.allaymc.protocol.extension.common.ConfirmSkinSerializer; -import org.allaymc.protocol.extension.common.NetEaseJsonSerializer; -import org.allaymc.protocol.extension.common.PyRpcSerializer; -import org.allaymc.protocol.extension.common.StoreBuySuccessSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.ConfirmSkinSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.NetEaseJsonSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.PyRpcSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.StoreBuySuccessSerializer; +import org.allaymc.protocol.extension.codec.v686.serializer.PlayerAuthInputSerializer_v686_NetEase; +import org.allaymc.protocol.extension.codec.v686.serializer.TextSerializer_v686_NetEase; import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; import org.allaymc.protocol.extension.packet.PyRpcPacket; import org.allaymc.protocol.extension.packet.StoreBuySuccessPacket; -import org.allaymc.protocol.extension.v630.BedrockCodecHelper_v630_NetEase; -import org.allaymc.protocol.extension.v630.PlayerAuthInputSerializer_v630_NetEase; -import org.allaymc.protocol.extension.v766.PlayerEnchantOptionsSerializer_v766_NetEase; +import org.allaymc.protocol.extension.codec.common.serializer.PlayerEnchantOptionsSerializer_v407_NetEase; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; -import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; +import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686; import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; @@ -23,10 +23,12 @@ /** * NetEase variant of the v686 codec. + * + * @author LT_Name */ public class Bedrock_v686_NetEase extends Bedrock_v686 { - protected static final TypeMap CONTAINER_SLOT_TYPES = Bedrock_v630.CONTAINER_SLOT_TYPES + protected static final TypeMap CONTAINER_SLOT_TYPES = Bedrock_v686.CONTAINER_SLOT_TYPES .toBuilder() // NetEase: RECIPE_CUSTOM .shift(17, 1) @@ -34,10 +36,10 @@ public class Bedrock_v686_NetEase extends Bedrock_v686 { public static final BedrockCodec CODEC = Bedrock_v686.CODEC.toBuilder() .raknetProtocolVersion(8) - .helper(() -> new BedrockCodecHelper_v630_NetEase(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) - .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v630_NetEase.INSTANCE) + .helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v686_NetEase.INSTANCE) .updateSerializer(TextPacket.class, TextSerializer_v686_NetEase.INSTANCE) - .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v766_NetEase.INSTANCE) + .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v407_NetEase.INSTANCE) .registerPacket(PyRpcPacket::new, PyRpcSerializer.INSTANCE, 200, PacketRecipient.BOTH) .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer.INSTANCE, 203, PacketRecipient.BOTH) diff --git a/src/main/java/org/allaymc/protocol/extension/codec/v686/serializer/PlayerAuthInputSerializer_v686_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v686/serializer/PlayerAuthInputSerializer_v686_NetEase.java new file mode 100644 index 0000000..9841256 --- /dev/null +++ b/src/main/java/org/allaymc/protocol/extension/codec/v686/serializer/PlayerAuthInputSerializer_v686_NetEase.java @@ -0,0 +1,93 @@ +package org.allaymc.protocol.extension.codec.v686.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector2f; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v575.serializer.PlayerAuthInputSerializer_v575; +import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; +import org.cloudburstmc.protocol.bedrock.data.PlayerBlockActionData; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +/** + * @author daoge_cmd + */ +public class PlayerAuthInputSerializer_v686_NetEase extends PlayerAuthInputSerializer_v575 { + + public static final PlayerAuthInputSerializer_v686_NetEase INSTANCE = new PlayerAuthInputSerializer_v686_NetEase(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInputPacket packet) { + Vector3f rotation = packet.getRotation(); + buffer.writeFloatLE(rotation.getX()); + buffer.writeFloatLE(rotation.getY()); + helper.writeVector3f(buffer, packet.getPosition()); + buffer.writeFloatLE(packet.getMotion().getX()); + buffer.writeFloatLE(packet.getMotion().getY()); + buffer.writeFloatLE(rotation.getZ()); + helper.writeLargeVarIntFlags(buffer, packet.getInputData(), PlayerAuthInputData.class); + VarInts.writeUnsignedInt(buffer, packet.getInputMode().ordinal()); + VarInts.writeUnsignedInt(buffer, packet.getPlayMode().ordinal()); + writeInteractionModel(buffer, helper, packet); + helper.writeVector2f(buffer, packet.getInteractRotation()); + VarInts.writeUnsignedLong(buffer, packet.getTick()); + helper.writeVector3f(buffer, packet.getDelta()); + + // NetEase only: cameraDeparted + buffer.writeBoolean(false); + + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_INTERACTION)) { + this.writeItemUseTransaction(buffer, helper, packet.getItemUseTransaction()); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_STACK_REQUEST)) { + helper.writeItemStackRequest(buffer, packet.getItemStackRequest()); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_BLOCK_ACTIONS)) { + VarInts.writeInt(buffer, packet.getPlayerActions().size()); + for (PlayerBlockActionData actionData : packet.getPlayerActions()) { + writePlayerBlockActionData(buffer, helper, actionData); + } + } + if (packet.getInputData().contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { + helper.writeVector2f(buffer, packet.getVehicleRotation()); + VarInts.writeLong(buffer, packet.getPredictedVehicle()); + } + helper.writeVector2f(buffer, packet.getAnalogMoveVector()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInputPacket packet) { + float x = buffer.readFloatLE(); + float y = buffer.readFloatLE(); + packet.setPosition(helper.readVector3f(buffer)); + packet.setMotion(Vector2f.from(buffer.readFloatLE(), buffer.readFloatLE())); + float z = buffer.readFloatLE(); + packet.setRotation(Vector3f.from(x, y, z)); + helper.readLargeVarIntFlags(buffer, packet.getInputData(), PlayerAuthInputData.class); + packet.setInputMode(INPUT_MODES[VarInts.readUnsignedInt(buffer)]); + packet.setPlayMode(CLIENT_PLAY_MODES[VarInts.readUnsignedInt(buffer)]); + readInteractionModel(buffer, helper, packet); + packet.setInteractRotation(helper.readVector2f(buffer)); + packet.setTick(VarInts.readUnsignedLong(buffer)); + packet.setDelta(helper.readVector3f(buffer)); + + // NetEase only: cameraDeparted + buffer.readBoolean(); + + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_INTERACTION)) { + packet.setItemUseTransaction(this.readItemUseTransaction(buffer, helper)); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_STACK_REQUEST)) { + packet.setItemStackRequest(helper.readItemStackRequest(buffer)); + } + if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_BLOCK_ACTIONS)) { + helper.readArray(buffer, packet.getPlayerActions(), VarInts::readInt, this::readPlayerBlockActionData, 32); // 32 is more than enough + } + if (packet.getInputData().contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { + packet.setVehicleRotation(helper.readVector2f(buffer)); + packet.setPredictedVehicle(VarInts.readLong(buffer)); + } + packet.setAnalogMoveVector(helper.readVector2f(buffer)); + } +} diff --git a/src/main/java/org/allaymc/protocol/extension/v686/TextSerializer_v686_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v686/serializer/TextSerializer_v686_NetEase.java similarity index 85% rename from src/main/java/org/allaymc/protocol/extension/v686/TextSerializer_v686_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v686/serializer/TextSerializer_v686_NetEase.java index c897977..30406b1 100644 --- a/src/main/java/org/allaymc/protocol/extension/v686/TextSerializer_v686_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v686/serializer/TextSerializer_v686_NetEase.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v686; +package org.allaymc.protocol.extension.codec.v686.serializer; import io.netty.buffer.ByteBuf; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; @@ -7,7 +7,7 @@ public class TextSerializer_v686_NetEase extends TextSerializer_v685 { - public static final TextSerializer_v685 INSTANCE = new TextSerializer_v686_NetEase(); + public static final TextSerializer_v686_NetEase INSTANCE = new TextSerializer_v686_NetEase(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { diff --git a/src/main/java/org/allaymc/protocol/extension/v766/BedrockCodecHelper_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v766/BedrockCodecHelper_v766_NetEase.java similarity index 98% rename from src/main/java/org/allaymc/protocol/extension/v766/BedrockCodecHelper_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v766/BedrockCodecHelper_v766_NetEase.java index b9d53ad..02c6ff6 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/BedrockCodecHelper_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v766/BedrockCodecHelper_v766_NetEase.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.codec.v766; import io.netty.buffer.ByteBuf; import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; diff --git a/src/main/java/org/allaymc/protocol/extension/v766/Bedrock_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v766/Bedrock_v766_NetEase.java similarity index 85% rename from src/main/java/org/allaymc/protocol/extension/v766/Bedrock_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v766/Bedrock_v766_NetEase.java index 56516f3..269bb1a 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/Bedrock_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v766/Bedrock_v766_NetEase.java @@ -1,9 +1,8 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.codec.v766; -import org.allaymc.protocol.extension.common.ConfirmSkinSerializer; -import org.allaymc.protocol.extension.common.NetEaseJsonSerializer; -import org.allaymc.protocol.extension.common.PyRpcSerializer; -import org.allaymc.protocol.extension.common.StoreBuySuccessSerializer; +import org.allaymc.protocol.extension.codec.common.serializer.*; +import org.allaymc.protocol.extension.codec.v686.serializer.TextSerializer_v686_NetEase; +import org.allaymc.protocol.extension.codec.v766.serializer.PlayerAuthInputSerializer_v766_NetEase; import org.allaymc.protocol.extension.packet.ConfirmSkinPacket; import org.allaymc.protocol.extension.packet.NetEaseJsonPacket; import org.allaymc.protocol.extension.packet.PyRpcPacket; @@ -35,8 +34,8 @@ public class Bedrock_v766_NetEase extends Bedrock_v766 { .raknetProtocolVersion(8) .helper(() -> new BedrockCodecHelper_v766_NetEase(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v766_NetEase.INSTANCE) - .updateSerializer(TextPacket.class, TextSerializer_v766_NetEase.INSTANCE) - .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v766_NetEase.INSTANCE) + .updateSerializer(TextPacket.class, TextSerializer_v686_NetEase.INSTANCE) + .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v407_NetEase.INSTANCE) .registerPacket(PyRpcPacket::new, PyRpcSerializer.INSTANCE, 200, PacketRecipient.BOTH) .registerPacket(StoreBuySuccessPacket::new, StoreBuySuccessSerializer.INSTANCE, 202, PacketRecipient.BOTH) // TODO: check packet recipient .registerPacket(NetEaseJsonPacket::new, NetEaseJsonSerializer.INSTANCE, 203, PacketRecipient.BOTH) diff --git a/src/main/java/org/allaymc/protocol/extension/v766/PlayerAuthInputSerializer_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/codec/v766/serializer/PlayerAuthInputSerializer_v766_NetEase.java similarity index 96% rename from src/main/java/org/allaymc/protocol/extension/v766/PlayerAuthInputSerializer_v766_NetEase.java rename to src/main/java/org/allaymc/protocol/extension/codec/v766/serializer/PlayerAuthInputSerializer_v766_NetEase.java index 063227e..5c20986 100644 --- a/src/main/java/org/allaymc/protocol/extension/v766/PlayerAuthInputSerializer_v766_NetEase.java +++ b/src/main/java/org/allaymc/protocol/extension/codec/v766/serializer/PlayerAuthInputSerializer_v766_NetEase.java @@ -1,4 +1,4 @@ -package org.allaymc.protocol.extension.v766; +package org.allaymc.protocol.extension.codec.v766.serializer; import io.netty.buffer.ByteBuf; import org.cloudburstmc.math.vector.Vector2f; @@ -15,7 +15,7 @@ */ public class PlayerAuthInputSerializer_v766_NetEase extends PlayerAuthInputSerializer_v766 { - public static final PlayerAuthInputSerializer_v766 INSTANCE = new PlayerAuthInputSerializer_v766_NetEase(); + public static final PlayerAuthInputSerializer_v766_NetEase INSTANCE = new PlayerAuthInputSerializer_v766_NetEase(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInputPacket packet) { diff --git a/src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java deleted file mode 100644 index f76dd6b..0000000 --- a/src/main/java/org/allaymc/protocol/extension/v630/BedrockCodecHelper_v630_NetEase.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.allaymc.protocol.extension.v630; - -import io.netty.buffer.ByteBuf; -import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; -import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; -import org.cloudburstmc.protocol.bedrock.data.Ability; -import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; -import org.cloudburstmc.protocol.common.util.TypeMap; -import org.cloudburstmc.protocol.common.util.VarInts; - -import java.math.BigInteger; -import java.util.Set; - -/** - * @author daoge_cmd - */ -public class BedrockCodecHelper_v630_NetEase extends BedrockCodecHelper_v575 { - - private static final int PLAYER_AUTH_INPUT_DATA_NETEASE = PlayerAuthInputData.RECEIVED_SERVER_DATA.ordinal() + 1; - - public BedrockCodecHelper_v630_NetEase(EntityDataTypeMap entityData, TypeMap> gameRulesTypes, TypeMap stackRequestActionTypes, TypeMap containerSlotTypes, TypeMap abilities, TypeMap textProcessingEventOrigins) { - super(entityData, gameRulesTypes, stackRequestActionTypes, containerSlotTypes, abilities, textProcessingEventOrigins); - } - - @Override - public > void readLargeVarIntFlags(ByteBuf buffer, Set flags, Class clazz) { - var needNetEaseAdaptation = clazz == PlayerAuthInputData.class; - BigInteger flagsInt = VarInts.readUnsignedBigVarInt(buffer, clazz.getEnumConstants().length); - for (T flag : clazz.getEnumConstants()) { - var ordinal = flag.ordinal(); - if (needNetEaseAdaptation) { - if (ordinal == PLAYER_AUTH_INPUT_DATA_NETEASE) { - // Ignore PlayerAuthInputData.NETEASE - continue; - } - - if (ordinal > PLAYER_AUTH_INPUT_DATA_NETEASE) { - ordinal -= 1; - } - } - if (flagsInt.testBit(ordinal)) { - flags.add(flag); - } - } - } - - @Override - public > void writeLargeVarIntFlags(ByteBuf buffer, Set flags, Class clazz) { - var needNetEaseAdaptation = clazz == PlayerAuthInputData.class; - BigInteger flagsInt = BigInteger.ZERO; - for (T flag : flags) { - var ordinal = flag.ordinal(); - if (needNetEaseAdaptation && ordinal >= PLAYER_AUTH_INPUT_DATA_NETEASE) { - ordinal += 1; - } - flagsInt = flagsInt.setBit(ordinal); - } - VarInts.writeUnsignedBigVarInt(buffer, flagsInt); - } -} diff --git a/src/main/java/org/allaymc/protocol/extension/v766/TextSerializer_v766_NetEase.java b/src/main/java/org/allaymc/protocol/extension/v766/TextSerializer_v766_NetEase.java deleted file mode 100644 index a1a909c..0000000 --- a/src/main/java/org/allaymc/protocol/extension/v766/TextSerializer_v766_NetEase.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.allaymc.protocol.extension.v766; - -import io.netty.buffer.ByteBuf; -import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; -import org.cloudburstmc.protocol.bedrock.codec.v685.serializer.TextSerializer_v685; -import org.cloudburstmc.protocol.bedrock.packet.TextPacket; - -/** - * @author daoge_cmd - */ -public class TextSerializer_v766_NetEase extends TextSerializer_v685 { - - public static final TextSerializer_v685 INSTANCE = new TextSerializer_v766_NetEase(); - - @Override - public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { - super.serialize(buffer, helper, packet); - - var type = packet.getType(); - if (type == TextPacket.Type.CHAT || type == TextPacket.Type.POPUP) { - helper.writeString(buffer, ""); - } - } - - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { - super.deserialize(buffer, helper, packet); - - var type = packet.getType(); - if (type == TextPacket.Type.CHAT || type == TextPacket.Type.POPUP) { - helper.readString(buffer); - } - } -}