From cb02064e14525dc992de5865fe3f8f7b31f03fbb Mon Sep 17 00:00:00 2001 From: Alemiz Date: Sun, 7 Apr 2024 18:08:43 +0200 Subject: [PATCH 01/18] Bump to 3.0.0.Beta2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f7ca3cd11..e87ac8276 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=3.0.0.Beta1-SNAPSHOT \ No newline at end of file +version=3.0.0.Beta2-SNAPSHOT \ No newline at end of file From 241d225a1fa2f6570734e9d28b8073f73363325d Mon Sep 17 00:00:00 2001 From: Alemiz Date: Sun, 7 Apr 2024 18:25:28 +0200 Subject: [PATCH 02/18] Use latest RakNet --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1f1eaab45..b070a38a5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ fastutil-int-object-maps = { group = "org.cloudburstmc.fastutil.maps", name = "i fastutil-object-int-maps = { group = "org.cloudburstmc.fastutil.maps", name = "object-int-maps", version.ref = "fastutil" } netty-buffer = { group = "io.netty", name = "netty-buffer", version.ref = "netty" } -netty-transport-raknet = { group = "org.cloudburstmc.netty", name = "netty-transport-raknet", version = "1.0.0.CR1-SNAPSHOT" } +netty-transport-raknet = { group = "org.cloudburstmc.netty", name = "netty-transport-raknet", version = "1.0.0.CR2-SNAPSHOT" } jose4j = { group = "org.bitbucket.b_c", name = "jose4j", version = "0.9.3" } natives = { group = "com.nukkitx", name = "natives", version = "1.0.3" } From 1acd7bddbba9a743f50c62ef2b404805541e2b79 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Sun, 7 Apr 2024 18:30:06 +0200 Subject: [PATCH 03/18] Respect PacketDirection when decoding packets --- .../protocol/bedrock/codec/BedrockCodec.java | 19 +- .../codec/BedrockPacketDefinition.java | 2 + .../bedrock/codec/compat/BedrockCompat.java | 9 +- .../bedrock/codec/v291/Bedrock_v291.java | 237 +++++++++--------- .../bedrock/codec/v313/Bedrock_v313.java | 15 +- .../bedrock/codec/v332/Bedrock_v332.java | 3 +- .../bedrock/codec/v340/Bedrock_v340.java | 5 +- .../bedrock/codec/v354/Bedrock_v354.java | 5 +- .../bedrock/codec/v361/Bedrock_v361.java | 23 +- .../bedrock/codec/v388/Bedrock_v388.java | 23 +- .../bedrock/codec/v407/Bedrock_v407.java | 29 +-- .../bedrock/codec/v419/Bedrock_v419.java | 13 +- .../bedrock/codec/v422/Bedrock_v422.java | 3 +- .../bedrock/codec/v428/Bedrock_v428.java | 3 +- .../bedrock/codec/v440/Bedrock_v440.java | 7 +- .../bedrock/codec/v448/Bedrock_v448.java | 5 +- .../bedrock/codec/v465/Bedrock_v465.java | 11 +- .../bedrock/codec/v471/Bedrock_v471.java | 11 +- .../bedrock/codec/v486/Bedrock_v486.java | 7 +- .../bedrock/codec/v503/Bedrock_v503.java | 9 +- .../bedrock/codec/v527/Bedrock_v527.java | 13 +- .../bedrock/codec/v534/Bedrock_v534.java | 9 +- .../bedrock/codec/v544/Bedrock_v544.java | 3 +- .../bedrock/codec/v554/Bedrock_v554.java | 9 +- .../bedrock/codec/v560/Bedrock_v560.java | 3 +- .../bedrock/codec/v567/Bedrock_v567.java | 3 +- .../bedrock/codec/v575/Bedrock_v575.java | 11 +- .../bedrock/codec/v582/Bedrock_v582.java | 7 +- .../bedrock/codec/v594/Bedrock_v594.java | 3 +- .../bedrock/codec/v618/Bedrock_v618.java | 3 +- .../bedrock/codec/v630/Bedrock_v630.java | 9 +- .../bedrock/codec/v649/Bedrock_v649.java | 7 +- .../bedrock/data/PacketRecipient.java | 19 ++ .../protocol/bedrock/PacketDirection.java | 27 ++ .../codec/packet/BedrockPacketCodec.java | 19 +- .../initializer/BedrockClientInitializer.java | 8 + .../initializer/BedrockServerInitializer.java | 8 + 37 files changed, 336 insertions(+), 264 deletions(-) create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PacketRecipient.java create mode 100644 bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/PacketDirection.java diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java index 1cc71a7c3..5a54d97ae 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java @@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor; import org.checkerframework.checker.index.qual.NonNegative; import org.checkerframework.checker.nullness.qual.NonNull; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.cloudburstmc.protocol.bedrock.packet.UnknownPacket; @@ -38,9 +39,19 @@ public static Builder builder() { return new Builder(); } - @SuppressWarnings({"unchecked", "rawtypes"}) public BedrockPacket tryDecode(BedrockCodecHelper helper, ByteBuf buf, int id) throws PacketSerializeException { + return tryDecode(helper, buf, id, null); + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + public BedrockPacket tryDecode(BedrockCodecHelper helper, ByteBuf buf, int id, PacketRecipient recipient) throws PacketSerializeException { BedrockPacketDefinition definition = getPacketDefinition(id); + + if (definition != null && recipient != null && definition.getRecipient() != PacketRecipient.BOTH && + definition.getRecipient() != recipient) { + throw new IllegalArgumentException("Packet " + definition.getFactory().get().getClass().getSimpleName() + " can not be sent by " + recipient); + } + BedrockPacket packet; BedrockPacketSerializer serializer; if (definition == null) { @@ -119,13 +130,13 @@ public static class Builder { private String minecraftVersion = null; private Supplier helperFactory; - public Builder registerPacket(Supplier factory, BedrockPacketSerializer serializer, @NonNegative int id) { + public Builder registerPacket(Supplier factory, BedrockPacketSerializer serializer, @NonNegative int id, PacketRecipient recipient) { Class packetClass = factory.get().getClass(); checkArgument(id >= 0, "id cannot be negative"); checkArgument(!packets.containsKey(packetClass), "Packet class already registered"); - BedrockPacketDefinition info = new BedrockPacketDefinition<>(id, factory, serializer); + BedrockPacketDefinition info = new BedrockPacketDefinition<>(id, factory, serializer, recipient); packets.put(packetClass, info); @@ -135,7 +146,7 @@ public Builder registerPacket(Supplier factory, Bed public Builder updateSerializer(Class packetClass, BedrockPacketSerializer serializer) { BedrockPacketDefinition info = (BedrockPacketDefinition) packets.get(packetClass); checkArgument(info != null, "Packet does not exist"); - BedrockPacketDefinition updatedInfo = new BedrockPacketDefinition<>(info.getId(), info.getFactory(), serializer); + BedrockPacketDefinition updatedInfo = new BedrockPacketDefinition<>(info.getId(), info.getFactory(), serializer, info.getRecipient()); packets.replace(packetClass, info, updatedInfo); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockPacketDefinition.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockPacketDefinition.java index c1db24c23..68c9389eb 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockPacketDefinition.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockPacketDefinition.java @@ -1,6 +1,7 @@ package org.cloudburstmc.protocol.bedrock.codec; import lombok.Value; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import java.util.function.Supplier; @@ -10,4 +11,5 @@ public class BedrockPacketDefinition { int id; Supplier factory; BedrockPacketSerializer serializer; + PacketRecipient recipient; } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/BedrockCompat.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/BedrockCompat.java index 9bfc73884..aac0a9b60 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/BedrockCompat.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/BedrockCompat.java @@ -5,6 +5,7 @@ import org.cloudburstmc.protocol.bedrock.codec.compat.serializer.LoginSerializerCompat; import org.cloudburstmc.protocol.bedrock.codec.compat.serializer.PlayStatusSerializerCompat; import org.cloudburstmc.protocol.bedrock.codec.compat.serializer.RequestNetworkSettingsSerializerCompat; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.packet.DisconnectPacket; import org.cloudburstmc.protocol.bedrock.packet.LoginPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; @@ -16,10 +17,10 @@ public class BedrockCompat { */ public static BedrockCodec CODEC = BedrockCodec.builder() .helper(() -> NoopBedrockCodecHelper.INSTANCE) - .registerPacket(LoginPacket::new, LoginSerializerCompat.INSTANCE, 1) - .registerPacket(PlayStatusPacket::new, PlayStatusSerializerCompat.INSTANCE, 2) - .registerPacket(DisconnectPacket::new, new DisconnectSerializerCompat(true), 5) - .registerPacket(RequestNetworkSettingsPacket::new, RequestNetworkSettingsSerializerCompat.INSTANCE, 193) + .registerPacket(LoginPacket::new, LoginSerializerCompat.INSTANCE, 1, PacketRecipient.SERVER) + .registerPacket(PlayStatusPacket::new, PlayStatusSerializerCompat.INSTANCE, 2, PacketRecipient.CLIENT) + .registerPacket(DisconnectPacket::new, new DisconnectSerializerCompat(true), 5, PacketRecipient.BOTH) + .registerPacket(RequestNetworkSettingsPacket::new, RequestNetworkSettingsSerializerCompat.INSTANCE, 193, PacketRecipient.SERVER) .protocolVersion(0) .minecraftVersion("0.0.0") .build(); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java index 35a7aa3db..dd4a51245 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java @@ -5,10 +5,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -635,121 +632,121 @@ public class Bedrock_v291 { .protocolVersion(291) .minecraftVersion("1.7.0") .helper(() -> new BedrockCodecHelper_v291(ENTITY_DATA, GAME_RULE_TYPES)) - .registerPacket(LoginPacket::new, LoginSerializer_v291.INSTANCE, 1) - .registerPacket(PlayStatusPacket::new, PlayStatusSerializer_v291.INSTANCE, 2) - .registerPacket(ServerToClientHandshakePacket::new, ServerToClientHandshakeSerializer_v291.INSTANCE, 3) - .registerPacket(ClientToServerHandshakePacket::new, ClientToServerHandshakeSerializer_v291.INSTANCE, 4) - .registerPacket(DisconnectPacket::new, DisconnectSerializer_v291.INSTANCE, 5) - .registerPacket(ResourcePacksInfoPacket::new, ResourcePacksInfoSerializer_v291.INSTANCE, 6) - .registerPacket(ResourcePackStackPacket::new, ResourcePackStackSerializer_v291.INSTANCE, 7) - .registerPacket(ResourcePackClientResponsePacket::new, ResourcePackClientResponseSerializer_v291.INSTANCE, 8) - .registerPacket(TextPacket::new, TextSerializer_v291.INSTANCE, 9) - .registerPacket(SetTimePacket::new, SetTimeSerializer_v291.INSTANCE, 10) - .registerPacket(StartGamePacket::new, StartGameSerializer_v291.INSTANCE, 11) - .registerPacket(AddPlayerPacket::new, AddPlayerSerializer_v291.INSTANCE, 12) - .registerPacket(AddEntityPacket::new, AddEntitySerializer_v291.INSTANCE, 13) - .registerPacket(RemoveEntityPacket::new, RemoveEntitySerializer_v291.INSTANCE, 14) - .registerPacket(AddItemEntityPacket::new, AddItemEntitySerializer_v291.INSTANCE, 15) - .registerPacket(AddHangingEntityPacket::new, AddHangingEntitySerializer_v291.INSTANCE, 16) - .registerPacket(TakeItemEntityPacket::new, TakeItemEntitySerializer_v291.INSTANCE, 17) - .registerPacket(MoveEntityAbsolutePacket::new, MoveEntityAbsoluteSerializer_v291.INSTANCE, 18) - .registerPacket(MovePlayerPacket::new, MovePlayerSerializer_v291.INSTANCE, 19) - .registerPacket(RiderJumpPacket::new, RiderJumpSerializer_v291.INSTANCE, 20) - .registerPacket(UpdateBlockPacket::new, UpdateBlockSerializer_v291.INSTANCE, 21) - .registerPacket(AddPaintingPacket::new, AddPaintingSerializer_v291.INSTANCE, 22) - .registerPacket(ExplodePacket::new, ExplodeSerializer_v291.INSTANCE, 23) - .registerPacket(LevelSoundEvent1Packet::new, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS), 24) - .registerPacket(LevelEventPacket::new, new LevelEventSerializer_v291(LEVEL_EVENTS), 25) - .registerPacket(BlockEventPacket::new, BlockEventSerializer_v291.INSTANCE, 26) - .registerPacket(EntityEventPacket::new, new EntityEventSerializer_v291(ENTITY_EVENTS), 27) - .registerPacket(MobEffectPacket::new, MobEffectSerializer_v291.INSTANCE, 28) - .registerPacket(UpdateAttributesPacket::new, UpdateAttributesSerializer_v291.INSTANCE, 29) - .registerPacket(InventoryTransactionPacket::new, InventoryTransactionSerializer_v291.INSTANCE, 30) - .registerPacket(MobEquipmentPacket::new, MobEquipmentSerializer_v291.INSTANCE, 31) - .registerPacket(MobArmorEquipmentPacket::new, MobArmorEquipmentSerializer_v291.INSTANCE, 32) - .registerPacket(InteractPacket::new, InteractSerializer_v291.INSTANCE, 33) - .registerPacket(BlockPickRequestPacket::new, BlockPickRequestSerializer_v291.INSTANCE, 34) - .registerPacket(EntityPickRequestPacket::new, EntityPickRequestSerializer_v291.INSTANCE, 35) - .registerPacket(PlayerActionPacket::new, PlayerActionSerializer_v291.INSTANCE, 36) - .registerPacket(EntityFallPacket::new, EntityFallSerializer_v291.INSTANCE, 37) - .registerPacket(HurtArmorPacket::new, HurtArmorSerializer_v291.INSTANCE, 38) - .registerPacket(SetEntityDataPacket::new, SetEntityDataSerializer_v291.INSTANCE, 39) - .registerPacket(SetEntityMotionPacket::new, SetEntityMotionSerializer_v291.INSTANCE, 40) - .registerPacket(SetEntityLinkPacket::new, SetEntityLinkSerializer_v291.INSTANCE, 41) - .registerPacket(SetHealthPacket::new, SetHealthSerializer_v291.INSTANCE, 42) - .registerPacket(SetSpawnPositionPacket::new, SetSpawnPositionSerializer_v291.INSTANCE, 43) - .registerPacket(AnimatePacket::new, AnimateSerializer_v291.INSTANCE, 44) - .registerPacket(RespawnPacket::new, RespawnSerializer_v291.INSTANCE, 45) - .registerPacket(ContainerOpenPacket::new, ContainerOpenSerializer_v291.INSTANCE, 46) - .registerPacket(ContainerClosePacket::new, ContainerCloseSerializer_v291.INSTANCE, 47) - .registerPacket(PlayerHotbarPacket::new, PlayerHotbarSerializer_v291.INSTANCE, 48) - .registerPacket(InventoryContentPacket::new, InventoryContentSerializer_v291.INSTANCE, 49) - .registerPacket(InventorySlotPacket::new, InventorySlotSerializer_v291.INSTANCE, 50) - .registerPacket(ContainerSetDataPacket::new, ContainerSetDataSerializer_v291.INSTANCE, 51) - .registerPacket(CraftingDataPacket::new, CraftingDataSerializer_v291.INSTANCE, 52) - .registerPacket(CraftingEventPacket::new, CraftingEventSerializer_v291.INSTANCE, 53) - .registerPacket(GuiDataPickItemPacket::new, GuiDataPickItemSerializer_v291.INSTANCE, 54) - .registerPacket(AdventureSettingsPacket::new, AdventureSettingsSerializer_v291.INSTANCE, 55) - .registerPacket(BlockEntityDataPacket::new, BlockEntityDataSerializer_v291.INSTANCE, 56) - .registerPacket(PlayerInputPacket::new, PlayerInputSerializer_v291.INSTANCE, 57) - .registerPacket(LevelChunkPacket::new, FullChunkDataSerializer_v291.INSTANCE, 58) - .registerPacket(SetCommandsEnabledPacket::new, SetCommandsEnabledSerializer_v291.INSTANCE, 59) - .registerPacket(SetDifficultyPacket::new, SetDifficultySerializer_v291.INSTANCE, 60) - .registerPacket(ChangeDimensionPacket::new, ChangeDimensionSerializer_v291.INSTANCE, 61) - .registerPacket(SetPlayerGameTypePacket::new, SetPlayerGameTypeSerializer_v291.INSTANCE, 62) - .registerPacket(PlayerListPacket::new, PlayerListSerializer_v291.INSTANCE, 63) - .registerPacket(SimpleEventPacket::new, SimpleEventSerializer_v291.INSTANCE, 64) - .registerPacket(EventPacket::new, EventSerializer_v291.INSTANCE, 65) - .registerPacket(SpawnExperienceOrbPacket::new, SpawnExperienceOrbSerializer_v291.INSTANCE, 66) - .registerPacket(ClientboundMapItemDataPacket::new, ClientboundMapItemDataSerializer_v291.INSTANCE, 67) - .registerPacket(MapInfoRequestPacket::new, MapInfoRequestSerializer_v291.INSTANCE, 68) - .registerPacket(RequestChunkRadiusPacket::new, RequestChunkRadiusSerializer_v291.INSTANCE, 69) - .registerPacket(ChunkRadiusUpdatedPacket::new, ChunkRadiusUpdatedSerializer_v291.INSTANCE, 70) - .registerPacket(ItemFrameDropItemPacket::new, ItemFrameDropItemSerializer_v291.INSTANCE, 71) - .registerPacket(GameRulesChangedPacket::new, GameRulesChangedSerializer_v291.INSTANCE, 72) - .registerPacket(CameraPacket::new, CameraSerializer_v291.INSTANCE, 73) - .registerPacket(BossEventPacket::new, BossEventSerializer_v291.INSTANCE, 74) - .registerPacket(ShowCreditsPacket::new, ShowCreditsSerializer_v291.INSTANCE, 75) - .registerPacket(AvailableCommandsPacket::new, new AvailableCommandsSerializer_v291(COMMAND_PARAMS), 76) - .registerPacket(CommandRequestPacket::new, CommandRequestSerializer_v291.INSTANCE, 77) - .registerPacket(CommandBlockUpdatePacket::new, CommandBlockUpdateSerializer_v291.INSTANCE, 78) - .registerPacket(CommandOutputPacket::new, CommandOutputSerializer_v291.INSTANCE, 79) - .registerPacket(UpdateTradePacket::new, UpdateTradeSerializer_v291.INSTANCE, 80) - .registerPacket(UpdateEquipPacket::new, UpdateEquipSerializer_v291.INSTANCE, 81) - .registerPacket(ResourcePackDataInfoPacket::new, ResourcePackDataInfoSerializer_v291.INSTANCE, 82) - .registerPacket(ResourcePackChunkDataPacket::new, ResourcePackChunkDataSerializer_v291.INSTANCE, 83) - .registerPacket(ResourcePackChunkRequestPacket::new, ResourcePackChunkRequestSerializer_v291.INSTANCE, 84) - .registerPacket(TransferPacket::new, TransferSerializer_v291.INSTANCE, 85) - .registerPacket(PlaySoundPacket::new, PlaySoundSerializer_v291.INSTANCE, 86) - .registerPacket(StopSoundPacket::new, StopSoundSerializer_v291.INSTANCE, 87) - .registerPacket(SetTitlePacket::new, SetTitleSerializer_v291.INSTANCE, 88) - .registerPacket(AddBehaviorTreePacket::new, AddBehaviorTreeSerializer_v291.INSTANCE, 89) - .registerPacket(StructureBlockUpdatePacket::new, StructureBlockUpdateSerializer_v291.INSTANCE, 90) - .registerPacket(ShowStoreOfferPacket::new, ShowStoreOfferSerializer_v291.INSTANCE, 91) - .registerPacket(PurchaseReceiptPacket::new, PurchaseReceiptSerializer_v291.INSTANCE, 92) - .registerPacket(PlayerSkinPacket::new, PlayerSkinSerializer_v291.INSTANCE, 93) - .registerPacket(SubClientLoginPacket::new, SubClientLoginSerializer_v291.INSTANCE, 94) - .registerPacket(AutomationClientConnectPacket::new, AutomationClientConnectSerializer_v291.INSTANCE, 95) - .registerPacket(SetLastHurtByPacket::new, SetLastHurtBySerializer_v291.INSTANCE, 96) - .registerPacket(BookEditPacket::new, BookEditSerializer_v291.INSTANCE, 97) - .registerPacket(NpcRequestPacket::new, NpcRequestSerializer_v291.INSTANCE, 98) - .registerPacket(PhotoTransferPacket::new, PhotoTransferSerializer_v291.INSTANCE, 99) - .registerPacket(ModalFormRequestPacket::new, ModalFormRequestSerializer_v291.INSTANCE, 100) - .registerPacket(ModalFormResponsePacket::new, ModalFormResponseSerializer_v291.INSTANCE, 101) - .registerPacket(ServerSettingsRequestPacket::new, ServerSettingsRequestSerializer_v291.INSTANCE, 102) - .registerPacket(ServerSettingsResponsePacket::new, ServerSettingsResponseSerializer_v291.INSTANCE, 103) - .registerPacket(ShowProfilePacket::new, ShowProfileSerializer_v291.INSTANCE, 104) - .registerPacket(SetDefaultGameTypePacket::new, SetDefaultGameTypeSerializer_v291.INSTANCE, 105) - .registerPacket(RemoveObjectivePacket::new, RemoveObjectiveSerializer_v291.INSTANCE, 106) - .registerPacket(SetDisplayObjectivePacket::new, SetDisplayObjectiveSerializer_v291.INSTANCE, 107) - .registerPacket(SetScorePacket::new, SetScoreSerializer_v291.INSTANCE, 108) - .registerPacket(LabTablePacket::new, LabTableSerializer_v291.INSTANCE, 109) - .registerPacket(UpdateBlockSyncedPacket::new, UpdateBlockSyncedSerializer_v291.INSTANCE, 110) - .registerPacket(MoveEntityDeltaPacket::new, MoveEntityDeltaSerializer_v291.INSTANCE, 111) - .registerPacket(SetScoreboardIdentityPacket::new, SetScoreboardIdentitySerializer_v291.INSTANCE, 112) - .registerPacket(SetLocalPlayerAsInitializedPacket::new, SetLocalPlayerAsInitializedSerializer_v291.INSTANCE, 113) - .registerPacket(UpdateSoftEnumPacket::new, UpdateSoftEnumSerializer_v291.INSTANCE, 114) - .registerPacket(NetworkStackLatencyPacket::new, NetworkStackLatencySerializer_v291.INSTANCE, 115) - .registerPacket(ScriptCustomEventPacket::new, ScriptCustomEventSerializer_v291.INSTANCE, 117) + .registerPacket(LoginPacket::new, LoginSerializer_v291.INSTANCE, 1, PacketRecipient.SERVER) + .registerPacket(PlayStatusPacket::new, PlayStatusSerializer_v291.INSTANCE, 2, PacketRecipient.CLIENT) + .registerPacket(ServerToClientHandshakePacket::new, ServerToClientHandshakeSerializer_v291.INSTANCE, 3, PacketRecipient.CLIENT) + .registerPacket(ClientToServerHandshakePacket::new, ClientToServerHandshakeSerializer_v291.INSTANCE, 4, PacketRecipient.SERVER) + .registerPacket(DisconnectPacket::new, DisconnectSerializer_v291.INSTANCE, 5, PacketRecipient.BOTH) + .registerPacket(ResourcePacksInfoPacket::new, ResourcePacksInfoSerializer_v291.INSTANCE, 6, PacketRecipient.CLIENT) + .registerPacket(ResourcePackStackPacket::new, ResourcePackStackSerializer_v291.INSTANCE, 7, PacketRecipient.CLIENT) + .registerPacket(ResourcePackClientResponsePacket::new, ResourcePackClientResponseSerializer_v291.INSTANCE, 8, PacketRecipient.SERVER) + .registerPacket(TextPacket::new, TextSerializer_v291.INSTANCE, 9, PacketRecipient.BOTH) + .registerPacket(SetTimePacket::new, SetTimeSerializer_v291.INSTANCE, 10, PacketRecipient.CLIENT) + .registerPacket(StartGamePacket::new, StartGameSerializer_v291.INSTANCE, 11, PacketRecipient.CLIENT) + .registerPacket(AddPlayerPacket::new, AddPlayerSerializer_v291.INSTANCE, 12, PacketRecipient.CLIENT) + .registerPacket(AddEntityPacket::new, AddEntitySerializer_v291.INSTANCE, 13, PacketRecipient.CLIENT) + .registerPacket(RemoveEntityPacket::new, RemoveEntitySerializer_v291.INSTANCE, 14, PacketRecipient.CLIENT) + .registerPacket(AddItemEntityPacket::new, AddItemEntitySerializer_v291.INSTANCE, 15, PacketRecipient.CLIENT) + .registerPacket(AddHangingEntityPacket::new, AddHangingEntitySerializer_v291.INSTANCE, 16, PacketRecipient.CLIENT) + .registerPacket(TakeItemEntityPacket::new, TakeItemEntitySerializer_v291.INSTANCE, 17, PacketRecipient.CLIENT) + .registerPacket(MoveEntityAbsolutePacket::new, MoveEntityAbsoluteSerializer_v291.INSTANCE, 18, PacketRecipient.BOTH) + .registerPacket(MovePlayerPacket::new, MovePlayerSerializer_v291.INSTANCE, 19, PacketRecipient.BOTH) + .registerPacket(RiderJumpPacket::new, RiderJumpSerializer_v291.INSTANCE, 20, PacketRecipient.SERVER) + .registerPacket(UpdateBlockPacket::new, UpdateBlockSerializer_v291.INSTANCE, 21, PacketRecipient.CLIENT) + .registerPacket(AddPaintingPacket::new, AddPaintingSerializer_v291.INSTANCE, 22, PacketRecipient.CLIENT) + .registerPacket(ExplodePacket::new, ExplodeSerializer_v291.INSTANCE, 23, PacketRecipient.CLIENT) + .registerPacket(LevelSoundEvent1Packet::new, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS), 24, PacketRecipient.BOTH) + .registerPacket(LevelEventPacket::new, new LevelEventSerializer_v291(LEVEL_EVENTS), 25, PacketRecipient.CLIENT) + .registerPacket(BlockEventPacket::new, BlockEventSerializer_v291.INSTANCE, 26, PacketRecipient.CLIENT) + .registerPacket(EntityEventPacket::new, new EntityEventSerializer_v291(ENTITY_EVENTS), 27, PacketRecipient.BOTH) + .registerPacket(MobEffectPacket::new, MobEffectSerializer_v291.INSTANCE, 28, PacketRecipient.CLIENT) + .registerPacket(UpdateAttributesPacket::new, UpdateAttributesSerializer_v291.INSTANCE, 29, PacketRecipient.CLIENT) + .registerPacket(InventoryTransactionPacket::new, InventoryTransactionSerializer_v291.INSTANCE, 30, PacketRecipient.BOTH) + .registerPacket(MobEquipmentPacket::new, MobEquipmentSerializer_v291.INSTANCE, 31, PacketRecipient.BOTH) + .registerPacket(MobArmorEquipmentPacket::new, MobArmorEquipmentSerializer_v291.INSTANCE, 32, PacketRecipient.BOTH) + .registerPacket(InteractPacket::new, InteractSerializer_v291.INSTANCE, 33, PacketRecipient.SERVER) + .registerPacket(BlockPickRequestPacket::new, BlockPickRequestSerializer_v291.INSTANCE, 34, PacketRecipient.SERVER) + .registerPacket(EntityPickRequestPacket::new, EntityPickRequestSerializer_v291.INSTANCE, 35, PacketRecipient.SERVER) + .registerPacket(PlayerActionPacket::new, PlayerActionSerializer_v291.INSTANCE, 36, PacketRecipient.BOTH) + .registerPacket(EntityFallPacket::new, EntityFallSerializer_v291.INSTANCE, 37, PacketRecipient.SERVER) + .registerPacket(HurtArmorPacket::new, HurtArmorSerializer_v291.INSTANCE, 38, PacketRecipient.CLIENT) + .registerPacket(SetEntityDataPacket::new, SetEntityDataSerializer_v291.INSTANCE, 39, PacketRecipient.BOTH) + .registerPacket(SetEntityMotionPacket::new, SetEntityMotionSerializer_v291.INSTANCE, 40, PacketRecipient.BOTH) + .registerPacket(SetEntityLinkPacket::new, SetEntityLinkSerializer_v291.INSTANCE, 41, PacketRecipient.BOTH) + .registerPacket(SetHealthPacket::new, SetHealthSerializer_v291.INSTANCE, 42, PacketRecipient.CLIENT) + .registerPacket(SetSpawnPositionPacket::new, SetSpawnPositionSerializer_v291.INSTANCE, 43, PacketRecipient.CLIENT) + .registerPacket(AnimatePacket::new, AnimateSerializer_v291.INSTANCE, 44, PacketRecipient.BOTH) + .registerPacket(RespawnPacket::new, RespawnSerializer_v291.INSTANCE, 45, PacketRecipient.CLIENT) + .registerPacket(ContainerOpenPacket::new, ContainerOpenSerializer_v291.INSTANCE, 46, PacketRecipient.CLIENT) + .registerPacket(ContainerClosePacket::new, ContainerCloseSerializer_v291.INSTANCE, 47, PacketRecipient.BOTH) + .registerPacket(PlayerHotbarPacket::new, PlayerHotbarSerializer_v291.INSTANCE, 48, PacketRecipient.BOTH) + .registerPacket(InventoryContentPacket::new, InventoryContentSerializer_v291.INSTANCE, 49, PacketRecipient.CLIENT) + .registerPacket(InventorySlotPacket::new, InventorySlotSerializer_v291.INSTANCE, 50, PacketRecipient.CLIENT) + .registerPacket(ContainerSetDataPacket::new, ContainerSetDataSerializer_v291.INSTANCE, 51, PacketRecipient.CLIENT) + .registerPacket(CraftingDataPacket::new, CraftingDataSerializer_v291.INSTANCE, 52, PacketRecipient.CLIENT) + .registerPacket(CraftingEventPacket::new, CraftingEventSerializer_v291.INSTANCE, 53, PacketRecipient.SERVER) + .registerPacket(GuiDataPickItemPacket::new, GuiDataPickItemSerializer_v291.INSTANCE, 54, PacketRecipient.CLIENT) + .registerPacket(AdventureSettingsPacket::new, AdventureSettingsSerializer_v291.INSTANCE, 55, PacketRecipient.CLIENT) + .registerPacket(BlockEntityDataPacket::new, BlockEntityDataSerializer_v291.INSTANCE, 56, PacketRecipient.CLIENT) + .registerPacket(PlayerInputPacket::new, PlayerInputSerializer_v291.INSTANCE, 57, PacketRecipient.SERVER) + .registerPacket(LevelChunkPacket::new, FullChunkDataSerializer_v291.INSTANCE, 58, PacketRecipient.CLIENT) + .registerPacket(SetCommandsEnabledPacket::new, SetCommandsEnabledSerializer_v291.INSTANCE, 59, PacketRecipient.CLIENT) + .registerPacket(SetDifficultyPacket::new, SetDifficultySerializer_v291.INSTANCE, 60, PacketRecipient.BOTH) + .registerPacket(ChangeDimensionPacket::new, ChangeDimensionSerializer_v291.INSTANCE, 61, PacketRecipient.CLIENT) + .registerPacket(SetPlayerGameTypePacket::new, SetPlayerGameTypeSerializer_v291.INSTANCE, 62, PacketRecipient.BOTH) + .registerPacket(PlayerListPacket::new, PlayerListSerializer_v291.INSTANCE, 63, PacketRecipient.CLIENT) + .registerPacket(SimpleEventPacket::new, SimpleEventSerializer_v291.INSTANCE, 64, PacketRecipient.BOTH) + .registerPacket(EventPacket::new, EventSerializer_v291.INSTANCE, 65, PacketRecipient.CLIENT) + .registerPacket(SpawnExperienceOrbPacket::new, SpawnExperienceOrbSerializer_v291.INSTANCE, 66, PacketRecipient.CLIENT) + .registerPacket(ClientboundMapItemDataPacket::new, ClientboundMapItemDataSerializer_v291.INSTANCE, 67, PacketRecipient.CLIENT) + .registerPacket(MapInfoRequestPacket::new, MapInfoRequestSerializer_v291.INSTANCE, 68, PacketRecipient.SERVER) + .registerPacket(RequestChunkRadiusPacket::new, RequestChunkRadiusSerializer_v291.INSTANCE, 69, PacketRecipient.SERVER) + .registerPacket(ChunkRadiusUpdatedPacket::new, ChunkRadiusUpdatedSerializer_v291.INSTANCE, 70, PacketRecipient.CLIENT) + .registerPacket(ItemFrameDropItemPacket::new, ItemFrameDropItemSerializer_v291.INSTANCE, 71, PacketRecipient.SERVER) + .registerPacket(GameRulesChangedPacket::new, GameRulesChangedSerializer_v291.INSTANCE, 72, PacketRecipient.CLIENT) + .registerPacket(CameraPacket::new, CameraSerializer_v291.INSTANCE, 73, PacketRecipient.CLIENT) + .registerPacket(BossEventPacket::new, BossEventSerializer_v291.INSTANCE, 74, PacketRecipient.CLIENT) + .registerPacket(ShowCreditsPacket::new, ShowCreditsSerializer_v291.INSTANCE, 75, PacketRecipient.CLIENT) + .registerPacket(AvailableCommandsPacket::new, new AvailableCommandsSerializer_v291(COMMAND_PARAMS), 76, PacketRecipient.CLIENT) + .registerPacket(CommandRequestPacket::new, CommandRequestSerializer_v291.INSTANCE, 77, PacketRecipient.SERVER) + .registerPacket(CommandBlockUpdatePacket::new, CommandBlockUpdateSerializer_v291.INSTANCE, 78, PacketRecipient.SERVER) + .registerPacket(CommandOutputPacket::new, CommandOutputSerializer_v291.INSTANCE, 79, PacketRecipient.CLIENT) + .registerPacket(UpdateTradePacket::new, UpdateTradeSerializer_v291.INSTANCE, 80, PacketRecipient.CLIENT) + .registerPacket(UpdateEquipPacket::new, UpdateEquipSerializer_v291.INSTANCE, 81, PacketRecipient.CLIENT) + .registerPacket(ResourcePackDataInfoPacket::new, ResourcePackDataInfoSerializer_v291.INSTANCE, 82, PacketRecipient.CLIENT) + .registerPacket(ResourcePackChunkDataPacket::new, ResourcePackChunkDataSerializer_v291.INSTANCE, 83, PacketRecipient.CLIENT) + .registerPacket(ResourcePackChunkRequestPacket::new, ResourcePackChunkRequestSerializer_v291.INSTANCE, 84, PacketRecipient.SERVER) + .registerPacket(TransferPacket::new, TransferSerializer_v291.INSTANCE, 85, PacketRecipient.CLIENT) + .registerPacket(PlaySoundPacket::new, PlaySoundSerializer_v291.INSTANCE, 86, PacketRecipient.CLIENT) + .registerPacket(StopSoundPacket::new, StopSoundSerializer_v291.INSTANCE, 87, PacketRecipient.CLIENT) + .registerPacket(SetTitlePacket::new, SetTitleSerializer_v291.INSTANCE, 88, PacketRecipient.CLIENT) + .registerPacket(AddBehaviorTreePacket::new, AddBehaviorTreeSerializer_v291.INSTANCE, 89, PacketRecipient.CLIENT) + .registerPacket(StructureBlockUpdatePacket::new, StructureBlockUpdateSerializer_v291.INSTANCE, 90, PacketRecipient.SERVER) + .registerPacket(ShowStoreOfferPacket::new, ShowStoreOfferSerializer_v291.INSTANCE, 91, PacketRecipient.CLIENT) + .registerPacket(PurchaseReceiptPacket::new, PurchaseReceiptSerializer_v291.INSTANCE, 92, PacketRecipient.SERVER) + .registerPacket(PlayerSkinPacket::new, PlayerSkinSerializer_v291.INSTANCE, 93, PacketRecipient.BOTH) + .registerPacket(SubClientLoginPacket::new, SubClientLoginSerializer_v291.INSTANCE, 94, PacketRecipient.SERVER) + .registerPacket(AutomationClientConnectPacket::new, AutomationClientConnectSerializer_v291.INSTANCE, 95, PacketRecipient.CLIENT) + .registerPacket(SetLastHurtByPacket::new, SetLastHurtBySerializer_v291.INSTANCE, 96, PacketRecipient.CLIENT) + .registerPacket(BookEditPacket::new, BookEditSerializer_v291.INSTANCE, 97, PacketRecipient.SERVER) + .registerPacket(NpcRequestPacket::new, NpcRequestSerializer_v291.INSTANCE, 98, PacketRecipient.SERVER) + .registerPacket(PhotoTransferPacket::new, PhotoTransferSerializer_v291.INSTANCE, 99, PacketRecipient.CLIENT) + .registerPacket(ModalFormRequestPacket::new, ModalFormRequestSerializer_v291.INSTANCE, 100, PacketRecipient.CLIENT) + .registerPacket(ModalFormResponsePacket::new, ModalFormResponseSerializer_v291.INSTANCE, 101, PacketRecipient.SERVER) + .registerPacket(ServerSettingsRequestPacket::new, ServerSettingsRequestSerializer_v291.INSTANCE, 102, PacketRecipient.CLIENT) + .registerPacket(ServerSettingsResponsePacket::new, ServerSettingsResponseSerializer_v291.INSTANCE, 103, PacketRecipient.SERVER) + .registerPacket(ShowProfilePacket::new, ShowProfileSerializer_v291.INSTANCE, 104, PacketRecipient.CLIENT) + .registerPacket(SetDefaultGameTypePacket::new, SetDefaultGameTypeSerializer_v291.INSTANCE, 105, PacketRecipient.CLIENT) + .registerPacket(RemoveObjectivePacket::new, RemoveObjectiveSerializer_v291.INSTANCE, 106, PacketRecipient.CLIENT) + .registerPacket(SetDisplayObjectivePacket::new, SetDisplayObjectiveSerializer_v291.INSTANCE, 107, PacketRecipient.CLIENT) + .registerPacket(SetScorePacket::new, SetScoreSerializer_v291.INSTANCE, 108, PacketRecipient.CLIENT) + .registerPacket(LabTablePacket::new, LabTableSerializer_v291.INSTANCE, 109, PacketRecipient.CLIENT) + .registerPacket(UpdateBlockSyncedPacket::new, UpdateBlockSyncedSerializer_v291.INSTANCE, 110, PacketRecipient.CLIENT) + .registerPacket(MoveEntityDeltaPacket::new, MoveEntityDeltaSerializer_v291.INSTANCE, 111, PacketRecipient.CLIENT) + .registerPacket(SetScoreboardIdentityPacket::new, SetScoreboardIdentitySerializer_v291.INSTANCE, 112, PacketRecipient.CLIENT) + .registerPacket(SetLocalPlayerAsInitializedPacket::new, SetLocalPlayerAsInitializedSerializer_v291.INSTANCE, 113, PacketRecipient.SERVER) + .registerPacket(UpdateSoftEnumPacket::new, UpdateSoftEnumSerializer_v291.INSTANCE, 114, PacketRecipient.CLIENT) + .registerPacket(NetworkStackLatencyPacket::new, NetworkStackLatencySerializer_v291.INSTANCE, 115, PacketRecipient.BOTH) + .registerPacket(ScriptCustomEventPacket::new, ScriptCustomEventSerializer_v291.INSTANCE, 117, PacketRecipient.BOTH) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v313/Bedrock_v313.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v313/Bedrock_v313.java index aea623882..8bb2532f4 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v313/Bedrock_v313.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v313/Bedrock_v313.java @@ -10,10 +10,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelEventSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelSoundEvent1Serializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v313.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -110,10 +107,10 @@ public class Bedrock_v313 extends Bedrock_v291 { .updateSerializer(EntityEventPacket.class, new EntityEventSerializer_v291(ENTITY_EVENTS)) .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) - .registerPacket(SpawnParticleEffectPacket::new, SpawnParticleEffectSerializer_v313.INSTANCE, 118) - .registerPacket(AvailableEntityIdentifiersPacket::new, AvailableEntityIdentifiersSerializer_v313.INSTANCE, 119) - .registerPacket(LevelSoundEvent2Packet::new, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS), 120) - .registerPacket(NetworkChunkPublisherUpdatePacket::new, NetworkChunkPublisherUpdateSerializer_v313.INSTANCE, 121) - .registerPacket(BiomeDefinitionListPacket::new, BiomeDefinitionListSerializer_v313.INSTANCE, 122) + .registerPacket(SpawnParticleEffectPacket::new, SpawnParticleEffectSerializer_v313.INSTANCE, 118, PacketRecipient.CLIENT) + .registerPacket(AvailableEntityIdentifiersPacket::new, AvailableEntityIdentifiersSerializer_v313.INSTANCE, 119, PacketRecipient.CLIENT) + .registerPacket(LevelSoundEvent2Packet::new, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS), 120, PacketRecipient.BOTH) + .registerPacket(NetworkChunkPublisherUpdatePacket::new, NetworkChunkPublisherUpdateSerializer_v313.INSTANCE, 121, PacketRecipient.CLIENT) + .registerPacket(BiomeDefinitionListPacket::new, BiomeDefinitionListSerializer_v313.INSTANCE, 122, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/Bedrock_v332.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/Bedrock_v332.java index 9540f2a66..a7cfd6ba9 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/Bedrock_v332.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/Bedrock_v332.java @@ -8,6 +8,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -47,6 +48,6 @@ public class Bedrock_v332 extends Bedrock_v313 { .updateSerializer(SpawnParticleEffectPacket.class, SpawnParticleEffectSerializer_v332.INSTANCE) .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v291(COMMAND_PARAMS)) .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) - .registerPacket(LevelSoundEventPacket::new, new LevelSoundEventSerializer_v332(SOUND_EVENTS), 123) + .registerPacket(LevelSoundEventPacket::new, new LevelSoundEventSerializer_v332(SOUND_EVENTS), 123, PacketRecipient.BOTH) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/Bedrock_v340.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/Bedrock_v340.java index 7abe7d477..bd71e036d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/Bedrock_v340.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/Bedrock_v340.java @@ -8,6 +8,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v332.Bedrock_v332; import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332; import org.cloudburstmc.protocol.bedrock.codec.v340.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; @@ -62,7 +63,7 @@ public class Bedrock_v340 extends Bedrock_v332 { .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) - .registerPacket(LecternUpdatePacket::new, LecternUpdateSerializer_v340.INSTANCE, 124) - .registerPacket(VideoStreamConnectPacket::new, VideoStreamConnectSerializer_v340.INSTANCE, 125) + .registerPacket(LecternUpdatePacket::new, LecternUpdateSerializer_v340.INSTANCE, 124, PacketRecipient.SERVER) + .registerPacket(VideoStreamConnectPacket::new, VideoStreamConnectSerializer_v340.INSTANCE, 125, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java index ea0c80639..e261458c8 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java @@ -11,6 +11,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v354.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -78,7 +79,7 @@ public class Bedrock_v354 extends Bedrock_v340 { .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) - .registerPacket(MapCreateLockedCopyPacket::new, MapCreateLockedCopySerializer_v354.INSTANCE, 126) - .registerPacket(OnScreenTextureAnimationPacket::new, OnScreenTextureAnimationSerializer_v354.INSTANCE, 127) + .registerPacket(MapCreateLockedCopyPacket::new, MapCreateLockedCopySerializer_v354.INSTANCE, 126, PacketRecipient.SERVER) + .registerPacket(OnScreenTextureAnimationPacket::new, OnScreenTextureAnimationSerializer_v354.INSTANCE, 127, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/Bedrock_v361.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/Bedrock_v361.java index 9c05983cb..1fca17fde 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/Bedrock_v361.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/Bedrock_v361.java @@ -6,10 +6,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v354.Bedrock_v354; import org.cloudburstmc.protocol.bedrock.codec.v354.serializer.LecternUpdateSerializer_v354; import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -76,16 +73,16 @@ public class Bedrock_v361 extends Bedrock_v354 { .updateSerializer(CommandBlockUpdatePacket.class, CommandBlockUpdateSerializer_v361.INSTANCE) .updateSerializer(ResourcePackDataInfoPacket.class, new ResourcePackDataInfoSerializer_v361(RESOURCE_PACK_TYPES)) .updateSerializer(StructureBlockUpdatePacket.class, StructureBlockUpdateSerializer_v361.INSTANCE) - .registerPacket(LevelEventGenericPacket::new, new LevelEventGenericSerializer_v361(LEVEL_EVENTS), 124) - .registerPacket(LecternUpdatePacket::new, LecternUpdateSerializer_v354.INSTANCE, 125) - .registerPacket(VideoStreamConnectPacket::new, VideoStreamConnectSerializer_v361.INSTANCE, 126) + .registerPacket(LevelEventGenericPacket::new, new LevelEventGenericSerializer_v361(LEVEL_EVENTS), 124, PacketRecipient.CLIENT) + .registerPacket(LecternUpdatePacket::new, LecternUpdateSerializer_v354.INSTANCE, 125, PacketRecipient.SERVER) + .registerPacket(VideoStreamConnectPacket::new, VideoStreamConnectSerializer_v361.INSTANCE, 126, PacketRecipient.CLIENT) // AddEntityPacket 127 // RemoveEntityPacket 128 - .registerPacket(ClientCacheStatusPacket::new, ClientCacheStatusSerializer_v361.INSTANCE, 129) - .registerPacket(StructureTemplateDataRequestPacket::new, StructureTemplateDataRequestSerializer_v361.INSTANCE, 132) - .registerPacket(StructureTemplateDataResponsePacket::new, StructureTemplateDataResponseSerializer_v361.INSTANCE, 133) - .registerPacket(UpdateBlockPropertiesPacket::new, UpdateBlockPropertiesSerializer_v361.INSTANCE, 134) - .registerPacket(ClientCacheBlobStatusPacket::new, ClientCacheBlobStatusSerializer_v361.INSTANCE, 135) - .registerPacket(ClientCacheMissResponsePacket::new, ClientCacheMissResponseSerializer_v361.INSTANCE, 136) + .registerPacket(ClientCacheStatusPacket::new, ClientCacheStatusSerializer_v361.INSTANCE, 129, PacketRecipient.SERVER) + .registerPacket(StructureTemplateDataRequestPacket::new, StructureTemplateDataRequestSerializer_v361.INSTANCE, 132, PacketRecipient.SERVER) + .registerPacket(StructureTemplateDataResponsePacket::new, StructureTemplateDataResponseSerializer_v361.INSTANCE, 133, PacketRecipient.CLIENT) + .registerPacket(UpdateBlockPropertiesPacket::new, UpdateBlockPropertiesSerializer_v361.INSTANCE, 134, PacketRecipient.CLIENT) + .registerPacket(ClientCacheBlobStatusPacket::new, ClientCacheBlobStatusSerializer_v361.INSTANCE, 135, PacketRecipient.SERVER) + .registerPacket(ClientCacheMissResponsePacket::new, ClientCacheMissResponseSerializer_v361.INSTANCE, 136, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java index 7fa328f42..37145070d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java @@ -11,10 +11,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.ResourcePackDataInfoSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v388.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -118,14 +115,14 @@ public class Bedrock_v388 extends Bedrock_v361 { .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) - .registerPacket(TickSyncPacket::new, TickSyncSerializer_v388.INSTANCE, 23) - .registerPacket(EducationSettingsPacket::new, EducationSettingsSerializer_v388.INSTANCE, 137) - .registerPacket(EmotePacket::new, EmoteSerializer_v388.INSTANCE, 138) - .registerPacket(MultiplayerSettingsPacket::new, MultiplayerSettingsSerializer_v388.INSTANCE, 139) - .registerPacket(SettingsCommandPacket::new, SettingsCommandSerializer_v388.INSTANCE, 140) - .registerPacket(AnvilDamagePacket::new, AnvilDamageSerializer_v388.INSTANCE, 141) - .registerPacket(CompletedUsingItemPacket::new, CompletedUsingItemSerializer_v388.INSTANCE, 142) - .registerPacket(NetworkSettingsPacket::new, NetworkSettingsSerializer_v388.INSTANCE, 143) - .registerPacket(PlayerAuthInputPacket::new, PlayerAuthInputSerializer_v388.INSTANCE, 144) + .registerPacket(TickSyncPacket::new, TickSyncSerializer_v388.INSTANCE, 23, PacketRecipient.BOTH) + .registerPacket(EducationSettingsPacket::new, EducationSettingsSerializer_v388.INSTANCE, 137, PacketRecipient.CLIENT) + .registerPacket(EmotePacket::new, EmoteSerializer_v388.INSTANCE, 138, PacketRecipient.CLIENT) + .registerPacket(MultiplayerSettingsPacket::new, MultiplayerSettingsSerializer_v388.INSTANCE, 139, PacketRecipient.BOTH) + .registerPacket(SettingsCommandPacket::new, SettingsCommandSerializer_v388.INSTANCE, 140, PacketRecipient.SERVER) + .registerPacket(AnvilDamagePacket::new, AnvilDamageSerializer_v388.INSTANCE, 141, PacketRecipient.SERVER) + .registerPacket(CompletedUsingItemPacket::new, CompletedUsingItemSerializer_v388.INSTANCE, 142, PacketRecipient.CLIENT) + .registerPacket(NetworkSettingsPacket::new, NetworkSettingsSerializer_v388.INSTANCE, 143, PacketRecipient.CLIENT) + .registerPacket(PlayerAuthInputPacket::new, PlayerAuthInputSerializer_v388.INSTANCE, 144, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/Bedrock_v407.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/Bedrock_v407.java index fc10182ba..04ff76ae1 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/Bedrock_v407.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/Bedrock_v407.java @@ -10,10 +10,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v390.Bedrock_v390; import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; @@ -202,17 +199,17 @@ public class Bedrock_v407 extends Bedrock_v390 { .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) .updateSerializer(EducationSettingsPacket.class, EducationSettingsSerializer_v407.INSTANCE) - .registerPacket(CreativeContentPacket::new, CreativeContentSerializer_v407.INSTANCE, 145) - .registerPacket(PlayerEnchantOptionsPacket::new, PlayerEnchantOptionsSerializer_v407.INSTANCE, 146) - .registerPacket(ItemStackRequestPacket::new, ItemStackRequestSerializer_v407.INSTANCE, 147) - .registerPacket(ItemStackResponsePacket::new, ItemStackResponseSerializer_v407.INSTANCE, 148) - .registerPacket(PlayerArmorDamagePacket::new, PlayerArmorDamageSerializer_v407.INSTANCE, 149) - .registerPacket(CodeBuilderPacket::new, CodeBuilderSerializer_v407.INSTANCE, 150) - .registerPacket(UpdatePlayerGameTypePacket::new, UpdatePlayerGameTypeSerializer_v407.INSTANCE, 151) - .registerPacket(EmoteListPacket::new, EmoteListSerializer_v407.INSTANCE, 152) - .registerPacket(PositionTrackingDBServerBroadcastPacket::new, PositionTrackingDBServerBroadcastSerializer_v407.INSTANCE, 153) - .registerPacket(PositionTrackingDBClientRequestPacket::new, PositionTrackingDBClientRequestSerializer_v407.INSTANCE, 154) - .registerPacket(DebugInfoPacket::new, DebugInfoSerializer_v407.INSTANCE, 155) - .registerPacket(PacketViolationWarningPacket::new, PacketViolationWarningSerializer_v407.INSTANCE, 156) + .registerPacket(CreativeContentPacket::new, CreativeContentSerializer_v407.INSTANCE, 145, PacketRecipient.CLIENT) + .registerPacket(PlayerEnchantOptionsPacket::new, PlayerEnchantOptionsSerializer_v407.INSTANCE, 146, PacketRecipient.CLIENT) + .registerPacket(ItemStackRequestPacket::new, ItemStackRequestSerializer_v407.INSTANCE, 147, PacketRecipient.SERVER) + .registerPacket(ItemStackResponsePacket::new, ItemStackResponseSerializer_v407.INSTANCE, 148, PacketRecipient.CLIENT) + .registerPacket(PlayerArmorDamagePacket::new, PlayerArmorDamageSerializer_v407.INSTANCE, 149, PacketRecipient.CLIENT) + .registerPacket(CodeBuilderPacket::new, CodeBuilderSerializer_v407.INSTANCE, 150, PacketRecipient.CLIENT) + .registerPacket(UpdatePlayerGameTypePacket::new, UpdatePlayerGameTypeSerializer_v407.INSTANCE, 151, PacketRecipient.CLIENT) + .registerPacket(EmoteListPacket::new, EmoteListSerializer_v407.INSTANCE, 152, PacketRecipient.BOTH) + .registerPacket(PositionTrackingDBServerBroadcastPacket::new, PositionTrackingDBServerBroadcastSerializer_v407.INSTANCE, 153, PacketRecipient.CLIENT) + .registerPacket(PositionTrackingDBClientRequestPacket::new, PositionTrackingDBClientRequestSerializer_v407.INSTANCE, 154, PacketRecipient.SERVER) + .registerPacket(DebugInfoPacket::new, DebugInfoSerializer_v407.INSTANCE, 155, PacketRecipient.BOTH) + .registerPacket(PacketViolationWarningPacket::new, PacketViolationWarningSerializer_v407.INSTANCE, 156, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/Bedrock_v419.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/Bedrock_v419.java index 938b273ff..3773edb63 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/Bedrock_v419.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/Bedrock_v419.java @@ -7,6 +7,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v388.serializer.AvailableCommandsSerializer_v388; import org.cloudburstmc.protocol.bedrock.codec.v408.Bedrock_v408; import org.cloudburstmc.protocol.bedrock.codec.v419.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -41,11 +42,11 @@ public class Bedrock_v419 extends Bedrock_v408 { .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v388(COMMAND_PARAMS)) - .registerPacket(MotionPredictionHintsPacket::new, MotionPredictionHintsSerializer_v419.INSTANCE, 157) - .registerPacket(AnimateEntityPacket::new, AnimateEntitySerializer_v419.INSTANCE, 158) - .registerPacket(CameraShakePacket::new, CameraShakeSerializer_v419.INSTANCE, 159) - .registerPacket(PlayerFogPacket::new, PlayerFogSerializer_v419.INSTANCE, 160) - .registerPacket(CorrectPlayerMovePredictionPacket::new, CorrectPlayerMovePredictionSerializer_v419.INSTANCE, 161) - .registerPacket(ItemComponentPacket::new, ItemComponentSerializer_v419.INSTANCE, 162) + .registerPacket(MotionPredictionHintsPacket::new, MotionPredictionHintsSerializer_v419.INSTANCE, 157, PacketRecipient.CLIENT) + .registerPacket(AnimateEntityPacket::new, AnimateEntitySerializer_v419.INSTANCE, 158, PacketRecipient.CLIENT) + .registerPacket(CameraShakePacket::new, CameraShakeSerializer_v419.INSTANCE, 159, PacketRecipient.CLIENT) + .registerPacket(PlayerFogPacket::new, PlayerFogSerializer_v419.INSTANCE, 160, PacketRecipient.CLIENT) + .registerPacket(CorrectPlayerMovePredictionPacket::new, CorrectPlayerMovePredictionSerializer_v419.INSTANCE, 161, PacketRecipient.CLIENT) + .registerPacket(ItemComponentPacket::new, ItemComponentSerializer_v419.INSTANCE, 162, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java index d6e54ab97..cc41492dc 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java @@ -5,6 +5,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v422.serializer.FilterTextSerializer_v422; import org.cloudburstmc.protocol.bedrock.codec.v422.serializer.ItemStackResponseSerializer_v422; import org.cloudburstmc.protocol.bedrock.codec.v422.serializer.ResourcePacksInfoSerializer_v422; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; import org.cloudburstmc.protocol.bedrock.packet.FilterTextPacket; import org.cloudburstmc.protocol.bedrock.packet.ItemStackResponsePacket; @@ -24,7 +25,7 @@ public class Bedrock_v422 extends Bedrock_v419 { .helper(() -> new BedrockCodecHelper_v422(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES)) .updateSerializer(ResourcePacksInfoPacket.class, ResourcePacksInfoSerializer_v422.INSTANCE) .updateSerializer(ItemStackResponsePacket.class, ItemStackResponseSerializer_v422.INSTANCE) - .registerPacket(FilterTextPacket::new, FilterTextSerializer_v422.INSTANCE, 163) + .registerPacket(FilterTextPacket::new, FilterTextSerializer_v422.INSTANCE, 163, PacketRecipient.BOTH) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java index 3a62cf5f1..abc6575a4 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java @@ -14,6 +14,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v428.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; @@ -91,6 +92,6 @@ public class Bedrock_v428 extends Bedrock_v422 { .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v388(COMMAND_PARAMS)) .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) - .registerPacket(ClientboundDebugRendererPacket::new, ClientboundDebugRendererSerializer_v428.INSTANCE, 164) + .registerPacket(ClientboundDebugRendererPacket::new, ClientboundDebugRendererSerializer_v428.INSTANCE, 164, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v440/Bedrock_v440.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v440/Bedrock_v440.java index a208622a8..b710b7990 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v440/Bedrock_v440.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v440/Bedrock_v440.java @@ -15,6 +15,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v440.serializer.StartGameSerializer_v440; import org.cloudburstmc.protocol.bedrock.codec.v440.serializer.SyncEntityPropertySerializer_v440; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.ParticleType; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; @@ -90,8 +91,8 @@ public class Bedrock_v440 extends Bedrock_v431 { .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) - .registerPacket(SyncEntityPropertyPacket::new, SyncEntityPropertySerializer_v440.INSTANCE, 165) - .registerPacket(AddVolumeEntityPacket::new, AddVolumeEntitySerializer_v440.INSTANCE, 166) - .registerPacket(RemoveVolumeEntityPacket::new, RemoveVolumeEntitySerializer_v440.INSTANCE, 167) + .registerPacket(SyncEntityPropertyPacket::new, SyncEntityPropertySerializer_v440.INSTANCE, 165, PacketRecipient.CLIENT) + .registerPacket(AddVolumeEntityPacket::new, AddVolumeEntitySerializer_v440.INSTANCE, 166, PacketRecipient.CLIENT) + .registerPacket(RemoveVolumeEntityPacket::new, RemoveVolumeEntitySerializer_v440.INSTANCE, 167, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/Bedrock_v448.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/Bedrock_v448.java index 201ab3150..f02dba5ff 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/Bedrock_v448.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/Bedrock_v448.java @@ -12,6 +12,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v440.Bedrock_v440; import org.cloudburstmc.protocol.bedrock.codec.v448.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.ParticleType; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -64,7 +65,7 @@ public class Bedrock_v448 extends Bedrock_v440 { .updateSerializer(NpcRequestPacket.class, NpcRequestSerializer_v448.INSTANCE) .updateSerializer(SetTitlePacket.class, SetTitleSerializer_v448.INSTANCE) .updateSerializer(ResourcePacksInfoPacket.class, ResourcePacksInfoSerializer_v448.INSTANCE) - .registerPacket(SimulationTypePacket::new, SimulationTypeSerializer_v448.INSTANCE, 168) - .registerPacket(NpcDialoguePacket::new, NpcDialogueSerializer_v448.INSTANCE, 169) + .registerPacket(SimulationTypePacket::new, SimulationTypeSerializer_v448.INSTANCE, 168, PacketRecipient.CLIENT) + .registerPacket(NpcDialoguePacket::new, NpcDialogueSerializer_v448.INSTANCE, 169, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/Bedrock_v465.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/Bedrock_v465.java index 8b920f76b..5ec590507 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/Bedrock_v465.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/Bedrock_v465.java @@ -12,10 +12,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v448.Bedrock_v448; import org.cloudburstmc.protocol.bedrock.codec.v465.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -72,8 +69,8 @@ public class Bedrock_v465 extends Bedrock_v448 { .updateSerializer(EducationSettingsPacket.class, EducationSettingsSerializer_v465.INSTANCE) .updateSerializer(HurtArmorPacket.class, HurtArmorSerializer_v465.INSTANCE) .updateSerializer(CraftingDataPacket.class, CraftingDataSerializer_v465.INSTANCE) - .registerPacket(EduUriResourcePacket::new, EduUriResourceSerializer_v465.INSTANCE, 170) - .registerPacket(CreatePhotoPacket::new, CreatePhotoSerializer_v465.INSTANCE, 171) - .registerPacket(UpdateSubChunkBlocksPacket::new, UpdateSubChunkBlocksSerializer_v465.INSTANCE, 172) + .registerPacket(EduUriResourcePacket::new, EduUriResourceSerializer_v465.INSTANCE, 170, PacketRecipient.CLIENT) + .registerPacket(CreatePhotoPacket::new, CreatePhotoSerializer_v465.INSTANCE, 171, PacketRecipient.SERVER) + .registerPacket(UpdateSubChunkBlocksPacket::new, UpdateSubChunkBlocksSerializer_v465.INSTANCE, 172, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/Bedrock_v471.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/Bedrock_v471.java index 72cf0cf7b..606f472ed 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/Bedrock_v471.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/Bedrock_v471.java @@ -14,10 +14,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v471.serializer.PhotoInfoRequestSerializer_v471; import org.cloudburstmc.protocol.bedrock.codec.v471.serializer.SubChunkRequestSerializer_v471; import org.cloudburstmc.protocol.bedrock.codec.v471.serializer.SubChunkSerializer_v471; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -60,8 +57,8 @@ public class Bedrock_v471 extends Bedrock_v465 { .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) - .registerPacket(PhotoInfoRequestPacket::new, PhotoInfoRequestSerializer_v471.INSTANCE, 173) - .registerPacket(SubChunkPacket::new, SubChunkSerializer_v471.INSTANCE, 174) - .registerPacket(SubChunkRequestPacket::new, SubChunkRequestSerializer_v471.INSTANCE, 175) + .registerPacket(PhotoInfoRequestPacket::new, PhotoInfoRequestSerializer_v471.INSTANCE, 173, PacketRecipient.SERVER) + .registerPacket(SubChunkPacket::new, SubChunkSerializer_v471.INSTANCE, 174, PacketRecipient.CLIENT) + .registerPacket(SubChunkRequestPacket::new, SubChunkRequestSerializer_v471.INSTANCE, 175, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java index e63a28a05..daf45f7d9 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java @@ -8,6 +8,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v465.BedrockCodecHelper_v465; import org.cloudburstmc.protocol.bedrock.codec.v475.Bedrock_v475; import org.cloudburstmc.protocol.bedrock.codec.v486.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -53,8 +54,8 @@ public class Bedrock_v486 extends Bedrock_v475 { .updateSerializer(LevelChunkPacket.class, LevelChunkSerializer_v486.INSTANCE) .updateSerializer(SubChunkPacket.class, SubChunkSerializer_v486.INSTANCE) .updateSerializer(SubChunkRequestPacket.class, SubChunkRequestSerializer_v486.INSTANCE) - .registerPacket(PlayerStartItemCooldownPacket::new, PlayerStartItemCooldownSerializer_v486.INSTANCE, 176) - .registerPacket(ScriptMessagePacket::new, ScriptMessageSerializer_v486.INSTANCE, 177) - .registerPacket(CodeBuilderSourcePacket::new, CodeBuilderSourceSerializer_v486.INSTANCE, 178) + .registerPacket(PlayerStartItemCooldownPacket::new, PlayerStartItemCooldownSerializer_v486.INSTANCE, 176, PacketRecipient.CLIENT) + .registerPacket(ScriptMessagePacket::new, ScriptMessageSerializer_v486.INSTANCE, 177, PacketRecipient.BOTH) + .registerPacket(CodeBuilderSourcePacket::new, CodeBuilderSourceSerializer_v486.INSTANCE, 178, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java index 922ba9919..41a0fcd1c 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java @@ -16,6 +16,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v503.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; @@ -126,9 +127,9 @@ public class Bedrock_v503 extends Bedrock_v486 { .updateSerializer(SpawnParticleEffectPacket.class, new SpawnParticleEffectSerializer_v503()) .updateSerializer(AddVolumeEntityPacket.class, new AddVolumeEntitySerializer_v503()) .updateSerializer(RemoveVolumeEntityPacket.class, new RemoveVolumeEntitySerializer_v503()) - .registerPacket(TickingAreasLoadStatusPacket::new, new TickingAreasLoadStatusSerializer_v503(), 179) - .registerPacket(DimensionDataPacket::new, new DimensionDataSerializer_v503(), 180) - .registerPacket(AgentActionEventPacket::new, new AgentActionEventSerializer_v503(), 181) - .registerPacket(ChangeMobPropertyPacket::new, new ChangeMobPropertySerializer_v503(), 182) + .registerPacket(TickingAreasLoadStatusPacket::new, new TickingAreasLoadStatusSerializer_v503(), 179, PacketRecipient.CLIENT) + .registerPacket(DimensionDataPacket::new, new DimensionDataSerializer_v503(), 180, PacketRecipient.CLIENT) + .registerPacket(AgentActionEventPacket::new, new AgentActionEventSerializer_v503(), 181, PacketRecipient.CLIENT) + .registerPacket(ChangeMobPropertyPacket::new, new ChangeMobPropertySerializer_v503(), 182, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v527/Bedrock_v527.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v527/Bedrock_v527.java index 5a3f02555..5bfc2cadd 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v527/Bedrock_v527.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v527/Bedrock_v527.java @@ -11,10 +11,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v503.BedrockCodecHelper_v503; import org.cloudburstmc.protocol.bedrock.codec.v503.Bedrock_v503; import org.cloudburstmc.protocol.bedrock.codec.v527.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -86,9 +83,9 @@ public class Bedrock_v527 extends Bedrock_v503 { .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(PlayerActionPacket.class, new PlayerActionSerializer_v527()) .updateSerializer(PlayerAuthInputPacket.class, new PlayerAuthInputSerializer_v527()) - .registerPacket(LessonProgressPacket::new, new LessonProgressSerializer_v527(), 183) - .registerPacket(RequestAbilityPacket::new, new RequestAbilitySerializer_v527(), 184) - .registerPacket(RequestPermissionsPacket::new, new RequestPermissionsSerializer_v527(), 185) - .registerPacket(ToastRequestPacket::new, new ToastRequestSerializer_v527(), 186) + .registerPacket(LessonProgressPacket::new, new LessonProgressSerializer_v527(), 183, PacketRecipient.CLIENT) + .registerPacket(RequestAbilityPacket::new, new RequestAbilitySerializer_v527(), 184, PacketRecipient.SERVER) + .registerPacket(RequestPermissionsPacket::new, new RequestPermissionsSerializer_v527(), 185, PacketRecipient.SERVER) + .registerPacket(ToastRequestPacket::new, new ToastRequestSerializer_v527(), 186, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/Bedrock_v534.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/Bedrock_v534.java index f49859d54..74e7db840 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/Bedrock_v534.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/Bedrock_v534.java @@ -9,6 +9,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v527.Bedrock_v527; import org.cloudburstmc.protocol.bedrock.codec.v534.serializer.*; import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -58,9 +59,9 @@ public class Bedrock_v534 extends Bedrock_v527 { .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) - .registerPacket(UpdateAbilitiesPacket::new, UpdateAbilitiesSerializer_v534.INSTANCE, 187) - .registerPacket(UpdateAdventureSettingsPacket::new, UpdateAdventureSettingsSerializer_v534.INSTANCE, 188) - .registerPacket(DeathInfoPacket::new, DeathInfoSerializer_v534.INSTANCE, 189) - .registerPacket(EditorNetworkPacket::new, EditorNetworkSerializer_v534.INSTANCE, 190) + .registerPacket(UpdateAbilitiesPacket::new, UpdateAbilitiesSerializer_v534.INSTANCE, 187, PacketRecipient.CLIENT) + .registerPacket(UpdateAdventureSettingsPacket::new, UpdateAdventureSettingsSerializer_v534.INSTANCE, 188, PacketRecipient.CLIENT) + .registerPacket(DeathInfoPacket::new, DeathInfoSerializer_v534.INSTANCE, 189, PacketRecipient.CLIENT) + .registerPacket(EditorNetworkPacket::new, EditorNetworkSerializer_v534.INSTANCE, 190, PacketRecipient.BOTH) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/Bedrock_v544.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/Bedrock_v544.java index b86b44779..3de1e481c 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/Bedrock_v544.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/Bedrock_v544.java @@ -4,6 +4,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v534.BedrockCodecHelper_v534; import org.cloudburstmc.protocol.bedrock.codec.v534.Bedrock_v534; import org.cloudburstmc.protocol.bedrock.codec.v544.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.packet.*; public class Bedrock_v544 extends Bedrock_v534 { @@ -18,7 +19,7 @@ public class Bedrock_v544 extends Bedrock_v534 { .updateSerializer(MapInfoRequestPacket.class, new MapInfoRequestSerializer_v544()) .updateSerializer(ModalFormResponsePacket.class, new ModalFormResponseSerializer_v544()) .updateSerializer(NetworkChunkPublisherUpdatePacket.class, new NetworkChunkPublisherUpdateSerializer_v544()) - .registerPacket(FeatureRegistryPacket::new, new FeatureRegistrySerializer_v544(), 191) + .registerPacket(FeatureRegistryPacket::new, new FeatureRegistrySerializer_v544(), 191, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/Bedrock_v554.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/Bedrock_v554.java index ae435c78b..ffbcfbd13 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/Bedrock_v554.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/Bedrock_v554.java @@ -6,6 +6,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332; import org.cloudburstmc.protocol.bedrock.codec.v545.Bedrock_v545; import org.cloudburstmc.protocol.bedrock.codec.v554.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -31,10 +32,10 @@ public class Bedrock_v554 extends Bedrock_v545 { .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) - .registerPacket(ServerStatsPacket::new, new ServerStatsSerializer_v554(), 192) - .registerPacket(RequestNetworkSettingsPacket::new, new RequestNetworkSettingsSerializer_v554(), 193) - .registerPacket(GameTestRequestPacket::new, new GameTestRequestSerializer_v554(), 194) - .registerPacket(GameTestResultsPacket::new, new GameTestResultsSerializer_v554(), 195) + .registerPacket(ServerStatsPacket::new, new ServerStatsSerializer_v554(), 192, PacketRecipient.CLIENT) + .registerPacket(RequestNetworkSettingsPacket::new, new RequestNetworkSettingsSerializer_v554(), 193, PacketRecipient.SERVER) + .registerPacket(GameTestRequestPacket::new, new GameTestRequestSerializer_v554(), 194, PacketRecipient.SERVER) + .registerPacket(GameTestResultsPacket::new, new GameTestResultsSerializer_v554(), 195, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v560/Bedrock_v560.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v560/Bedrock_v560.java index d29738474..6b8bf576a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v560/Bedrock_v560.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v560/Bedrock_v560.java @@ -8,6 +8,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v557.BedrockCodecHelper_v557; import org.cloudburstmc.protocol.bedrock.codec.v557.Bedrock_v557; import org.cloudburstmc.protocol.bedrock.codec.v560.serializer.UpdateClientInputLocksSerializer_v560; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -61,6 +62,6 @@ public class Bedrock_v560 extends Bedrock_v557 { .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) - .registerPacket(UpdateClientInputLocksPacket::new, new UpdateClientInputLocksSerializer_v560(), 196) + .registerPacket(UpdateClientInputLocksPacket::new, new UpdateClientInputLocksSerializer_v560(), 196, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java index 1231e95db..84b20becd 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java @@ -10,6 +10,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v567.serializer.CommandRequestSerializer_v567; import org.cloudburstmc.protocol.bedrock.codec.v567.serializer.CraftingDataSerializer_v567; import org.cloudburstmc.protocol.bedrock.codec.v567.serializer.StartGameSerializer_v567; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.packet.*; import org.cloudburstmc.protocol.common.util.TypeMap; @@ -36,6 +37,6 @@ public class Bedrock_v567 extends Bedrock_v560 { .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(CraftingDataPacket.class, new CraftingDataSerializer_v567()) - .registerPacket(ClientCheatAbilityPacket::new, new ClientCheatAbilitySerializer_v567(), 197) + .registerPacket(ClientCheatAbilityPacket::new, new ClientCheatAbilitySerializer_v567(), 197, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java index 8008f1443..dc5653fd2 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java @@ -13,10 +13,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v575.serializer.CameraPresetsSerializer_v575; import org.cloudburstmc.protocol.bedrock.codec.v575.serializer.PlayerAuthInputSerializer_v575; import org.cloudburstmc.protocol.bedrock.codec.v575.serializer.UnlockedRecipesSerializer_v575; -import org.cloudburstmc.protocol.bedrock.data.Ability; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -151,8 +148,8 @@ public class Bedrock_v575 extends Bedrock_v568 { .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) .updateSerializer(PlayerAuthInputPacket.class, new PlayerAuthInputSerializer_v575()) .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v448(COMMAND_PARAMS)) - .registerPacket(CameraPresetsPacket::new, new CameraPresetsSerializer_v575(), 198) - .registerPacket(UnlockedRecipesPacket::new, new UnlockedRecipesSerializer_v575(), 199) - .registerPacket(CameraInstructionPacket::new, new CameraInstructionSerializer_v575(), 300) + .registerPacket(CameraPresetsPacket::new, new CameraPresetsSerializer_v575(), 198, PacketRecipient.CLIENT) + .registerPacket(UnlockedRecipesPacket::new, new UnlockedRecipesSerializer_v575(), 199, PacketRecipient.CLIENT) + .registerPacket(CameraInstructionPacket::new, new CameraInstructionSerializer_v575(), 300, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java index 83e38d1cb..28af0cc35 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java @@ -9,6 +9,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v582.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -54,8 +55,8 @@ public class Bedrock_v582 extends Bedrock_v575 { .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v448(COMMAND_PARAMS)) - .registerPacket(CompressedBiomeDefinitionListPacket::new, CompressedBiomeDefinitionListSerializer_v582.INSTANCE, 301) - .registerPacket(TrimDataPacket::new, TrimDataSerializer_v582.INSTANCE, 302) - .registerPacket(OpenSignPacket::new, OpenSignSerializer_v582.INSTANCE, 303) + .registerPacket(CompressedBiomeDefinitionListPacket::new, CompressedBiomeDefinitionListSerializer_v582.INSTANCE, 301, PacketRecipient.CLIENT) + .registerPacket(TrimDataPacket::new, TrimDataSerializer_v582.INSTANCE, 302, PacketRecipient.CLIENT) + .registerPacket(OpenSignPacket::new, OpenSignSerializer_v582.INSTANCE, 303, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v594/Bedrock_v594.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v594/Bedrock_v594.java index baf4b1e06..323da9920 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v594/Bedrock_v594.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v594/Bedrock_v594.java @@ -8,6 +8,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.serializer.AgentAnimationSerializer_v594; import org.cloudburstmc.protocol.bedrock.codec.v594.serializer.AvailableCommandsSerializer_v594; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -44,6 +45,6 @@ public class Bedrock_v594 extends Bedrock_v589 { .helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) .deregisterPacket(ScriptCustomEventPacket.class) .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v594(COMMAND_PARAMS)) - .registerPacket(AgentAnimationPacket::new, new AgentAnimationSerializer_v594(), 304) + .registerPacket(AgentAnimationPacket::new, new AgentAnimationSerializer_v594(), 304, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java index 6cbb4c58c..cd2bff151 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java @@ -14,6 +14,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v618.serializer.RefreshEntitlementsSerializer_v618; import org.cloudburstmc.protocol.bedrock.codec.v618.serializer.ResourcePacksInfoSerializer_v618; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.ParticleType; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -68,6 +69,6 @@ public class Bedrock_v618 extends Bedrock_v594 { .updateSerializer(ResourcePacksInfoPacket.class, ResourcePacksInfoSerializer_v618.INSTANCE) .updateSerializer(CameraPresetsPacket.class, new CameraPresetsSerializer_v618()) .updateSerializer(CameraInstructionPacket.class, new CameraInstructionSerializer_618()) - .registerPacket(RefreshEntitlementsPacket::new, new RefreshEntitlementsSerializer_v618(), 305) + .registerPacket(RefreshEntitlementsPacket::new, new RefreshEntitlementsSerializer_v618(), 305, PacketRecipient.CLIENT) .build(); } \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v630/Bedrock_v630.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v630/Bedrock_v630.java index cfaa6218d..b6e67a494 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v630/Bedrock_v630.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v630/Bedrock_v630.java @@ -12,10 +12,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v630.serializer.SetPlayerInventoryOptionsSerializer_v360; import org.cloudburstmc.protocol.bedrock.codec.v630.serializer.ShowStoreOfferSerializer_v630; import org.cloudburstmc.protocol.bedrock.codec.v630.serializer.ToggleCrafterSlotRequestSerializer_v630; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -70,7 +67,7 @@ public class Bedrock_v630 extends Bedrock_v622 { .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(ShowStoreOfferPacket.class, ShowStoreOfferSerializer_v630.INSTANCE) - .registerPacket(ToggleCrafterSlotRequestPacket::new, new ToggleCrafterSlotRequestSerializer_v630(), 306) - .registerPacket(SetPlayerInventoryOptionsPacket::new, new SetPlayerInventoryOptionsSerializer_v360(), 307) + .registerPacket(ToggleCrafterSlotRequestPacket::new, new ToggleCrafterSlotRequestSerializer_v630(), 306, PacketRecipient.SERVER) + .registerPacket(SetPlayerInventoryOptionsPacket::new, new SetPlayerInventoryOptionsSerializer_v360(), 307, PacketRecipient.BOTH) .build(); } \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v649/Bedrock_v649.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v649/Bedrock_v649.java index 28ba1e252..3797fc81d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v649/Bedrock_v649.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v649/Bedrock_v649.java @@ -10,10 +10,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.codec.v649.serializer.*; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.packet.*; import org.cloudburstmc.protocol.bedrock.transformer.TypeMapTransformer; @@ -69,6 +66,6 @@ public class Bedrock_v649 extends Bedrock_v630 { .updateSerializer(LevelChunkPacket.class, LevelChunkSerializer_v649.INSTANCE) .updateSerializer(PlayerAuthInputPacket.class, new PlayerAuthInputSerializer_v649()) .updateSerializer(PlayerListPacket.class, PlayerListSerializer_v649.INSTANCE) - .registerPacket(SetHudPacket::new, SetHudSerializer_v649.INSTANCE, 308) + .registerPacket(SetHudPacket::new, SetHudSerializer_v649.INSTANCE, 308, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PacketRecipient.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PacketRecipient.java new file mode 100644 index 000000000..3aa4a39a7 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PacketRecipient.java @@ -0,0 +1,19 @@ +package org.cloudburstmc.protocol.bedrock.data; + +/** + * Describes who receives a packet. + */ +public enum PacketRecipient { + /** + * The packet is sent to the client. + */ + CLIENT, + /** + * The packet is sent to the server. + */ + SERVER, + /** + * The packet is sent to both the client and the server. + */ + BOTH +} diff --git a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/PacketDirection.java b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/PacketDirection.java new file mode 100644 index 000000000..b811b6a57 --- /dev/null +++ b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/PacketDirection.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock; + +import io.netty.util.AttributeKey; +import lombok.Getter; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; + +@Getter +public enum PacketDirection { + /** + * All packets sent by this channel are going to client. + */ + CLIENT_BOUND(PacketRecipient.SERVER, PacketRecipient.CLIENT), + /** + * All packets sent by this channel are going to server. + */ + SERVER_BOUND(PacketRecipient.CLIENT, PacketRecipient.SERVER); + + public static final AttributeKey ATTRIBUTE = AttributeKey.newInstance("packet_direction"); + + private final PacketRecipient inbound; + private final PacketRecipient outbound; + + PacketDirection(PacketRecipient inbound, PacketRecipient outbound) { + this.inbound = inbound; + this.outbound = outbound; + } +} diff --git a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java index 7ab2e6863..1f0f563be 100644 --- a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java +++ b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java @@ -3,11 +3,14 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageCodec; +import io.netty.util.Attribute; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; +import org.cloudburstmc.protocol.bedrock.PacketDirection; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.compat.BedrockCompat; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.netty.BedrockPacketWrapper; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.cloudburstmc.protocol.bedrock.packet.UnknownPacket; @@ -17,14 +20,22 @@ import static java.util.Objects.requireNonNull; public abstract class BedrockPacketCodec extends MessageToMessageCodec { - - public static final String NAME = "bedrock-packet-codec"; - private static final InternalLogger log = InternalLoggerFactory.getInstance(BedrockPacketCodec.class); + public static final String NAME = "bedrock-packet-codec"; private BedrockCodec codec = BedrockCompat.CODEC; private BedrockCodecHelper helper = codec.createHelper(); + private PacketRecipient inboundRecipient; + + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + Attribute attribute = ctx.channel().attr(PacketDirection.ATTRIBUTE); + if (attribute != null) { + this.inboundRecipient = attribute.get().getInbound(); + } + } + @Override protected final void encode(ChannelHandlerContext ctx, BedrockPacketWrapper msg, List out) throws Exception { if (msg.getPacketBuffer() != null) { @@ -56,7 +67,7 @@ protected final void decode(ChannelHandlerContext ctx, ByteBuf msg, List int index = msg.readerIndex(); this.decodeHeader(msg, wrapper); wrapper.setHeaderLength(msg.readerIndex() - index); - wrapper.setPacket(this.codec.tryDecode(helper, msg, wrapper.getPacketId())); + wrapper.setPacket(this.codec.tryDecode(helper, msg, wrapper.getPacketId(), this.inboundRecipient)); out.add(wrapper.retain()); } catch (Throwable t) { log.info("Failed to decode packet", t); diff --git a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockClientInitializer.java b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockClientInitializer.java index d59bfe52a..2ee57008e 100644 --- a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockClientInitializer.java +++ b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockClientInitializer.java @@ -1,10 +1,18 @@ package org.cloudburstmc.protocol.bedrock.netty.initializer; +import io.netty.channel.Channel; import org.cloudburstmc.protocol.bedrock.BedrockClientSession; import org.cloudburstmc.protocol.bedrock.BedrockPeer; +import org.cloudburstmc.protocol.bedrock.PacketDirection; public abstract class BedrockClientInitializer extends BedrockChannelInitializer { + @Override + protected void preInitChannel(Channel channel) throws Exception { + channel.attr(PacketDirection.ATTRIBUTE).set(PacketDirection.SERVER_BOUND); + super.preInitChannel(channel); + } + @Override public BedrockClientSession createSession0(BedrockPeer peer, int subClientId) { return new BedrockClientSession(peer, subClientId); diff --git a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockServerInitializer.java b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockServerInitializer.java index 6b9a40f59..50ece5973 100644 --- a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockServerInitializer.java +++ b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/initializer/BedrockServerInitializer.java @@ -1,10 +1,18 @@ package org.cloudburstmc.protocol.bedrock.netty.initializer; +import io.netty.channel.Channel; import org.cloudburstmc.protocol.bedrock.BedrockPeer; import org.cloudburstmc.protocol.bedrock.BedrockServerSession; +import org.cloudburstmc.protocol.bedrock.PacketDirection; public abstract class BedrockServerInitializer extends BedrockChannelInitializer { + @Override + protected void preInitChannel(Channel channel) throws Exception { + channel.attr(PacketDirection.ATTRIBUTE).set(PacketDirection.CLIENT_BOUND); + super.preInitChannel(channel); + } + @Override public BedrockServerSession createSession0(BedrockPeer peer, int subClientId) { return new BedrockServerSession(peer, subClientId); From 68dc192f8ebca6d76c486e53d04a6f91187d62e9 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Mon, 8 Apr 2024 18:18:41 +0200 Subject: [PATCH 04/18] Introduce limits to arrays/lists Note: The limits are very experimental and may need to be changes. --- .../bedrock/codec/BaseBedrockCodecHelper.java | 54 ++++++++++++++++--- .../bedrock/codec/BedrockCodecHelper.java | 25 ++++++--- .../CraftingEventSerializer_v291.java | 8 +-- .../serializer/PlayerSkinSerializer_v291.java | 4 +- .../codec/v388/BedrockCodecHelper_v388.java | 17 +++--- .../codec/v390/BedrockCodecHelper_v390.java | 40 ++++++-------- .../codec/v407/BedrockCodecHelper_v407.java | 7 +-- .../InventoryTransactionSerializer_v407.java | 2 +- .../ItemStackRequestSerializer_v407.java | 2 +- .../codec/v419/BedrockCodecHelper_v419.java | 2 +- .../codec/v422/BedrockCodecHelper_v422.java | 2 +- .../codec/v428/BedrockCodecHelper_v428.java | 39 ++++++-------- .../PlayerAuthInputSerializer_v428.java | 7 +-- .../codec/v431/BedrockCodecHelper_v431.java | 2 +- .../codec/v465/BedrockCodecHelper_v465.java | 39 ++++++-------- .../MapInfoRequestSerializer_v544.java | 2 +- .../codec/v554/BedrockCodecHelper_v554.java | 2 +- .../codec/v568/BedrockCodecHelper_v568.java | 39 ++++++-------- .../bedrock/codec/v662/Bedrock_v662.java | 2 + .../bedrock/data/EncodingSettings.java | 18 +++++++ .../protocol/bedrock/data/skin/ImageData.java | 10 ++-- 21 files changed, 186 insertions(+), 137 deletions(-) create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java index 55aa6f2e6..efee183e7 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java @@ -18,6 +18,7 @@ import org.cloudburstmc.nbt.NBTOutputStream; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; +import org.cloudburstmc.protocol.bedrock.data.EncodingSettings; import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.PlayerAbilityHolder; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; @@ -34,7 +35,6 @@ import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin; import org.cloudburstmc.protocol.bedrock.data.structure.StructureSettings; import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; -import org.cloudburstmc.protocol.common.Definition; import org.cloudburstmc.protocol.common.DefinitionRegistry; import org.cloudburstmc.protocol.common.NamedDefinition; import org.cloudburstmc.protocol.common.util.TriConsumer; @@ -66,14 +66,24 @@ public abstract class BaseBedrockCodecHelper implements BedrockCodecHelper { @Setter protected DefinitionRegistry blockDefinitions; + @Getter + @Setter + protected EncodingSettings encodingSettings = EncodingSettings.DEFAULT; + protected static boolean isAir(ItemDefinition definition) { return definition == null || "minecraft:air".equals(definition.getIdentifier()); } + @Override public byte[] readByteArray(ByteBuf buffer) { + return this.readByteArray(buffer, this.encodingSettings.maxByteArraySize()); + } + + public byte[] readByteArray(ByteBuf buffer, int maxLength) { int length = VarInts.readUnsignedInt(buffer); checkArgument(buffer.isReadable(length), "Tried to read %s bytes but only has %s readable", length, buffer.readableBytes()); + checkArgument(maxLength <= 0 || length <= maxLength, "Tried to read %s bytes but maximum is %s", length, maxLength); byte[] bytes = new byte[length]; buffer.readBytes(bytes); return bytes; @@ -191,9 +201,20 @@ public void writeBlockPosition(ByteBuf buffer, Vector3i blockPosition) { */ @Override - public void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, - BiFunction function) { + public void readArray(ByteBuf buffer, Collection array, BiFunction function) { + this.readArray(buffer, array, function, this.encodingSettings.maxListSize()); + } + + @Override + public void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, BiFunction function) { + this.readArray(buffer, array, lengthReader, function, this.encodingSettings.maxListSize()); + } + + @Override + public void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, BiFunction function, int maxLength) { long length = lengthReader.applyAsLong(buffer); + checkArgument(maxLength <= 0 || length <= maxLength, "Tried to read %s bytes but maximum is %s", length, maxLength); + for (int i = 0; i < length; i++) { array.add(function.apply(buffer, this)); } @@ -209,8 +230,13 @@ public void writeArray(ByteBuf buffer, Collection array, ObjIntConsumer T[] readArray(ByteBuf buffer, T[] array, BiFunction function) { + return this.readArray(buffer, array, function, this.encodingSettings.maxListSize()); + } + + @Override + public T[] readArray(ByteBuf buffer, T[] array, BiFunction function, int maxLength) { ObjectArrayList list = new ObjectArrayList<>(); - readArray(buffer, list, function); + readArray(buffer, list, function, maxLength); return list.toArray(array); } @@ -227,7 +253,14 @@ public void writeArray(ByteBuf buffer, T[] array, TriConsumer void readArray(ByteBuf buffer, Collection array, Function function) { + this.readArray(buffer, array, function, this.encodingSettings.maxListSize()); + } + + @Override + public void readArray(ByteBuf buffer, Collection array, Function function, int maxLength) { int length = VarInts.readUnsignedInt(buffer); + checkArgument(maxLength <= 0 || length <= maxLength, "Tried to read %s bytes but maximum is %s", length, maxLength); + for (int i = 0; i < length; i++) { array.add(function.apply(buffer)); } @@ -243,8 +276,13 @@ public void writeArray(ByteBuf buffer, Collection array, BiConsumer T[] readArray(ByteBuf buffer, T[] array, Function function) { + return this.readArray(buffer, array, function, this.encodingSettings.maxListSize()); + } + + @Override + public T[] readArray(ByteBuf buffer, T[] array, Function function, int maxLength) { ObjectArrayList list = new ObjectArrayList<>(); - readArray(buffer, list, function); + readArray(buffer, list, function, maxLength); return list.toArray(array); } @@ -348,7 +386,7 @@ public boolean readInventoryActions(ByteBuf buffer, List ac ItemData toItem = helper.readItem(buf); return new InventoryActionData(source, slot, fromItem, toItem); - }); + }, 64); // 64 should be enough return false; } @@ -448,6 +486,10 @@ protected void writeAnimationData(ByteBuf buffer, AnimationData animation) { } protected ImageData readImage(ByteBuf buffer) { + return this.readImage(buffer, ImageData.SKIN_PERSONA_SIZE); + } + + protected ImageData readImage(ByteBuf buffer, int maxSize) { throw new UnsupportedOperationException(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java index 7a4aef31a..63934d8cc 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java @@ -5,6 +5,7 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtType; +import org.cloudburstmc.protocol.bedrock.data.EncodingSettings; import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.GameRuleData; import org.cloudburstmc.protocol.bedrock.data.PlayerAbilityHolder; @@ -23,7 +24,6 @@ import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin; import org.cloudburstmc.protocol.bedrock.data.structure.StructureSettings; import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; -import org.cloudburstmc.protocol.common.Definition; import org.cloudburstmc.protocol.common.DefinitionRegistry; import org.cloudburstmc.protocol.common.NamedDefinition; import org.cloudburstmc.protocol.common.util.TriConsumer; @@ -48,33 +48,44 @@ public interface BedrockCodecHelper { DefinitionRegistry getCameraPresetDefinitions(); + EncodingSettings getEncodingSettings(); + // Array serialization (with helper) - default void readArray(ByteBuf buffer, Collection array, BiFunction function) { - readArray(buffer, array, VarInts::readUnsignedInt, function); + void readArray(ByteBuf buffer, Collection array, BiFunction function); + + default void readArray(ByteBuf buffer, Collection array, BiFunction function, int maxLength) { + this.readArray(buffer, array, VarInts::readUnsignedInt, function, maxLength); } - void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, - BiFunction function); + void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, BiFunction function); + + void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, BiFunction function, int maxLength); default void writeArray(ByteBuf buffer, Collection array, TriConsumer consumer) { - writeArray(buffer, array, VarInts::writeUnsignedInt, consumer); + this.writeArray(buffer, array, VarInts::writeUnsignedInt, consumer); } void writeArray(ByteBuf buffer, Collection array, ObjIntConsumer lengthWriter, TriConsumer consumer); T[] readArray(ByteBuf buffer, T[] array, BiFunction function); + T[] readArray(ByteBuf buffer, T[] array, BiFunction function, int maxLength); + void writeArray(ByteBuf buffer, T[] array, TriConsumer consumer); // Array serialization (without helper) void readArray(ByteBuf buffer, Collection array, Function function); + void readArray(ByteBuf buffer, Collection array, Function function, int maxLength); + void writeArray(ByteBuf buffer, Collection array, BiConsumer consumer); T[] readArray(ByteBuf buffer, T[] array, Function function); + T[] readArray(ByteBuf buffer, T[] array, Function function, int maxLength); + void writeArray(ByteBuf buffer, T[] array, BiConsumer consumer); // Encoding methods @@ -121,6 +132,8 @@ default void writeArray(ByteBuf buffer, Collection array, TriConsumer helper.writeItem(buf, item)); - helper.writeArray(buffer, packet.getOutputs(), (buf, item) -> helper.writeItem(buf, item)); + helper.writeArray(buffer, packet.getInputs(), helper::writeItem); + helper.writeArray(buffer, packet.getOutputs(), helper::writeItem); } @Override @@ -29,7 +29,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CraftingEvent packet.setType(CraftingType.values()[VarInts.readInt(buffer)]); packet.setUuid(helper.readUuid(buffer)); - helper.readArray(buffer, packet.getInputs(), buf -> helper.readItem(buf)); - helper.readArray(buffer, packet.getOutputs(), buf -> helper.readItem(buf)); + helper.readArray(buffer, packet.getInputs(), helper::readItem, 9); // crafting table is the biggest container + helper.readArray(buffer, packet.getOutputs(), helper::readItem, 2); // I have seen Custom recipes with more than 1 output } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PlayerSkinSerializer_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PlayerSkinSerializer_v291.java index c51891970..4bf54d56f 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PlayerSkinSerializer_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PlayerSkinSerializer_v291.java @@ -35,8 +35,8 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerSkinPac String skinId = helper.readString(buffer); packet.setNewSkinName(helper.readString(buffer)); packet.setOldSkinName(helper.readString(buffer)); - ImageData skinData = ImageData.of(helper.readByteArray(buffer)); - ImageData capeData = ImageData.of(64, 32, helper.readByteArray(buffer)); + ImageData skinData = ImageData.of(helper.readByteArray(buffer, ImageData.SKIN_PERSONA_SIZE)); + ImageData capeData = ImageData.of(64, 32, helper.readByteArray(buffer, ImageData.SINGLE_SKIN_SIZE)); String geometryName = helper.readString(buffer); String geometryData = helper.readString(buffer); boolean premium = buffer.readBoolean(); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/BedrockCodecHelper_v388.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/BedrockCodecHelper_v388.java index 079605eba..236c9ea96 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/BedrockCodecHelper_v388.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/BedrockCodecHelper_v388.java @@ -33,15 +33,12 @@ public BedrockCodecHelper_v388(EntityDataTypeMap entityData, TypeMap> g public SerializedSkin readSkin(ByteBuf buffer) { String skinId = this.readString(buffer); String skinResourcePatch = this.readString(buffer); - ImageData skinData = this.readImage(buffer); + ImageData skinData = this.readImage(buffer, ImageData.SKIN_PERSONA_SIZE); - int animationCount = buffer.readIntLE(); - List animations = new ObjectArrayList<>(animationCount); - for (int i = 0; i < animationCount; i++) { - animations.add(this.readAnimationData(buffer)); - } + List animations = new ObjectArrayList<>(); + this.readArray(buffer, animations, ByteBuf::readIntLE, (b, h) -> this.readAnimationData(b)); - ImageData capeData = this.readImage(buffer); + ImageData capeData = this.readImage(buffer, ImageData.SINGLE_SKIN_SIZE); String geometryData = this.readString(buffer); String animationData = this.readString(buffer); boolean premium = buffer.readBoolean(); @@ -80,7 +77,7 @@ public void writeSkin(ByteBuf buffer, SerializedSkin skin) { @Override public AnimationData readAnimationData(ByteBuf buffer) { - ImageData image = this.readImage(buffer); + ImageData image = this.readImage(buffer, ImageData.SKIN_128_128_SIZE); AnimatedTextureType type = TEXTURE_TYPES[buffer.readIntLE()]; float frames = buffer.readFloatLE(); return new AnimationData(image, type, frames); @@ -94,10 +91,10 @@ public void writeAnimationData(ByteBuf buffer, AnimationData animation) { } @Override - public ImageData readImage(ByteBuf buffer) { + public ImageData readImage(ByteBuf buffer, int maxSize) { int width = buffer.readIntLE(); int height = buffer.readIntLE(); - byte[] image = readByteArray(buffer); + byte[] image = readByteArray(buffer, maxSize); return ImageData.of(width, height, image); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/BedrockCodecHelper_v390.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/BedrockCodecHelper_v390.java index 0897bb3ba..46f5a686e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/BedrockCodecHelper_v390.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/BedrockCodecHelper_v390.java @@ -21,15 +21,12 @@ public BedrockCodecHelper_v390(EntityDataTypeMap entityData, TypeMap> g public SerializedSkin readSkin(ByteBuf buffer) { String skinId = this.readString(buffer); String skinResourcePatch = this.readString(buffer); - ImageData skinData = this.readImage(buffer); + ImageData skinData = this.readImage(buffer, ImageData.SKIN_PERSONA_SIZE); - int animationCount = buffer.readIntLE(); List animations = new ObjectArrayList<>(); - for (int i = 0; i < animationCount; i++) { - animations.add(this.readAnimationData(buffer)); - } + this.readArray(buffer, animations, ByteBuf::readIntLE, (b, h) -> this.readAnimationData(b)); - ImageData capeData = this.readImage(buffer); + ImageData capeData = this.readImage(buffer, ImageData.SINGLE_SKIN_SIZE); String geometryData = this.readString(buffer); String animationData = this.readString(buffer); boolean premium = buffer.readBoolean(); @@ -41,28 +38,25 @@ public SerializedSkin readSkin(ByteBuf buffer) { String skinColor = this.readString(buffer); List personaPieces = new ObjectArrayList<>(); - int piecesLength = buffer.readIntLE(); - for (int i = 0; i < piecesLength; i++) { - String pieceId = this.readString(buffer); - String pieceType = this.readString(buffer); - String packId = this.readString(buffer); - boolean isDefault = buffer.readBoolean(); - String productId = this.readString(buffer); - personaPieces.add(new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId)); - } + this.readArray(buffer, personaPieces, ByteBuf::readIntLE, (buf, h) -> { + String pieceId = this.readString(buf); + String pieceType = this.readString(buf); + String packId = this.readString(buf); + boolean isDefault = buf.readBoolean(); + String productId = this.readString(buf); + return new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId); + }); List tintColors = new ObjectArrayList<>(); - int tintsLength = buffer.readIntLE(); - for (int i = 0; i < tintsLength; i++) { - String pieceType = this.readString(buffer); + this.readArray(buffer, tintColors, ByteBuf::readIntLE, (buf, h) -> { + String pieceType = this.readString(buf); List colors = new ObjectArrayList<>(); - int colorsLength = buffer.readIntLE(); + int colorsLength = buf.readIntLE(); for (int i2 = 0; i2 < colorsLength; i2++) { - colors.add(this.readString(buffer)); + colors.add(this.readString(buf)); } - tintColors.add(new PersonaPieceTintData(pieceType, colors)); - } - + return new PersonaPieceTintData(pieceType, colors); + }); return SerializedSkin.of(skinId, "", skinResourcePatch, skinData, animations, capeData, geometryData, animationData, premium, persona, capeOnClassic, capeId, fullSkinId, armSize, skinColor, personaPieces, tintColors); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java index b0a415fab..93f1a9917 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java @@ -1,6 +1,7 @@ package org.cloudburstmc.protocol.bedrock.codec.v407; import io.netty.buffer.ByteBuf; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; import org.cloudburstmc.protocol.bedrock.codec.v390.BedrockCodecHelper_v390; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; @@ -75,7 +76,7 @@ public boolean readInventoryActions(ByteBuf buffer, List ac } return new InventoryActionData(source, slot, fromItem, toItem, networkStackId); - }); + }, 64); // 64 should be enough return hasNetworkIds; } @@ -110,12 +111,12 @@ public void writeNetItem(ByteBuf buffer, ItemData item) { @Override public ItemStackRequest readItemStackRequest(ByteBuf buffer) { int requestId = VarInts.readInt(buffer); - List actions = new ArrayList<>(); + List actions = new ObjectArrayList<>(); this.readArray(buffer, actions, byteBuf -> { ItemStackRequestActionType type = this.stackRequestActionTypes.getType(byteBuf.readByte()); return readRequestActionData(byteBuf, type); - }); + }, 32); return new ItemStackRequest(requestId, actions.toArray(new ItemStackRequestAction[0]), new String[0]); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/InventoryTransactionSerializer_v407.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/InventoryTransactionSerializer_v407.java index 6fdbb4ea1..1010bef87 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/InventoryTransactionSerializer_v407.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/InventoryTransactionSerializer_v407.java @@ -52,7 +52,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryTran if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { helper.readArray(buffer, packet.getLegacySlots(), (buf, packetHelper) -> { byte containerId = buf.readByte(); - byte[] slots = packetHelper.readByteArray(buf); + byte[] slots = packetHelper.readByteArray(buf, 89); // 89 seems to be the largest slot count return new LegacySetItemSlotData(containerId, slots); }); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackRequestSerializer_v407.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackRequestSerializer_v407.java index 49422c83f..7f4ca7aa8 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackRequestSerializer_v407.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackRequestSerializer_v407.java @@ -19,6 +19,6 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ItemStackReques @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemStackRequestPacket packet) { - helper.readArray(buffer, packet.getRequests(), helper::readItemStackRequest); + helper.readArray(buffer, packet.getRequests(), helper::readItemStackRequest, 64); // 64 should be enough } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/BedrockCodecHelper_v419.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/BedrockCodecHelper_v419.java index e9e9cd816..fa19b1d33 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/BedrockCodecHelper_v419.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/BedrockCodecHelper_v419.java @@ -46,7 +46,7 @@ public void writeExperiments(ByteBuf buffer, List experiments) { @Override public AnimationData readAnimationData(ByteBuf buffer) { - ImageData image = this.readImage(buffer); + ImageData image = this.readImage(buffer, ImageData.SKIN_128_128_SIZE); AnimatedTextureType textureType = TEXTURE_TYPES[buffer.readIntLE()]; float frames = buffer.readFloatLE(); AnimationExpressionType expressionType = EXPRESSION_TYPES[buffer.readIntLE()]; diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java index 2debe930c..b9f830856 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java @@ -29,7 +29,7 @@ public ItemStackRequest readItemStackRequest(ByteBuf buffer) { this.readArray(buffer, actions, byteBuf -> { ItemStackRequestActionType type = this.stackRequestActionTypes.getType(byteBuf.readByte()); return readRequestActionData(byteBuf, type); - }); + }, 32); List filteredStrings = new ArrayList<>(); // new for v422 this.readArray(buffer, filteredStrings, this::readString); return new ItemStackRequest(requestId, actions.toArray(new ItemStackRequestAction[0]), filteredStrings.toArray(new String[0])); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java index 1f20e7b7e..4d609cba0 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java @@ -51,15 +51,12 @@ public SerializedSkin readSkin(ByteBuf buffer) { String skinId = this.readString(buffer); String playFabId = this.readString(buffer); // new for v428 String skinResourcePatch = this.readString(buffer); - ImageData skinData = this.readImage(buffer); + ImageData skinData = this.readImage(buffer, ImageData.SKIN_PERSONA_SIZE); - int animationCount = buffer.readIntLE(); List animations = new ObjectArrayList<>(); - for (int i = 0; i < animationCount; i++) { - animations.add(this.readAnimationData(buffer)); - } + this.readArray(buffer, animations, ByteBuf::readIntLE, (b, h) -> this.readAnimationData(b)); - ImageData capeData = this.readImage(buffer); + ImageData capeData = this.readImage(buffer, ImageData.SINGLE_SKIN_SIZE); String geometryData = this.readString(buffer); String animationData = this.readString(buffer); boolean premium = buffer.readBoolean(); @@ -71,27 +68,25 @@ public SerializedSkin readSkin(ByteBuf buffer) { String skinColor = this.readString(buffer); List personaPieces = new ObjectArrayList<>(); - int piecesLength = buffer.readIntLE(); - for (int i = 0; i < piecesLength; i++) { - String pieceId = this.readString(buffer); - String pieceType = this.readString(buffer); - String packId = this.readString(buffer); - boolean isDefault = buffer.readBoolean(); - String productId = this.readString(buffer); - personaPieces.add(new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId)); - } + this.readArray(buffer, personaPieces, ByteBuf::readIntLE, (buf, h) -> { + String pieceId = this.readString(buf); + String pieceType = this.readString(buf); + String packId = this.readString(buf); + boolean isDefault = buf.readBoolean(); + String productId = this.readString(buf); + return new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId); + }); List tintColors = new ObjectArrayList<>(); - int tintsLength = buffer.readIntLE(); - for (int i = 0; i < tintsLength; i++) { - String pieceType = this.readString(buffer); + this.readArray(buffer, tintColors, ByteBuf::readIntLE, (buf, h) -> { + String pieceType = this.readString(buf); List colors = new ObjectArrayList<>(); - int colorsLength = buffer.readIntLE(); + int colorsLength = buf.readIntLE(); for (int i2 = 0; i2 < colorsLength; i2++) { - colors.add(this.readString(buffer)); + colors.add(this.readString(buf)); } - tintColors.add(new PersonaPieceTintData(pieceType, colors)); - } + return new PersonaPieceTintData(pieceType, colors); + }); return SerializedSkin.of(skinId, playFabId, skinResourcePatch, skinData, animations, capeData, geometryData, animationData, premium, persona, capeOnClassic, capeId, fullSkinId, armSize, skinColor, personaPieces, tintColors); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java index 7bf89c98a..5a27c12e1 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java @@ -71,7 +71,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInp if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { helper.readArray(buffer, itemTransaction.getLegacySlots(), (buf, packetHelper) -> { byte containerId = buf.readByte(); - byte[] slots = packetHelper.readByteArray(buf); + byte[] slots = packetHelper.readByteArray(buf, 89); return new LegacySetItemSlotData(containerId, slots); }); } @@ -93,10 +93,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInp } if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_BLOCK_ACTIONS)) { - int arraySize = VarInts.readInt(buffer); - for (int i = 0; i < arraySize; i++) { - packet.getPlayerActions().add(readPlayerBlockActionData(buffer, helper)); - } + helper.readArray(buffer, packet.getPlayerActions(), VarInts::readInt, this::readPlayerBlockActionData, 32); // 32 is more than enough } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java index 141b151d3..4ce21be16 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java @@ -299,7 +299,7 @@ public boolean readInventoryActions(ByteBuf buffer, List ac ItemData toItem = helper.readItem(buf); return new InventoryActionData(source, slot, fromItem, toItem); - }); + }, 64); // 64 should be enough return false; } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/BedrockCodecHelper_v465.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/BedrockCodecHelper_v465.java index 266accc9c..53a24daaa 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/BedrockCodecHelper_v465.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/BedrockCodecHelper_v465.java @@ -26,15 +26,12 @@ public SerializedSkin readSkin(ByteBuf buffer) { String skinId = this.readString(buffer); String playFabId = this.readString(buffer); String skinResourcePatch = this.readString(buffer); - ImageData skinData = this.readImage(buffer); + ImageData skinData = this.readImage(buffer, ImageData.SKIN_PERSONA_SIZE); - int animationCount = buffer.readIntLE(); List animations = new ObjectArrayList<>(); - for (int i = 0; i < animationCount; i++) { - animations.add(this.readAnimationData(buffer)); - } + this.readArray(buffer, animations, ByteBuf::readIntLE, (b, h) -> this.readAnimationData(b)); - ImageData capeData = this.readImage(buffer); + ImageData capeData = this.readImage(buffer, ImageData.SINGLE_SKIN_SIZE); String geometryData = this.readString(buffer); String geometryDataEngineVersion = this.readString(buffer); String animationData = this.readString(buffer); @@ -44,27 +41,25 @@ public SerializedSkin readSkin(ByteBuf buffer) { String skinColor = this.readString(buffer); List personaPieces = new ObjectArrayList<>(); - int piecesLength = buffer.readIntLE(); - for (int i = 0; i < piecesLength; i++) { - String pieceId = this.readString(buffer); - String pieceType = this.readString(buffer); - String packId = this.readString(buffer); - boolean isDefault = buffer.readBoolean(); - String productId = this.readString(buffer); - personaPieces.add(new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId)); - } + this.readArray(buffer, personaPieces, ByteBuf::readIntLE, (buf, h) -> { + String pieceId = this.readString(buf); + String pieceType = this.readString(buf); + String packId = this.readString(buf); + boolean isDefault = buf.readBoolean(); + String productId = this.readString(buf); + return new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId); + }); List tintColors = new ObjectArrayList<>(); - int tintsLength = buffer.readIntLE(); - for (int i = 0; i < tintsLength; i++) { - String pieceType = this.readString(buffer); + this.readArray(buffer, tintColors, ByteBuf::readIntLE, (buf, h) -> { + String pieceType = this.readString(buf); List colors = new ObjectArrayList<>(); - int colorsLength = buffer.readIntLE(); + int colorsLength = buf.readIntLE(); for (int i2 = 0; i2 < colorsLength; i2++) { - colors.add(this.readString(buffer)); + colors.add(this.readString(buf)); } - tintColors.add(new PersonaPieceTintData(pieceType, colors)); - } + return new PersonaPieceTintData(pieceType, colors); + }); boolean premium = buffer.readBoolean(); boolean persona = buffer.readBoolean(); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/MapInfoRequestSerializer_v544.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/MapInfoRequestSerializer_v544.java index 88dcafe72..a27189fb5 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/MapInfoRequestSerializer_v544.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/MapInfoRequestSerializer_v544.java @@ -26,6 +26,6 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MapInfoReques int pixel = buf.readIntLE(); int index = buf.readUnsignedShortLE(); return new MapPixel(pixel, index); - }); + }, 128 * 128); // There shouldn't be map with more pixels } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/BedrockCodecHelper_v554.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/BedrockCodecHelper_v554.java index b81055546..2aa947156 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/BedrockCodecHelper_v554.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/BedrockCodecHelper_v554.java @@ -37,7 +37,7 @@ public ItemStackRequest readItemStackRequest(ByteBuf buffer) { this.readArray(buffer, actions, byteBuf -> { ItemStackRequestActionType type = this.stackRequestActionTypes.getType(byteBuf.readByte()); return readRequestActionData(byteBuf, type); - }); + }, 32); List filteredStrings = new ObjectArrayList<>(); this.readArray(buffer, filteredStrings, this::readString); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v568/BedrockCodecHelper_v568.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v568/BedrockCodecHelper_v568.java index a8606cb60..b1278ba26 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v568/BedrockCodecHelper_v568.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v568/BedrockCodecHelper_v568.java @@ -26,15 +26,12 @@ public SerializedSkin readSkin(ByteBuf buffer) { String skinId = this.readString(buffer); String playFabId = this.readString(buffer); String skinResourcePatch = this.readString(buffer); - ImageData skinData = this.readImage(buffer); + ImageData skinData = this.readImage(buffer, ImageData.SKIN_PERSONA_SIZE); - int animationCount = buffer.readIntLE(); List animations = new ObjectArrayList<>(); - for (int i = 0; i < animationCount; i++) { - animations.add(this.readAnimationData(buffer)); - } + this.readArray(buffer, animations, ByteBuf::readIntLE, (b, h) -> this.readAnimationData(b)); - ImageData capeData = this.readImage(buffer); + ImageData capeData = this.readImage(buffer, ImageData.SINGLE_SKIN_SIZE); String geometryData = this.readString(buffer); String geometryDataEngineVersion = this.readString(buffer); String animationData = this.readString(buffer); @@ -44,27 +41,25 @@ public SerializedSkin readSkin(ByteBuf buffer) { String skinColor = this.readString(buffer); List personaPieces = new ObjectArrayList<>(); - int piecesLength = buffer.readIntLE(); - for (int i = 0; i < piecesLength; i++) { - String pieceId = this.readString(buffer); - String pieceType = this.readString(buffer); - String packId = this.readString(buffer); - boolean isDefault = buffer.readBoolean(); - String productId = this.readString(buffer); - personaPieces.add(new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId)); - } + this.readArray(buffer, personaPieces, ByteBuf::readIntLE, (buf, h) -> { + String pieceId = this.readString(buf); + String pieceType = this.readString(buf); + String packId = this.readString(buf); + boolean isDefault = buf.readBoolean(); + String productId = this.readString(buf); + return new PersonaPieceData(pieceId, pieceType, packId, isDefault, productId); + }); List tintColors = new ObjectArrayList<>(); - int tintsLength = buffer.readIntLE(); - for (int i = 0; i < tintsLength; i++) { - String pieceType = this.readString(buffer); + this.readArray(buffer, tintColors, ByteBuf::readIntLE, (buf, h) -> { + String pieceType = this.readString(buf); List colors = new ObjectArrayList<>(); - int colorsLength = buffer.readIntLE(); + int colorsLength = buf.readIntLE(); for (int i2 = 0; i2 < colorsLength; i2++) { - colors.add(this.readString(buffer)); + colors.add(this.readString(buf)); } - tintColors.add(new PersonaPieceTintData(pieceType, colors)); - } + return new PersonaPieceTintData(pieceType, colors); + }); boolean premium = buffer.readBoolean(); boolean persona = buffer.readBoolean(); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v662/Bedrock_v662.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v662/Bedrock_v662.java index 52b6a7d66..b441253d8 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v662/Bedrock_v662.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v662/Bedrock_v662.java @@ -1,6 +1,7 @@ package org.cloudburstmc.protocol.bedrock.codec.v662; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketDefinition; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelEventSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; @@ -10,6 +11,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.ParticleType; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java new file mode 100644 index 000000000..ef5e8d81e --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java @@ -0,0 +1,18 @@ +package org.cloudburstmc.protocol.bedrock.data; + +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(fluent = true) +@Builder(builderClassName = "Builder", toBuilder = true) +public class EncodingSettings { + public static final EncodingSettings DEFAULT = EncodingSettings.builder() + .maxListSize(1024) + .maxByteArraySize(1024 * 1024) // 1MB + .build(); + + private final int maxListSize; + private final int maxByteArraySize; +} diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java index f8b4f3713..0c5737304 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java @@ -16,11 +16,11 @@ public class ImageData { private static final int PIXEL_SIZE = 4; - private static final int SINGLE_SKIN_SIZE = 64 * 32 * PIXEL_SIZE; - private static final int DOUBLE_SKIN_SIZE = 64 * 64 * PIXEL_SIZE; - private static final int SKIN_128_64_SIZE = 128 * 64 * PIXEL_SIZE; - private static final int SKIN_128_128_SIZE = 128 * 128 * PIXEL_SIZE; - private static final int SKIN_PERSONA_SIZE = 256 * 256 * PIXEL_SIZE; + public static final int SINGLE_SKIN_SIZE = 64 * 32 * PIXEL_SIZE; + public static final int DOUBLE_SKIN_SIZE = 64 * 64 * PIXEL_SIZE; + public static final int SKIN_128_64_SIZE = 128 * 64 * PIXEL_SIZE; + public static final int SKIN_128_128_SIZE = 128 * 128 * PIXEL_SIZE; + public static final int SKIN_PERSONA_SIZE = 256 * 256 * PIXEL_SIZE; private final int width; private final int height; From 4ca55646fe04ec4ac3d8286bf4c46a44d4dd0d1e Mon Sep 17 00:00:00 2001 From: Alemiz Date: Mon, 8 Apr 2024 22:17:18 +0200 Subject: [PATCH 05/18] Fix ServerSettingsRequestPacket packet direction --- .../protocol/bedrock/codec/v291/Bedrock_v291.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java index dd4a51245..08181bfc7 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java @@ -733,8 +733,8 @@ public class Bedrock_v291 { .registerPacket(PhotoTransferPacket::new, PhotoTransferSerializer_v291.INSTANCE, 99, PacketRecipient.CLIENT) .registerPacket(ModalFormRequestPacket::new, ModalFormRequestSerializer_v291.INSTANCE, 100, PacketRecipient.CLIENT) .registerPacket(ModalFormResponsePacket::new, ModalFormResponseSerializer_v291.INSTANCE, 101, PacketRecipient.SERVER) - .registerPacket(ServerSettingsRequestPacket::new, ServerSettingsRequestSerializer_v291.INSTANCE, 102, PacketRecipient.CLIENT) - .registerPacket(ServerSettingsResponsePacket::new, ServerSettingsResponseSerializer_v291.INSTANCE, 103, PacketRecipient.SERVER) + .registerPacket(ServerSettingsRequestPacket::new, ServerSettingsRequestSerializer_v291.INSTANCE, 102, PacketRecipient.SERVER) + .registerPacket(ServerSettingsResponsePacket::new, ServerSettingsResponseSerializer_v291.INSTANCE, 103, PacketRecipient.CLIENT) .registerPacket(ShowProfilePacket::new, ShowProfileSerializer_v291.INSTANCE, 104, PacketRecipient.CLIENT) .registerPacket(SetDefaultGameTypePacket::new, SetDefaultGameTypeSerializer_v291.INSTANCE, 105, PacketRecipient.CLIENT) .registerPacket(RemoveObjectivePacket::new, RemoveObjectiveSerializer_v291.INSTANCE, 106, PacketRecipient.CLIENT) From 25ce568bb2013b397937de1bdd7fb591cd518d40 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Mon, 8 Apr 2024 22:21:15 +0200 Subject: [PATCH 06/18] Make error message more clear --- .../org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java index 5a54d97ae..d42981698 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java @@ -49,7 +49,7 @@ public BedrockPacket tryDecode(BedrockCodecHelper helper, ByteBuf buf, int id, P if (definition != null && recipient != null && definition.getRecipient() != PacketRecipient.BOTH && definition.getRecipient() != recipient) { - throw new IllegalArgumentException("Packet " + definition.getFactory().get().getClass().getSimpleName() + " can not be sent by " + recipient); + throw new IllegalArgumentException("Packet " + definition.getFactory().get().getClass().getSimpleName() + " was sent to " + recipient + " instead of " + definition.getRecipient()); } BedrockPacket packet; From a344da4c548b6c6c919985feb5998e4edd30fb73 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Wed, 10 Apr 2024 21:15:54 +0200 Subject: [PATCH 07/18] Fix some more packet recipients --- .../protocol/bedrock/codec/v291/Bedrock_v291.java | 4 ++-- .../protocol/bedrock/codec/v486/Bedrock_v486.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java index 08181bfc7..3e0f91725 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java @@ -676,7 +676,7 @@ public class Bedrock_v291 { .registerPacket(SetHealthPacket::new, SetHealthSerializer_v291.INSTANCE, 42, PacketRecipient.CLIENT) .registerPacket(SetSpawnPositionPacket::new, SetSpawnPositionSerializer_v291.INSTANCE, 43, PacketRecipient.CLIENT) .registerPacket(AnimatePacket::new, AnimateSerializer_v291.INSTANCE, 44, PacketRecipient.BOTH) - .registerPacket(RespawnPacket::new, RespawnSerializer_v291.INSTANCE, 45, PacketRecipient.CLIENT) + .registerPacket(RespawnPacket::new, RespawnSerializer_v291.INSTANCE, 45, PacketRecipient.BOTH) .registerPacket(ContainerOpenPacket::new, ContainerOpenSerializer_v291.INSTANCE, 46, PacketRecipient.CLIENT) .registerPacket(ContainerClosePacket::new, ContainerCloseSerializer_v291.INSTANCE, 47, PacketRecipient.BOTH) .registerPacket(PlayerHotbarPacket::new, PlayerHotbarSerializer_v291.INSTANCE, 48, PacketRecipient.BOTH) @@ -740,7 +740,7 @@ public class Bedrock_v291 { .registerPacket(RemoveObjectivePacket::new, RemoveObjectiveSerializer_v291.INSTANCE, 106, PacketRecipient.CLIENT) .registerPacket(SetDisplayObjectivePacket::new, SetDisplayObjectiveSerializer_v291.INSTANCE, 107, PacketRecipient.CLIENT) .registerPacket(SetScorePacket::new, SetScoreSerializer_v291.INSTANCE, 108, PacketRecipient.CLIENT) - .registerPacket(LabTablePacket::new, LabTableSerializer_v291.INSTANCE, 109, PacketRecipient.CLIENT) + .registerPacket(LabTablePacket::new, LabTableSerializer_v291.INSTANCE, 109, PacketRecipient.BOTH) .registerPacket(UpdateBlockSyncedPacket::new, UpdateBlockSyncedSerializer_v291.INSTANCE, 110, PacketRecipient.CLIENT) .registerPacket(MoveEntityDeltaPacket::new, MoveEntityDeltaSerializer_v291.INSTANCE, 111, PacketRecipient.CLIENT) .registerPacket(SetScoreboardIdentityPacket::new, SetScoreboardIdentitySerializer_v291.INSTANCE, 112, PacketRecipient.CLIENT) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java index daf45f7d9..0515fd014 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java @@ -56,6 +56,6 @@ public class Bedrock_v486 extends Bedrock_v475 { .updateSerializer(SubChunkRequestPacket.class, SubChunkRequestSerializer_v486.INSTANCE) .registerPacket(PlayerStartItemCooldownPacket::new, PlayerStartItemCooldownSerializer_v486.INSTANCE, 176, PacketRecipient.CLIENT) .registerPacket(ScriptMessagePacket::new, ScriptMessageSerializer_v486.INSTANCE, 177, PacketRecipient.BOTH) - .registerPacket(CodeBuilderSourcePacket::new, CodeBuilderSourceSerializer_v486.INSTANCE, 178, PacketRecipient.SERVER) + .registerPacket(CodeBuilderSourcePacket::new, CodeBuilderSourceSerializer_v486.INSTANCE, 178, PacketRecipient.CLIENT) .build(); } From 83f94091ab50ab601bc63ca7c2efabc3cfb309fb Mon Sep 17 00:00:00 2001 From: Alemiz Date: Thu, 11 Apr 2024 13:05:17 +0200 Subject: [PATCH 08/18] Add limits to more packets --- .../bedrock/codec/BaseBedrockCodecHelper.java | 21 ++++++++++++++++--- .../bedrock/codec/BedrockCodecHelper.java | 6 ++++++ .../codec/v291/BedrockCodecHelper_v291.java | 2 ++ ...urcePackClientResponseSerializer_v291.java | 20 ++---------------- .../codec/v361/BedrockCodecHelper_v361.java | 2 ++ .../ClientCacheBlobStatusSerializer_v361.java | 7 +++++++ .../SubChunkRequestSerializer_v486.java | 10 ++------- 7 files changed, 39 insertions(+), 29 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java index efee183e7..cc96eb7cd 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java @@ -258,7 +258,17 @@ public void readArray(ByteBuf buffer, Collection array, Function void readArray(ByteBuf buffer, Collection array, Function function, int maxLength) { - int length = VarInts.readUnsignedInt(buffer); + this.readArray(buffer, array, VarInts::readUnsignedInt, function, maxLength); + } + + @Override + public void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, Function function) { + this.readArray(buffer, array, lengthReader, function, this.encodingSettings.maxListSize()); + } + + @Override + public void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, Function function, int maxLength) { + long length = lengthReader.applyAsLong(buffer); checkArgument(maxLength <= 0 || length <= maxLength, "Tried to read %s bytes but maximum is %s", length, maxLength); for (int i = 0; i < length; i++) { @@ -268,9 +278,14 @@ public void readArray(ByteBuf buffer, Collection array, Function void writeArray(ByteBuf buffer, Collection array, BiConsumer biConsumer) { - VarInts.writeUnsignedInt(buffer, array.size()); + this.writeArray(buffer, array, VarInts::writeUnsignedInt, biConsumer); + } + + @Override + public void writeArray(ByteBuf buffer, Collection array, ObjIntConsumer lengthWriter, BiConsumer consumer) { + lengthWriter.accept(buffer, array.size()); for (T val : array) { - biConsumer.accept(buffer, val); + consumer.accept(buffer, val); } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java index 63934d8cc..550315668 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java @@ -78,10 +78,16 @@ default void writeArray(ByteBuf buffer, Collection array, TriConsumer void readArray(ByteBuf buffer, Collection array, Function function); + void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, Function function); + + void readArray(ByteBuf buffer, Collection array, ToLongFunction lengthReader, Function function, int maxLength); + void readArray(ByteBuf buffer, Collection array, Function function, int maxLength); void writeArray(ByteBuf buffer, Collection array, BiConsumer consumer); + void writeArray(ByteBuf buffer, Collection array, ObjIntConsumer lengthWriter, BiConsumer consumer); + T[] readArray(ByteBuf buffer, T[] array, Function function); T[] readArray(ByteBuf buffer, T[] array, Function function, int maxLength); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java index 663638656..bae15f981 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java @@ -32,6 +32,7 @@ import java.util.function.Function; import java.util.function.Predicate; +import static org.cloudburstmc.protocol.common.util.Preconditions.checkArgument; import static org.cloudburstmc.protocol.common.util.Preconditions.checkNotNull; public class BedrockCodecHelper_v291 extends BaseBedrockCodecHelper { @@ -225,6 +226,7 @@ public void readEntityData(ByteBuf buffer, EntityDataMap entityDataMap) { checkNotNull(entityDataMap, "entityDataDictionary"); int length = VarInts.readUnsignedInt(buffer); + checkArgument(length <= this.encodingSettings.maxListSize(), "Entity data size is too big: {}", length); for (int i = 0; i < length; i++) { int id = VarInts.readUnsignedInt(buffer); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackClientResponseSerializer_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackClientResponseSerializer_v291.java index fda765bfb..79dec2572 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackClientResponseSerializer_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackClientResponseSerializer_v291.java @@ -21,29 +21,13 @@ public class ResourcePackClientResponseSerializer_v291 implements BedrockPacketS @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackClientResponsePacket packet) { buffer.writeByte(packet.getStatus().ordinal()); - - writeArrayShortLE(buffer, packet.getPackIds(), helper::writeString); + helper.writeArray(buffer, packet.getPackIds(), ByteBuf::writeShortLE, helper::writeString); } @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackClientResponsePacket packet) { Status status = Status.values()[buffer.readUnsignedByte()]; packet.setStatus(status); - - readArrayShortLE(buffer, packet.getPackIds(), helper::readString); - } - - protected void readArrayShortLE(ByteBuf buffer, Collection collection, Function function) { - int length = buffer.readUnsignedShortLE(); - for (int i = 0; i < length; i++) { - collection.add(function.apply(buffer)); - } - } - - protected void writeArrayShortLE(ByteBuf buffer, Collection collection, BiConsumer consumer) { - buffer.writeShortLE(collection.size()); - for (T t : collection) { - consumer.accept(buffer, t); - } + helper.readArray(buffer, packet.getPackIds(), ByteBuf::readUnsignedShortLE, helper::readString); } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java index 70cb852be..9c67e8a02 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java @@ -18,6 +18,7 @@ import java.util.Map; +import static org.cloudburstmc.protocol.common.util.Preconditions.checkArgument; import static org.cloudburstmc.protocol.common.util.Preconditions.checkNotNull; public class BedrockCodecHelper_v361 extends BedrockCodecHelper_v340 { @@ -31,6 +32,7 @@ public void readEntityData(ByteBuf buffer, EntityDataMap entityDataMap) { checkNotNull(entityDataMap, "entityDataDictionary"); int length = VarInts.readUnsignedInt(buffer); + checkArgument(length <= this.encodingSettings.maxListSize(), "Entity data size is too big: {}", length); for (int i = 0; i < length; i++) { int id = VarInts.readUnsignedInt(buffer); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ClientCacheBlobStatusSerializer_v361.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ClientCacheBlobStatusSerializer_v361.java index c84882a48..d2e4c685a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ClientCacheBlobStatusSerializer_v361.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ClientCacheBlobStatusSerializer_v361.java @@ -11,6 +11,8 @@ import java.util.function.LongConsumer; +import static org.cloudburstmc.protocol.common.util.Preconditions.checkArgument; + @NoArgsConstructor(access = AccessLevel.PROTECTED) public class ClientCacheBlobStatusSerializer_v361 implements BedrockPacketSerializer { public static final ClientCacheBlobStatusSerializer_v361 INSTANCE = new ClientCacheBlobStatusSerializer_v361(); @@ -28,8 +30,13 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientCacheBlob @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientCacheBlobStatusPacket packet) { + int maxLength = helper.getEncodingSettings().maxListSize(); + int naksLength = VarInts.readUnsignedInt(buffer); + checkArgument(naksLength <= maxLength, "Tried to read %s Nacks but maximum is %s", naksLength, maxLength); + int acksLength = VarInts.readUnsignedInt(buffer); + checkArgument(acksLength <= maxLength, "Tried to read %s Nacks but maximum is %s", acksLength, maxLength); LongList naks = packet.getNaks(); for (int i = 0; i < naksLength; i++) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/serializer/SubChunkRequestSerializer_v486.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/serializer/SubChunkRequestSerializer_v486.java index f14d21e18..e80784add 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/serializer/SubChunkRequestSerializer_v486.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/serializer/SubChunkRequestSerializer_v486.java @@ -18,20 +18,14 @@ public class SubChunkRequestSerializer_v486 extends SubChunkRequestSerializer_v4 public void serialize(ByteBuf buffer, BedrockCodecHelper helper, SubChunkRequestPacket packet) { VarInts.writeInt(buffer, packet.getDimension()); helper.writeVector3i(buffer, packet.getSubChunkPosition()); - - buffer.writeIntLE(packet.getPositionOffsets().size()); - packet.getPositionOffsets().forEach(position -> this.writeSubChunkOffset(buffer, position)); + helper.writeArray(buffer, packet.getPositionOffsets(), ByteBuf::writeIntLE, this::writeSubChunkOffset); } @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, SubChunkRequestPacket packet) { packet.setDimension(VarInts.readInt(buffer)); packet.setSubChunkPosition(helper.readVector3i(buffer)); - - int size = buffer.readIntLE(); // Unsigned but realistically, we're not going to read that many. - for (int i = 0; i < size; i++) { - packet.getPositionOffsets().add(this.readSubChunkOffset(buffer)); - } + helper.readArray(buffer, packet.getPositionOffsets(), ByteBuf::readIntLE, this::readSubChunkOffset); } protected void writeSubChunkOffset(ByteBuf buffer, Vector3i offsetPosition) { From 58c86ca09d3ef324eacfd8a73253dde8b370a70a Mon Sep 17 00:00:00 2001 From: Alemiz Date: Thu, 11 Apr 2024 13:35:33 +0200 Subject: [PATCH 09/18] Add mvnLocal --- settings.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/settings.gradle.kts b/settings.gradle.kts index 33a91ab3c..795ebb5f2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,6 +8,7 @@ pluginManagement { } dependencyResolutionManagement { repositories { + mavenLocal() mavenCentral() maven("https://repo.opencollab.dev/maven-releases") maven("https://repo.opencollab.dev/maven-snapshots") From f04852d12ffc3c26ab740892c53963d700ec2cdb Mon Sep 17 00:00:00 2001 From: Alemiz Date: Fri, 12 Apr 2024 17:09:52 +0200 Subject: [PATCH 10/18] NBT size, Item NBT, String size limits --- .../bedrock/codec/BaseBedrockCodecHelper.java | 27 ++++++++++--- .../bedrock/codec/BedrockCodecHelper.java | 16 ++++---- .../codec/v291/BedrockCodecHelper_v291.java | 2 +- .../codec/v332/BedrockCodecHelper_v332.java | 2 +- .../codec/v340/BedrockCodecHelper_v340.java | 2 +- .../codec/v361/BedrockCodecHelper_v361.java | 2 +- .../codec/v431/BedrockCodecHelper_v431.java | 4 +- .../EditorNetworkSerializer_v534.java | 2 +- .../bedrock/data/EncodingSettings.java | 38 +++++++++++++++++++ 9 files changed, 75 insertions(+), 20 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java index cc96eb7cd..dff619f6a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java @@ -110,6 +110,8 @@ public void writeByteBuf(ByteBuf buffer, ByteBuf toWrite) { public String readString(ByteBuf buffer) { int length = VarInts.readUnsignedInt(buffer); + checkArgument(this.encodingSettings.maxStringLength() <= 0 || length <= this.encodingSettings.maxStringLength(), + "Tried to read %s bytes but maximum is %s", length, this.encodingSettings.maxStringLength()); return (String) buffer.readCharSequence(length, StandardCharsets.UTF_8); } @@ -309,10 +311,15 @@ public void writeArray(ByteBuf buffer, T[] array, BiConsumer biC } } - @SuppressWarnings("unchecked") @Override public T readTag(ByteBuf buffer, Class expected) { - try (NBTInputStream reader = NbtUtils.createNetworkReader(new ByteBufInputStream(buffer))) { + return this.readTag(buffer, expected, this.encodingSettings.maxNetworkNBTSize()); + } + + @SuppressWarnings("unchecked") + @Override + public T readTag(ByteBuf buffer, Class expected, long maxReadSize) { + try (NBTInputStream reader = NbtUtils.createNetworkReader(new ByteBufInputStream(buffer), maxReadSize)) { Object tag = reader.readTag(); checkArgument(expected.isInstance(tag), "Expected tag of %s type but received %s", expected, tag.getClass()); @@ -331,10 +338,15 @@ public void writeTag(ByteBuf buffer, Object tag) { } } - @SuppressWarnings("unchecked") @Override public T readTagLE(ByteBuf buffer, Class expected) { - try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer))) { + return this.readTagLE(buffer, expected, this.encodingSettings.maxNetworkNBTSize()); + } + + @SuppressWarnings("unchecked") + @Override + public T readTagLE(ByteBuf buffer, Class expected, long maxReadSize) { + try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer), maxReadSize)) { Object tag = reader.readTag(); checkArgument(expected.isInstance(tag), "Expected tag of %s type but received %s", expected, tag.getClass()); @@ -354,7 +366,12 @@ public void writeTagLE(ByteBuf buffer, Object tag) { @Override public T readTagValue(ByteBuf buffer, NbtType type) { - try (NBTInputStream reader = NbtUtils.createNetworkReader(new ByteBufInputStream(buffer))) { + return this.readTagValue(buffer, type, this.encodingSettings.maxNetworkNBTSize()); + } + + @Override + public T readTagValue(ByteBuf buffer, NbtType type, long maxReadSize) { + try (NBTInputStream reader = NbtUtils.createNetworkReader(new ByteBufInputStream(buffer), maxReadSize)) { return reader.readValue(type); } catch (IOException e) { throw new RuntimeException(e); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java index 550315668..54ce1ee38 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java @@ -50,6 +50,8 @@ public interface BedrockCodecHelper { EncodingSettings getEncodingSettings(); + void setEncodingSettings(EncodingSettings settings); + // Array serialization (with helper) void readArray(ByteBuf buffer, Collection array, BiFunction function); @@ -174,24 +176,22 @@ default void writeArray(ByteBuf buffer, Collection array, TriConsumer T readTag(ByteBuf buffer, Class expected); - void writeTag(ByteBuf buffer, Object tag); + T readTag(ByteBuf buffer, Class expected, long maxReadSize); - default Object readTagLE(ByteBuf buffer) { - return readTag(buffer, Object.class); - } + void writeTag(ByteBuf buffer, Object tag); T readTagLE(ByteBuf buffer, Class expected); + T readTagLE(ByteBuf buffer, Class expected, long maxReadSize); + void writeTagLE(ByteBuf buffer, Object tag); T readTagValue(ByteBuf buffer, NbtType type); + T readTagValue(ByteBuf buffer, NbtType type, long maxReadSize); + void writeTagValue(ByteBuf buffer, Object tag); void readItemUse(ByteBuf buffer, InventoryTransactionPacket packet); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java index bae15f981..4391ac398 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java @@ -88,7 +88,7 @@ public ItemData readItem(ByteBuf buffer) { NbtMap compoundTag = null; if (nbtSize > 0) { - try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer.readSlice(nbtSize)))) { + try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer.readSlice(nbtSize)), this.encodingSettings.maxItemNBTSize())) { Object tag = reader.readTag(); if (tag instanceof NbtMap) { compoundTag = (NbtMap) tag; diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/BedrockCodecHelper_v332.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/BedrockCodecHelper_v332.java index 9273637ed..4a23c3ba6 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/BedrockCodecHelper_v332.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/BedrockCodecHelper_v332.java @@ -37,7 +37,7 @@ public ItemData readItem(ByteBuf buffer) { int nbtSize = buffer.readShortLE(); NbtMap compoundTag = null; if (nbtSize > 0) { - try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer.readSlice(nbtSize)))) { + try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer.readSlice(nbtSize)), this.encodingSettings.maxItemNBTSize())) { compoundTag = (NbtMap) reader.readTag(); } catch (IOException e) { throw new IllegalStateException("Unable to load NBT data", e); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/BedrockCodecHelper_v340.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/BedrockCodecHelper_v340.java index f40e552ef..cc5f7bb2a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/BedrockCodecHelper_v340.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v340/BedrockCodecHelper_v340.java @@ -38,7 +38,7 @@ public ItemData readItem(ByteBuf buffer) { int nbtSize = buffer.readShortLE(); NbtMap compoundTag = null; if (nbtSize > 0) { - try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer.readSlice(nbtSize)))) { + try (NBTInputStream reader = NbtUtils.createReaderLE(new ByteBufInputStream(buffer.readSlice(nbtSize), this.encodingSettings.maxItemNBTSize()))) { compoundTag = (NbtMap) reader.readTag(); } catch (IOException e) { throw new IllegalStateException("Unable to load NBT data", e); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java index 9c67e8a02..2161f7b1b 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/BedrockCodecHelper_v361.java @@ -57,7 +57,7 @@ public void readEntityData(ByteBuf buffer, EntityDataMap entityDataMap) { value = readString(buffer); break; case NBT: - value = this.readTag(buffer); + value = this.readTag(buffer, Object.class); break; case VECTOR3I: value = readVector3i(buffer); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java index 4ce21be16..29b462be2 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java @@ -52,7 +52,7 @@ public ItemData readItemInstance(ByteBuf buffer) { ByteBuf buf = buffer.readSlice(VarInts.readUnsignedInt(buffer)); try (LittleEndianByteBufInputStream stream = new LittleEndianByteBufInputStream(buf); - NBTInputStream nbtStream = new NBTInputStream(stream)) { + NBTInputStream nbtStream = new NBTInputStream(stream, this.encodingSettings.maxItemNBTSize())) { int nbtSize = stream.readShort(); if (nbtSize > 0) { @@ -121,7 +121,7 @@ public ItemData readItem(ByteBuf buffer) { ByteBuf buf = buffer.readSlice(VarInts.readUnsignedInt(buffer)); try (LittleEndianByteBufInputStream stream = new LittleEndianByteBufInputStream(buf); - NBTInputStream nbtStream = new NBTInputStream(stream)) { + NBTInputStream nbtStream = new NBTInputStream(stream, this.encodingSettings.maxItemNBTSize())) { int nbtSize = stream.readShort(); if (nbtSize > 0) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/EditorNetworkSerializer_v534.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/EditorNetworkSerializer_v534.java index 88b48ffe3..84238f83d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/EditorNetworkSerializer_v534.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/EditorNetworkSerializer_v534.java @@ -18,6 +18,6 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, EditorNetworkPa @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, EditorNetworkPacket packet) { - packet.setPayload(helper.readTag(buffer)); + packet.setPayload(helper.readTag(buffer, Object.class)); } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java index ef5e8d81e..f1e926b6c 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/EncodingSettings.java @@ -8,11 +8,49 @@ @Accessors(fluent = true) @Builder(builderClassName = "Builder", toBuilder = true) public class EncodingSettings { + /** + * A default {@link EncodingSettings} instance. + * This instance sets limits that should be generally safe for most use cases, + * but there may be edge cases where it is recommended to use either CLIENT OR SERVER settings + * based on the context. + */ public static final EncodingSettings DEFAULT = EncodingSettings.builder() .maxListSize(1024) .maxByteArraySize(1024 * 1024) // 1MB + .maxNetworkNBTSize(1024 * 1024) // 1MB + .maxItemNBTSize(1024 * 100) // 100KB + .maxStringLength(1024 * 32) // 32KB + .build(); + + /** + * A {@link EncodingSettings} instance for Bedrock Client implementation. + * This instance sets limits that less strict because client is generally expected to + * be able to receive larger packets and NBT data. + */ + public static final EncodingSettings CLIENT = EncodingSettings.builder() + .maxListSize(2048) + .maxByteArraySize(1024 * 1024 * 2) // 2MB + .maxNetworkNBTSize(1024 * 1024 * 2) // 2MB + .maxItemNBTSize(1024 * 512) // 500KB + .maxStringLength(1024 * 64) // 64KB + .build(); + + /** + * A {@link EncodingSettings} instance for Bedrock Server implementation. + * This instance sets limits that are stricter because server is generally not expected to + * receive large packets or NBT data. + */ + public static final EncodingSettings SERVER = EncodingSettings.builder() + .maxListSize(1024) + .maxByteArraySize(1024 * 512) // 500KB + .maxNetworkNBTSize(1024 * 512) // 500KB + .maxItemNBTSize(1024 * 100) // 100KB + .maxStringLength(1024 * 32) // 32KB .build(); private final int maxListSize; private final int maxByteArraySize; + private final int maxNetworkNBTSize; + private final int maxItemNBTSize; + private final int maxStringLength; } From 35b7d586ec41e6723e3aef8a2bf905ce93b37efd Mon Sep 17 00:00:00 2001 From: Alemiz Date: Fri, 12 Apr 2024 17:19:49 +0200 Subject: [PATCH 11/18] Fix NPE --- .../bedrock/netty/codec/packet/BedrockPacketCodec.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java index 1f0f563be..886c472db 100644 --- a/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java +++ b/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/netty/codec/packet/BedrockPacketCodec.java @@ -30,9 +30,9 @@ public abstract class BedrockPacketCodec extends MessageToMessageCodec attribute = ctx.channel().attr(PacketDirection.ATTRIBUTE); + PacketDirection attribute = ctx.channel().attr(PacketDirection.ATTRIBUTE).get(); if (attribute != null) { - this.inboundRecipient = attribute.get().getInbound(); + this.inboundRecipient = attribute.getInbound(); } } From 39a9b418ff57df6c8acef1d7f5c0ad46c705ecaf Mon Sep 17 00:00:00 2001 From: Alemiz Date: Fri, 12 Apr 2024 17:46:55 +0200 Subject: [PATCH 12/18] Do not preallocate list size --- .../codec/v291/serializer/CraftingDataSerializer_v291.java | 2 +- .../codec/v354/serializer/CraftingDataSerializer_v354.java | 2 +- .../codec/v361/serializer/CraftingDataSerializer_v361.java | 2 +- .../codec/v407/serializer/CraftingDataSerializer_v407.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/CraftingDataSerializer_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/CraftingDataSerializer_v291.java index 6b0bd9b74..45f9380e5 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/CraftingDataSerializer_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/CraftingDataSerializer_v291.java @@ -97,7 +97,7 @@ protected ShapedRecipeData readShapedRecipe(ByteBuf buffer, BedrockCodecHelper h int width = VarInts.readInt(buffer); int height = VarInts.readInt(buffer); int inputCount = width * height; - List inputs = new ObjectArrayList<>(inputCount); + List inputs = new ObjectArrayList<>(); for (int i = 0; i < inputCount; i++) { inputs.add(ItemDescriptorWithCount.fromItem(helper.readItem(buffer))); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/CraftingDataSerializer_v354.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/CraftingDataSerializer_v354.java index 78913f9c6..0526bfa10 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/CraftingDataSerializer_v354.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/CraftingDataSerializer_v354.java @@ -46,7 +46,7 @@ protected ShapedRecipeData readShapedRecipe(ByteBuf buffer, BedrockCodecHelper h int width = VarInts.readInt(buffer); int height = VarInts.readInt(buffer); int inputCount = width * height; - List inputs = new ObjectArrayList<>(inputCount); + List inputs = new ObjectArrayList<>(); for (int i = 0; i < inputCount; i++) { inputs.add(ItemDescriptorWithCount.fromItem(helper.readItem(buffer))); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/CraftingDataSerializer_v361.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/CraftingDataSerializer_v361.java index 32176b7f2..a301980c2 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/CraftingDataSerializer_v361.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/CraftingDataSerializer_v361.java @@ -57,7 +57,7 @@ protected ShapedRecipeData readShapedRecipe(ByteBuf buffer, BedrockCodecHelper h int width = VarInts.readInt(buffer); int height = VarInts.readInt(buffer); int inputCount = width * height; - List inputs = new ObjectArrayList<>(inputCount); + List inputs = new ObjectArrayList<>(); for (int i = 0; i < inputCount; i++) { inputs.add(this.readIngredient(buffer, helper)); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/CraftingDataSerializer_v407.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/CraftingDataSerializer_v407.java index c0dc1ac55..e65d80ac6 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/CraftingDataSerializer_v407.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/CraftingDataSerializer_v407.java @@ -106,7 +106,7 @@ protected ShapedRecipeData readShapedRecipe(ByteBuf buffer, BedrockCodecHelper h int width = VarInts.readInt(buffer); int height = VarInts.readInt(buffer); int inputCount = width * height; - List inputs = new ObjectArrayList<>(inputCount); + List inputs = new ObjectArrayList<>(); for (int i = 0; i < inputCount; i++) { inputs.add(helper.readIngredient(buffer)); } From 3bc7c48e7145edc11e4a7b673e318a67a1d67ae2 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Fri, 12 Apr 2024 18:26:33 +0200 Subject: [PATCH 13/18] Print buffer only in debug mode --- .../bedrock/codec/v431/BedrockCodecHelper_v431.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java index 29b462be2..a9a9960fe 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v431/BedrockCodecHelper_v431.java @@ -80,7 +80,10 @@ public ItemData readItemInstance(ByteBuf buffer) { } if (buf.isReadable()) { - log.info("Item user data has {} readable bytes left\n{}", buf.readableBytes(), ByteBufUtil.prettyHexDump(buf.readerIndex(0))); + log.info("Item user data has {} readable bytes left", buf.readableBytes()); + if (log.isDebugEnabled()) { + log.debug("Item data:\n{}", ByteBufUtil.prettyHexDump(buf.readerIndex(0))); + } } return ItemData.builder() @@ -149,7 +152,10 @@ public ItemData readItem(ByteBuf buffer) { } if (buf.isReadable()) { - log.info("Item user data has {} readable bytes left\n{}", buf.readableBytes(), ByteBufUtil.prettyHexDump(buf.readerIndex(0))); + log.info("Item user data has {} readable bytes left", buf.readableBytes()); + if (log.isDebugEnabled()) { + log.debug("Item data:\n{}", ByteBufUtil.prettyHexDump(buf.readerIndex(0))); + } } return ItemData.builder() From 3d5afd5f2914978d5417eb28388fe0e30e759cdc Mon Sep 17 00:00:00 2001 From: Alemiz Date: Tue, 16 Apr 2024 17:03:00 +0200 Subject: [PATCH 14/18] Bump RakNet, NBT versions --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b070a38a5..21d9ca637 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,12 +13,12 @@ fastutil-int-object-maps = { group = "org.cloudburstmc.fastutil.maps", name = "i fastutil-object-int-maps = { group = "org.cloudburstmc.fastutil.maps", name = "object-int-maps", version.ref = "fastutil" } netty-buffer = { group = "io.netty", name = "netty-buffer", version.ref = "netty" } -netty-transport-raknet = { group = "org.cloudburstmc.netty", name = "netty-transport-raknet", version = "1.0.0.CR2-SNAPSHOT" } +netty-transport-raknet = { group = "org.cloudburstmc.netty", name = "netty-transport-raknet", version = "1.0.0.CR3-SNAPSHOT" } jose4j = { group = "org.bitbucket.b_c", name = "jose4j", version = "0.9.3" } natives = { group = "com.nukkitx", name = "natives", version = "1.0.3" } math = { group = "org.cloudburstmc.math", name = "immutable", version = "2.0-SNAPSHOT" } -nbt = { group = "org.cloudburstmc", name = "nbt", version = "3.0.2.Final" } +nbt = { group = "org.cloudburstmc", name = "nbt", version = "3.0.3.Final" } lmbda = { group = "org.lanternpowered", name = "lmbda", version = "2.0.0" } snappy = { group = "io.airlift", name = "aircompressor", version = "0.25" } From fbea0368e196edeabd4f1ab26d6390f0deb52aa5 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Sat, 20 Apr 2024 20:28:38 +0200 Subject: [PATCH 15/18] Fix BossEventPacket --- .../cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java index 3e0f91725..49f416e5d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java @@ -705,7 +705,7 @@ public class Bedrock_v291 { .registerPacket(ItemFrameDropItemPacket::new, ItemFrameDropItemSerializer_v291.INSTANCE, 71, PacketRecipient.SERVER) .registerPacket(GameRulesChangedPacket::new, GameRulesChangedSerializer_v291.INSTANCE, 72, PacketRecipient.CLIENT) .registerPacket(CameraPacket::new, CameraSerializer_v291.INSTANCE, 73, PacketRecipient.CLIENT) - .registerPacket(BossEventPacket::new, BossEventSerializer_v291.INSTANCE, 74, PacketRecipient.CLIENT) + .registerPacket(BossEventPacket::new, BossEventSerializer_v291.INSTANCE, 74, PacketRecipient.BOTH) .registerPacket(ShowCreditsPacket::new, ShowCreditsSerializer_v291.INSTANCE, 75, PacketRecipient.CLIENT) .registerPacket(AvailableCommandsPacket::new, new AvailableCommandsSerializer_v291(COMMAND_PARAMS), 76, PacketRecipient.CLIENT) .registerPacket(CommandRequestPacket::new, CommandRequestSerializer_v291.INSTANCE, 77, PacketRecipient.SERVER) From 6677701eec2cd81eb3eaabe18f7b46e5976b788f Mon Sep 17 00:00:00 2001 From: Alemiz Date: Sat, 20 Apr 2024 20:30:10 +0200 Subject: [PATCH 16/18] Fix few more packets --- .../cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java | 2 +- .../cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java index 49f416e5d..018254c08 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java @@ -687,7 +687,7 @@ public class Bedrock_v291 { .registerPacket(CraftingEventPacket::new, CraftingEventSerializer_v291.INSTANCE, 53, PacketRecipient.SERVER) .registerPacket(GuiDataPickItemPacket::new, GuiDataPickItemSerializer_v291.INSTANCE, 54, PacketRecipient.CLIENT) .registerPacket(AdventureSettingsPacket::new, AdventureSettingsSerializer_v291.INSTANCE, 55, PacketRecipient.CLIENT) - .registerPacket(BlockEntityDataPacket::new, BlockEntityDataSerializer_v291.INSTANCE, 56, PacketRecipient.CLIENT) + .registerPacket(BlockEntityDataPacket::new, BlockEntityDataSerializer_v291.INSTANCE, 56, PacketRecipient.BOTH) .registerPacket(PlayerInputPacket::new, PlayerInputSerializer_v291.INSTANCE, 57, PacketRecipient.SERVER) .registerPacket(LevelChunkPacket::new, FullChunkDataSerializer_v291.INSTANCE, 58, PacketRecipient.CLIENT) .registerPacket(SetCommandsEnabledPacket::new, SetCommandsEnabledSerializer_v291.INSTANCE, 59, PacketRecipient.CLIENT) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java index 37145070d..f6e4dc137 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/Bedrock_v388.java @@ -117,7 +117,7 @@ public class Bedrock_v388 extends Bedrock_v361 { .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) .registerPacket(TickSyncPacket::new, TickSyncSerializer_v388.INSTANCE, 23, PacketRecipient.BOTH) .registerPacket(EducationSettingsPacket::new, EducationSettingsSerializer_v388.INSTANCE, 137, PacketRecipient.CLIENT) - .registerPacket(EmotePacket::new, EmoteSerializer_v388.INSTANCE, 138, PacketRecipient.CLIENT) + .registerPacket(EmotePacket::new, EmoteSerializer_v388.INSTANCE, 138, PacketRecipient.BOTH) .registerPacket(MultiplayerSettingsPacket::new, MultiplayerSettingsSerializer_v388.INSTANCE, 139, PacketRecipient.BOTH) .registerPacket(SettingsCommandPacket::new, SettingsCommandSerializer_v388.INSTANCE, 140, PacketRecipient.SERVER) .registerPacket(AnvilDamagePacket::new, AnvilDamageSerializer_v388.INSTANCE, 141, PacketRecipient.SERVER) From 0c69adeb7cb5862c348e2dd800d18d92909af823 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Mon, 22 Apr 2024 22:00:06 +0200 Subject: [PATCH 17/18] A couple more fixes --- .../protocol/bedrock/codec/v291/Bedrock_v291.java | 6 +++--- .../protocol/bedrock/codec/v354/Bedrock_v354.java | 4 ++-- .../protocol/bedrock/codec/v486/Bedrock_v486.java | 2 +- .../protocol/bedrock/codec/v618/Bedrock_v618.java | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java index 018254c08..9248f17cc 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/Bedrock_v291.java @@ -684,7 +684,7 @@ public class Bedrock_v291 { .registerPacket(InventorySlotPacket::new, InventorySlotSerializer_v291.INSTANCE, 50, PacketRecipient.CLIENT) .registerPacket(ContainerSetDataPacket::new, ContainerSetDataSerializer_v291.INSTANCE, 51, PacketRecipient.CLIENT) .registerPacket(CraftingDataPacket::new, CraftingDataSerializer_v291.INSTANCE, 52, PacketRecipient.CLIENT) - .registerPacket(CraftingEventPacket::new, CraftingEventSerializer_v291.INSTANCE, 53, PacketRecipient.SERVER) + .registerPacket(CraftingEventPacket::new, CraftingEventSerializer_v291.INSTANCE, 53, PacketRecipient.BOTH) .registerPacket(GuiDataPickItemPacket::new, GuiDataPickItemSerializer_v291.INSTANCE, 54, PacketRecipient.CLIENT) .registerPacket(AdventureSettingsPacket::new, AdventureSettingsSerializer_v291.INSTANCE, 55, PacketRecipient.CLIENT) .registerPacket(BlockEntityDataPacket::new, BlockEntityDataSerializer_v291.INSTANCE, 56, PacketRecipient.BOTH) @@ -706,7 +706,7 @@ public class Bedrock_v291 { .registerPacket(GameRulesChangedPacket::new, GameRulesChangedSerializer_v291.INSTANCE, 72, PacketRecipient.CLIENT) .registerPacket(CameraPacket::new, CameraSerializer_v291.INSTANCE, 73, PacketRecipient.CLIENT) .registerPacket(BossEventPacket::new, BossEventSerializer_v291.INSTANCE, 74, PacketRecipient.BOTH) - .registerPacket(ShowCreditsPacket::new, ShowCreditsSerializer_v291.INSTANCE, 75, PacketRecipient.CLIENT) + .registerPacket(ShowCreditsPacket::new, ShowCreditsSerializer_v291.INSTANCE, 75, PacketRecipient.BOTH) .registerPacket(AvailableCommandsPacket::new, new AvailableCommandsSerializer_v291(COMMAND_PARAMS), 76, PacketRecipient.CLIENT) .registerPacket(CommandRequestPacket::new, CommandRequestSerializer_v291.INSTANCE, 77, PacketRecipient.SERVER) .registerPacket(CommandBlockUpdatePacket::new, CommandBlockUpdateSerializer_v291.INSTANCE, 78, PacketRecipient.SERVER) @@ -736,7 +736,7 @@ public class Bedrock_v291 { .registerPacket(ServerSettingsRequestPacket::new, ServerSettingsRequestSerializer_v291.INSTANCE, 102, PacketRecipient.SERVER) .registerPacket(ServerSettingsResponsePacket::new, ServerSettingsResponseSerializer_v291.INSTANCE, 103, PacketRecipient.CLIENT) .registerPacket(ShowProfilePacket::new, ShowProfileSerializer_v291.INSTANCE, 104, PacketRecipient.CLIENT) - .registerPacket(SetDefaultGameTypePacket::new, SetDefaultGameTypeSerializer_v291.INSTANCE, 105, PacketRecipient.CLIENT) + .registerPacket(SetDefaultGameTypePacket::new, SetDefaultGameTypeSerializer_v291.INSTANCE, 105, PacketRecipient.BOTH) .registerPacket(RemoveObjectivePacket::new, RemoveObjectiveSerializer_v291.INSTANCE, 106, PacketRecipient.CLIENT) .registerPacket(SetDisplayObjectivePacket::new, SetDisplayObjectiveSerializer_v291.INSTANCE, 107, PacketRecipient.CLIENT) .registerPacket(SetScorePacket::new, SetScoreSerializer_v291.INSTANCE, 108, PacketRecipient.CLIENT) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java index e261458c8..9d962a55a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/Bedrock_v354.java @@ -79,7 +79,7 @@ public class Bedrock_v354 extends Bedrock_v340 { .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) - .registerPacket(MapCreateLockedCopyPacket::new, MapCreateLockedCopySerializer_v354.INSTANCE, 126, PacketRecipient.SERVER) - .registerPacket(OnScreenTextureAnimationPacket::new, OnScreenTextureAnimationSerializer_v354.INSTANCE, 127, PacketRecipient.CLIENT) + .registerPacket(OnScreenTextureAnimationPacket::new, OnScreenTextureAnimationSerializer_v354.INSTANCE, 130, PacketRecipient.CLIENT) + .registerPacket(MapCreateLockedCopyPacket::new, MapCreateLockedCopySerializer_v354.INSTANCE, 131, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java index 0515fd014..daf45f7d9 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v486/Bedrock_v486.java @@ -56,6 +56,6 @@ public class Bedrock_v486 extends Bedrock_v475 { .updateSerializer(SubChunkRequestPacket.class, SubChunkRequestSerializer_v486.INSTANCE) .registerPacket(PlayerStartItemCooldownPacket::new, PlayerStartItemCooldownSerializer_v486.INSTANCE, 176, PacketRecipient.CLIENT) .registerPacket(ScriptMessagePacket::new, ScriptMessageSerializer_v486.INSTANCE, 177, PacketRecipient.BOTH) - .registerPacket(CodeBuilderSourcePacket::new, CodeBuilderSourceSerializer_v486.INSTANCE, 178, PacketRecipient.CLIENT) + .registerPacket(CodeBuilderSourcePacket::new, CodeBuilderSourceSerializer_v486.INSTANCE, 178, PacketRecipient.SERVER) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java index cd2bff151..b6862c7c0 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/Bedrock_v618.java @@ -69,6 +69,6 @@ public class Bedrock_v618 extends Bedrock_v594 { .updateSerializer(ResourcePacksInfoPacket.class, ResourcePacksInfoSerializer_v618.INSTANCE) .updateSerializer(CameraPresetsPacket.class, new CameraPresetsSerializer_v618()) .updateSerializer(CameraInstructionPacket.class, new CameraInstructionSerializer_618()) - .registerPacket(RefreshEntitlementsPacket::new, new RefreshEntitlementsSerializer_v618(), 305, PacketRecipient.CLIENT) + .registerPacket(RefreshEntitlementsPacket::new, new RefreshEntitlementsSerializer_v618(), 305, PacketRecipient.SERVER) .build(); } \ No newline at end of file From 571a7aaa864fff5a8abe58c7d987727866586fce Mon Sep 17 00:00:00 2001 From: Alemiz Date: Tue, 23 Apr 2024 19:50:50 +0200 Subject: [PATCH 18/18] Some more packet direction fixes --- .../cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java | 2 +- .../cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java | 2 +- .../cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java index 41a0fcd1c..0bc79c4f2 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/Bedrock_v503.java @@ -130,6 +130,6 @@ public class Bedrock_v503 extends Bedrock_v486 { .registerPacket(TickingAreasLoadStatusPacket::new, new TickingAreasLoadStatusSerializer_v503(), 179, PacketRecipient.CLIENT) .registerPacket(DimensionDataPacket::new, new DimensionDataSerializer_v503(), 180, PacketRecipient.CLIENT) .registerPacket(AgentActionEventPacket::new, new AgentActionEventSerializer_v503(), 181, PacketRecipient.CLIENT) - .registerPacket(ChangeMobPropertyPacket::new, new ChangeMobPropertySerializer_v503(), 182, PacketRecipient.SERVER) + .registerPacket(ChangeMobPropertyPacket::new, new ChangeMobPropertySerializer_v503(), 182, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java index 84b20becd..58308c4e9 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v567/Bedrock_v567.java @@ -37,6 +37,6 @@ public class Bedrock_v567 extends Bedrock_v560 { .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(CraftingDataPacket.class, new CraftingDataSerializer_v567()) - .registerPacket(ClientCheatAbilityPacket::new, new ClientCheatAbilitySerializer_v567(), 197, PacketRecipient.SERVER) + .registerPacket(ClientCheatAbilityPacket::new, new ClientCheatAbilitySerializer_v567(), 197, PacketRecipient.CLIENT) .build(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java index 28af0cc35..ffd209799 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v582/Bedrock_v582.java @@ -57,6 +57,6 @@ public class Bedrock_v582 extends Bedrock_v575 { .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v448(COMMAND_PARAMS)) .registerPacket(CompressedBiomeDefinitionListPacket::new, CompressedBiomeDefinitionListSerializer_v582.INSTANCE, 301, PacketRecipient.CLIENT) .registerPacket(TrimDataPacket::new, TrimDataSerializer_v582.INSTANCE, 302, PacketRecipient.CLIENT) - .registerPacket(OpenSignPacket::new, OpenSignSerializer_v582.INSTANCE, 303, PacketRecipient.SERVER) + .registerPacket(OpenSignPacket::new, OpenSignSerializer_v582.INSTANCE, 303, PacketRecipient.CLIENT) .build(); }