From f54207cfa52969ed053fc129543e454fa46eadef Mon Sep 17 00:00:00 2001 From: Kaooot <37877491+Kaooot@users.noreply.github.com> Date: Tue, 7 May 2024 23:30:54 +0200 Subject: [PATCH 1/8] Add missing sound events for 1.20.70 --- .../bedrock/codec/v662/Bedrock_v662.java | 25 ++++++++++-- .../protocol/bedrock/data/SoundEvent.java | 40 +++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) 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 b441253d8..6aa2deed9 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,18 +1,19 @@ 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.v291.serializer.LevelSoundEvent1Serializer_v291; +import org.cloudburstmc.protocol.bedrock.codec.v313.serializer.LevelSoundEvent2Serializer_v313; +import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332; import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; -import org.cloudburstmc.protocol.bedrock.codec.v582.Bedrock_v582; import org.cloudburstmc.protocol.bedrock.codec.v594.serializer.AvailableCommandsSerializer_v594; import org.cloudburstmc.protocol.bedrock.codec.v649.Bedrock_v649; 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.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -59,6 +60,21 @@ public class Bedrock_v662 extends Bedrock_v649 { .replace(14, TextProcessingEventOrigin.SERVER_FORM) // replaces PASS_THROUGH_WITHOUT_SIFT .build(); + protected static final TypeMap SOUND_EVENTS = Bedrock_v649.SOUND_EVENTS + .toBuilder() + .replace(500, SoundEvent.VAULT_OPEN_SHUTTER) + .replace(501, SoundEvent.VAULT_CLOSE_SHUTTER) + .replace(502, SoundEvent.VAULT_EJECT_ITEM) + .replace(503, SoundEvent.VAULT_INSERT_ITEM) + .replace(504, SoundEvent.VAULT_INSERT_ITEM_FAIL) + .replace(505, SoundEvent.VAULT_AMBIENT) + .replace(506, SoundEvent.VAULT_ACTIVATE) + .replace(507, SoundEvent.VAULT_DEACTIVATE) + .replace(508, SoundEvent.HURT_REDUCED) + .replace(509, SoundEvent.WIND_CHARGE_BURST) + .replace(511, SoundEvent.UNDEFINED) + .build(); + public static final BedrockCodec CODEC = Bedrock_v649.CODEC.toBuilder() .raknetProtocolVersion(11) .protocolVersion(662) @@ -66,6 +82,9 @@ public class Bedrock_v662 extends Bedrock_v649 { .helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) + .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) + .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v594(COMMAND_PARAMS)) .updateSerializer(LecternUpdatePacket.class, LecternUpdateSerializer_v662.INSTANCE) .updateSerializer(MobEffectPacket.class, MobEffectSerializer_v662.INSTANCE) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java index 1c1db2360..7a1de07fb 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java @@ -597,6 +597,46 @@ public enum SoundEvent { * @since v649 */ REFLECT, + /** + * @since v662 + */ + VAULT_OPEN_SHUTTER, + /** + * @since v662 + */ + VAULT_CLOSE_SHUTTER, + /** + * @since v662 + */ + VAULT_EJECT_ITEM, + /** + * @since v662 + */ + VAULT_INSERT_ITEM, + /** + * @since v662 + */ + VAULT_INSERT_ITEM_FAIL, + /** + * @since v662 + */ + VAULT_AMBIENT, + /** + * @since v662 + */ + VAULT_ACTIVATE, + /** + * @since v662 + */ + VAULT_DEACTIVATE, + /** + * @since v662 + */ + HURT_REDUCED, + /** + * @since v662 + */ + WIND_CHARGE_BURST, UNDEFINED } From c3f30c9d0eef1183950c685c2b3f7811c376a8e3 Mon Sep 17 00:00:00 2001 From: Kaooot <37877491+Kaooot@users.noreply.github.com> Date: Tue, 7 May 2024 23:34:03 +0200 Subject: [PATCH 2/8] Add missing sound events for 1.20.80 --- .../bedrock/codec/v671/Bedrock_v671.java | 20 +++++++++++++++- .../protocol/bedrock/data/SoundEvent.java | 24 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java index baec730d6..1058196be 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java @@ -3,13 +3,17 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; 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.LevelSoundEvent2Serializer_v313; +import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332; import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; +import org.cloudburstmc.protocol.bedrock.codec.v649.Bedrock_v649; import org.cloudburstmc.protocol.bedrock.codec.v662.Bedrock_v662; import org.cloudburstmc.protocol.bedrock.codec.v671.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.cloudburstmc.protocol.bedrock.data.ParticleType; -import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.*; @@ -37,6 +41,17 @@ public class Bedrock_v671 extends Bedrock_v662 { .update(EntityDataTypes.FLAGS_2, new FlagTransformer(ENTITY_FLAGS, 1)) .build(); + protected static final TypeMap SOUND_EVENTS = Bedrock_v649.SOUND_EVENTS + .toBuilder() + .replace(511, SoundEvent.ARMOR_CRACK_WOLF) + .insert(512, SoundEvent.ARMOR_BREAK_WOLF) + .insert(513, SoundEvent.ARMOR_REPAIR_WOLF) + .insert(514, SoundEvent.MACE_SMASH_AIR) + .insert(515, SoundEvent.MACE_SMASH_GROUND) + .insert(520, SoundEvent.MACE_SMASH_HEAVY_GROUND) + .insert(521, SoundEvent.UNDEFINED) + .build(); + public static final BedrockCodec CODEC = Bedrock_v662.CODEC.toBuilder() .raknetProtocolVersion(11) .protocolVersion(671) @@ -44,6 +59,9 @@ public class Bedrock_v671 extends Bedrock_v662 { .helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) + .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) + .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) .updateSerializer(ClientboundDebugRendererPacket.class, ClientboundDebugRendererSerializer_v671.INSTANCE) .updateSerializer(CorrectPlayerMovePredictionPacket.class, CorrectPlayerMovePredictionSerializer_v671.INSTANCE) .updateSerializer(ResourcePackStackPacket.class, ResourcePackStackSerializer_v671.INSTANCE) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java index 7a1de07fb..7b71fede9 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java @@ -637,6 +637,30 @@ public enum SoundEvent { * @since v662 */ WIND_CHARGE_BURST, + /** + * @since v671 + */ + ARMOR_CRACK_WOLF, + /** + * @since v671 + */ + ARMOR_BREAK_WOLF, + /** + * @since v671 + */ + ARMOR_REPAIR_WOLF, + /** + * @since v671 + */ + MACE_SMASH_AIR, + /** + * @since v671 + */ + MACE_SMASH_GROUND, + /** + * @since v671 + */ + MACE_SMASH_HEAVY_GROUND, UNDEFINED } From f949804e4886dccecb0054549ff18f6c1efc1fd3 Mon Sep 17 00:00:00 2001 From: Kaooot <37877491+Kaooot@users.noreply.github.com> Date: Wed, 8 May 2024 00:08:35 +0200 Subject: [PATCH 3/8] Fix Bedrock_v671 sound events --- .../cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java index 1058196be..58470e9ce 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v671/Bedrock_v671.java @@ -8,7 +8,6 @@ import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332; import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; -import org.cloudburstmc.protocol.bedrock.codec.v649.Bedrock_v649; import org.cloudburstmc.protocol.bedrock.codec.v662.Bedrock_v662; import org.cloudburstmc.protocol.bedrock.codec.v671.serializer.*; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; @@ -41,7 +40,7 @@ public class Bedrock_v671 extends Bedrock_v662 { .update(EntityDataTypes.FLAGS_2, new FlagTransformer(ENTITY_FLAGS, 1)) .build(); - protected static final TypeMap SOUND_EVENTS = Bedrock_v649.SOUND_EVENTS + protected static final TypeMap SOUND_EVENTS = Bedrock_v662.SOUND_EVENTS .toBuilder() .replace(511, SoundEvent.ARMOR_CRACK_WOLF) .insert(512, SoundEvent.ARMOR_BREAK_WOLF) From 9bfcfa45bb9b765d1a2070eb96a265c5e6ab5609 Mon Sep 17 00:00:00 2001 From: Kaooot <37877491+Kaooot@users.noreply.github.com> Date: Wed, 8 May 2024 00:18:19 +0200 Subject: [PATCH 4/8] Update Bedrock_v662 sound events --- .../bedrock/codec/v662/Bedrock_v662.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) 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 6aa2deed9..0b9a4c8c1 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 @@ -63,16 +63,16 @@ public class Bedrock_v662 extends Bedrock_v649 { protected static final TypeMap SOUND_EVENTS = Bedrock_v649.SOUND_EVENTS .toBuilder() .replace(500, SoundEvent.VAULT_OPEN_SHUTTER) - .replace(501, SoundEvent.VAULT_CLOSE_SHUTTER) - .replace(502, SoundEvent.VAULT_EJECT_ITEM) - .replace(503, SoundEvent.VAULT_INSERT_ITEM) - .replace(504, SoundEvent.VAULT_INSERT_ITEM_FAIL) - .replace(505, SoundEvent.VAULT_AMBIENT) - .replace(506, SoundEvent.VAULT_ACTIVATE) - .replace(507, SoundEvent.VAULT_DEACTIVATE) - .replace(508, SoundEvent.HURT_REDUCED) - .replace(509, SoundEvent.WIND_CHARGE_BURST) - .replace(511, SoundEvent.UNDEFINED) + .insert(501, SoundEvent.VAULT_CLOSE_SHUTTER) + .insert(502, SoundEvent.VAULT_EJECT_ITEM) + .insert(503, SoundEvent.VAULT_INSERT_ITEM) + .insert(504, SoundEvent.VAULT_INSERT_ITEM_FAIL) + .insert(505, SoundEvent.VAULT_AMBIENT) + .insert(506, SoundEvent.VAULT_ACTIVATE) + .insert(507, SoundEvent.VAULT_DEACTIVATE) + .insert(508, SoundEvent.HURT_REDUCED) + .insert(509, SoundEvent.WIND_CHARGE_BURST) + .insert(511, SoundEvent.UNDEFINED) .build(); public static final BedrockCodec CODEC = Bedrock_v649.CODEC.toBuilder() From 0ba2458507270f4a73e0d2b7c4d3f3934d9fc1c6 Mon Sep 17 00:00:00 2001 From: Kaooot <37877491+Kaooot@users.noreply.github.com> Date: Wed, 8 May 2024 00:36:34 +0200 Subject: [PATCH 5/8] Start working on 1.21.0 support --- .../bedrock/codec/v685/Bedrock_v685.java | 84 +++++++++++++ .../AwardAchievementSerializer_v685.java | 23 ++++ .../CodeBuilderSourceSerializer_v685.java | 27 +++++ .../ContainerCloseSerializer_v685.java | 25 ++++ .../CraftingDataSerializer_v685.java | 111 ++++++++++++++++++ .../v685/serializer/EventSerializer_v685.java | 34 ++++++ .../serializer/StartGameSerializer_v685.java | 26 ++++ .../v685/serializer/TextSerializer_v685.java | 22 ++++ .../bedrock/data/CodeBuilderCodeStatus.java | 10 ++ .../bedrock/data/DisconnectFailReason.java | 5 +- .../protocol/bedrock/data/LevelEvent.java | 10 ++ .../bedrock/data/PlayerAuthInputData.java | 9 +- .../protocol/bedrock/data/SoundEvent.java | 48 ++++++++ .../bedrock/data/command/CommandParam.java | 5 +- .../data/command/CommandParamType.java | 4 + .../bedrock/data/entity/EntityDataTypes.java | 12 ++ .../bedrock/data/event/EventDataType.java | 6 +- .../bedrock/data/event/ItemUsedEventData.java | 16 +++ .../bedrock/data/inventory/ItemUseType.java | 6 +- .../crafting/RecipeUnlockingRequirement.java | 32 +++++ .../crafting/recipe/CraftingRecipeData.java | 3 + .../crafting/recipe/ShapedRecipeData.java | 27 +++-- .../crafting/recipe/ShapelessRecipeData.java | 21 +++- .../packet/AwardAchievementPacket.java | 23 ++++ .../bedrock/packet/BedrockPacketHandler.java | 4 + .../bedrock/packet/BedrockPacketType.java | 3 +- .../packet/CodeBuilderSourcePacket.java | 8 ++ .../bedrock/packet/ContainerClosePacket.java | 2 + .../bedrock/packet/StartGamePacket.java | 12 ++ .../protocol/bedrock/packet/TextPacket.java | 1 + 30 files changed, 602 insertions(+), 17 deletions(-) create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/AwardAchievementSerializer_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CodeBuilderSourceSerializer_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/ContainerCloseSerializer_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/EventSerializer_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/StartGameSerializer_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/TextSerializer_v685.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/CodeBuilderCodeStatus.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/RecipeUnlockingRequirement.java create mode 100644 bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java new file mode 100644 index 000000000..2396edfb3 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java @@ -0,0 +1,84 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685; + +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +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.LevelSoundEvent2Serializer_v313; +import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332; +import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; +import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; +import org.cloudburstmc.protocol.bedrock.codec.v594.serializer.AvailableCommandsSerializer_v594; +import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; +import org.cloudburstmc.protocol.bedrock.codec.v685.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; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class Bedrock_v685 extends Bedrock_v671 { + + protected static final TypeMap SOUND_EVENTS = Bedrock_v671.SOUND_EVENTS + .toBuilder() + .insert(516, SoundEvent.TRAIL_SPAWNER_CHARGE_ACTIVATE) + .insert(517, SoundEvent.TRAIL_SPAWNER_AMBIENT_OMINOUS) + .insert(518, SoundEvent.OMINOUS_ITEM_SPAWNER_SPAWN_ITEM) + .insert(519, SoundEvent.OMINOUS_BOTTLE_END_USE) + .replace(521, SoundEvent.OMINOUS_ITEM_SPAWNER_SPAWN_ITEM_BEGIN) + .insert(523, SoundEvent.APPLY_EFFECT_BAD_OMEN) + .insert(524, SoundEvent.APPLY_EFFECT_RAID_OMEN) + .insert(525, SoundEvent.APPLY_EFFECT_TRIAL_OMEN) + .insert(526, SoundEvent.OMINOUS_ITEM_SPAWNER_ABOUT_TO_SPAWN_ITEM) + .insert(527, SoundEvent.RECORD_CREATOR) + .insert(528, SoundEvent.RECORD_CREATOR_MUSIC_BOX) + .insert(529, SoundEvent.RECORD_PRECIPICE) + .insert(530, SoundEvent.UNDEFINED) + .build(); + + protected static final TypeMap COMMAND_PARAMS = Bedrock_v671.COMMAND_PARAMS.toBuilder() + .shift(86, 4) + .insert(86, CommandParam.CODE_BUILDER_ARG) + .insert(87, CommandParam.CODE_BUILDER_ARGS) + .insert(88, CommandParam.CODE_BUILDER_SELECT_PARAM) + .insert(89, CommandParam.CODE_BUILDER_SELECTOR) + .build(); + + protected static final EntityDataTypeMap ENTITY_DATA = Bedrock_v671.ENTITY_DATA + .toBuilder() + .insert(EntityDataTypes.VISIBLE_MOB_EFFECTS, 131, EntityDataFormat.NBT) // TODO check data format + .build(); + + protected static final TypeMap LEVEL_EVENTS = Bedrock_v671.LEVEL_EVENTS.toBuilder() + .replace(LEVEL_EVENT_BLOCK + 115, LevelEvent.PARTICLE_TRIAL_SPAWNER_DETECTION_CHARGED) + .insert(LEVEL_EVENT_BLOCK + 116, LevelEvent.PARTICLE_TRIAL_SPAWNER_BECOME_CHARGED) + .insert(LEVEL_EVENT_BLOCK + 117, LevelEvent.ALL_PLAYERS_SLEEPING) + .insert(9814, LevelEvent.ANIMATION_SPAWN_COBWEB) + .insert(9815, LevelEvent.PARTICLE_SMASH_ATTACK_GROUND_DUST) + .build(); + + public static final BedrockCodec CODEC = Bedrock_v671.CODEC.toBuilder() + .raknetProtocolVersion(11) + .protocolVersion(685) + .minecraftVersion("1.21.0") + .helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) + .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) + .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v594(COMMAND_PARAMS)) + .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) + .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) + .updateSerializer(ContainerClosePacket.class, ContainerCloseSerializer_v685.INSTANCE) + .updateSerializer(CraftingDataPacket.class, CraftingDataSerializer_v685.INSTANCE) + .updateSerializer(CodeBuilderSourcePacket.class, CodeBuilderSourceSerializer_v685.INSTANCE) + .updateSerializer(EventPacket.class, EventSerializer_v685.INSTANCE) + .updateSerializer(StartGamePacket.class, StartGameSerializer_v685.INSTANCE) + .updateSerializer(TextPacket.class, TextSerializer_v685.INSTANCE) + .registerPacket(AwardAchievementPacket::new, AwardAchievementSerializer_v685.INSTANCE, 309, PacketRecipient.CLIENT) + .deregisterPacket(TickSyncPacket.class) // this packet is now deprecated + .build(); +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/AwardAchievementSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/AwardAchievementSerializer_v685.java new file mode 100644 index 000000000..ce34f9c62 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/AwardAchievementSerializer_v685.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.AwardAchievementPacket; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class AwardAchievementSerializer_v685 implements BedrockPacketSerializer { + public static final AwardAchievementSerializer_v685 INSTANCE = new AwardAchievementSerializer_v685(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, AwardAchievementPacket packet) { + buffer.writeIntLE(packet.getAchievementId()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, AwardAchievementPacket packet) { + packet.setAchievementId(buffer.readIntLE()); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CodeBuilderSourceSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CodeBuilderSourceSerializer_v685.java new file mode 100644 index 000000000..f54813209 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CodeBuilderSourceSerializer_v685.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.CodeBuilderCategoryType; +import org.cloudburstmc.protocol.bedrock.data.CodeBuilderCodeStatus; +import org.cloudburstmc.protocol.bedrock.data.CodeBuilderOperationType; +import org.cloudburstmc.protocol.bedrock.packet.CodeBuilderSourcePacket; + +public class CodeBuilderSourceSerializer_v685 implements BedrockPacketSerializer { + public static final CodeBuilderSourceSerializer_v685 INSTANCE = new CodeBuilderSourceSerializer_v685(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CodeBuilderSourcePacket packet) { + buffer.writeByte(packet.getOperation().ordinal()); + buffer.writeByte(packet.getCategory().ordinal()); + buffer.writeByte(packet.getCodeStatus().ordinal()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CodeBuilderSourcePacket packet) { + packet.setOperation(CodeBuilderOperationType.values()[buffer.readByte()]); + packet.setCategory(CodeBuilderCategoryType.values()[buffer.readByte()]); + packet.setCodeStatus(CodeBuilderCodeStatus.values()[buffer.readByte()]); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/ContainerCloseSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/ContainerCloseSerializer_v685.java new file mode 100644 index 000000000..9e3b43709 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/ContainerCloseSerializer_v685.java @@ -0,0 +1,25 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; +import org.cloudburstmc.protocol.bedrock.packet.ContainerClosePacket; + +public class ContainerCloseSerializer_v685 implements BedrockPacketSerializer { + public static final ContainerCloseSerializer_v685 INSTANCE = new ContainerCloseSerializer_v685(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ContainerClosePacket packet) { + buffer.writeByte(packet.getId()); + buffer.writeByte(packet.getType().ordinal()); + buffer.writeBoolean(packet.isServerInitiated()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ContainerClosePacket packet) { + packet.setId(buffer.readByte()); + packet.setType(ContainerType.from(buffer.readByte())); + packet.setServerInitiated(buffer.readBoolean()); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java new file mode 100644 index 000000000..7a90087b1 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java @@ -0,0 +1,111 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685.serializer; + +import io.netty.buffer.ByteBuf; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import java.util.List; +import java.util.UUID; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v671.serializer.CraftingDataSerializer_v671; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.CraftingDataType; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.CraftingRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class CraftingDataSerializer_v685 extends CraftingDataSerializer_v671 { + public static final CraftingDataSerializer_v685 INSTANCE = new CraftingDataSerializer_v685(); + + @Override + protected ShapelessRecipeData readShapelessRecipe(ByteBuf buffer, BedrockCodecHelper helper, CraftingDataType type) { + String recipeId = helper.readString(buffer); + List inputs = new ObjectArrayList<>(); + helper.readArray(buffer, inputs, helper::readIngredient); + + List outputs = new ObjectArrayList<>(); + helper.readArray(buffer, outputs, helper::readItemInstance); + + UUID uuid = helper.readUuid(buffer); + String craftingTag = helper.readString(buffer); + int priority = VarInts.readInt(buffer); + RecipeUnlockingRequirement requirement = this.readRequirement(buffer, helper, type); + int networkId = VarInts.readUnsignedInt(buffer); + return ShapelessRecipeData.of(type, recipeId, inputs, outputs, uuid, craftingTag, priority, networkId, requirement); + } + + @Override + protected void writeShapelessRecipe(ByteBuf buffer, BedrockCodecHelper helper, ShapelessRecipeData data) { + helper.writeString(buffer, data.getId()); + helper.writeArray(buffer, data.getIngredients(), helper::writeIngredient); + helper.writeArray(buffer, data.getResults(), helper::writeItemInstance); + + helper.writeUuid(buffer, data.getUuid()); + helper.writeString(buffer, data.getTag()); + VarInts.writeInt(buffer, data.getPriority()); + this.writeRequirement(buffer, helper, data); + VarInts.writeUnsignedInt(buffer, data.getNetId()); + } + + @Override + protected ShapedRecipeData readShapedRecipe(ByteBuf buffer, BedrockCodecHelper helper, CraftingDataType type) { + String recipeId = helper.readString(buffer); + int width = VarInts.readInt(buffer); + int height = VarInts.readInt(buffer); + int inputCount = width * height; + List inputs = new ObjectArrayList<>(inputCount); + for (int i = 0; i < inputCount; i++) { + inputs.add(helper.readIngredient(buffer)); + } + List outputs = new ObjectArrayList<>(); + helper.readArray(buffer, outputs, helper::readItemInstance); + UUID uuid = helper.readUuid(buffer); + String craftingTag = helper.readString(buffer); + int priority = VarInts.readInt(buffer); + boolean assumeSymmetry = buffer.readBoolean(); + RecipeUnlockingRequirement requirement = this.readRequirement(buffer, helper, type); + int networkId = VarInts.readUnsignedInt(buffer); + return ShapedRecipeData.of(type, recipeId, width, height, inputs, outputs, uuid, craftingTag, priority, networkId, assumeSymmetry, requirement); + } + + @Override + protected void writeShapedRecipe(ByteBuf buffer, BedrockCodecHelper helper, ShapedRecipeData data) { + helper.writeString(buffer, data.getId()); + VarInts.writeInt(buffer, data.getWidth()); + VarInts.writeInt(buffer, data.getHeight()); + int count = data.getWidth() * data.getHeight(); + List inputs = data.getIngredients(); + for (int i = 0; i < count; i++) { + helper.writeIngredient(buffer, inputs.get(i)); + } + helper.writeArray(buffer, data.getResults(), helper::writeItemInstance); + helper.writeUuid(buffer, data.getUuid()); + helper.writeString(buffer, data.getTag()); + VarInts.writeInt(buffer, data.getPriority()); + buffer.writeBoolean(data.isAssumeSymetry()); + this.writeRequirement(buffer, helper, data); + VarInts.writeUnsignedInt(buffer, data.getNetId()); + } + + protected RecipeUnlockingRequirement readRequirement(ByteBuf buffer, BedrockCodecHelper helper, CraftingDataType type) { + if (!type.equals(CraftingDataType.SHAPED) && !type.equals(CraftingDataType.SHAPELESS)) { + return RecipeUnlockingRequirement.INVALID; + } + final RecipeUnlockingRequirement requirement = new RecipeUnlockingRequirement(RecipeUnlockingRequirement.UnlockingContext.from(buffer.readByte())); + if (requirement.getContext().equals(RecipeUnlockingRequirement.UnlockingContext.NONE)) { + helper.readArray(buffer, requirement.getIngredients(), (buf, h) -> h.readIngredient(buf)); + } + return requirement; + } + + protected void writeRequirement(ByteBuf buffer, BedrockCodecHelper helper, CraftingRecipeData data) { + if (!data.getType().equals(CraftingDataType.SHAPED) && !data.getType().equals(CraftingDataType.SHAPELESS)) { + return; + } + buffer.writeByte(data.getRequirement().getContext().ordinal()); + if (data.getRequirement().getContext().equals(RecipeUnlockingRequirement.UnlockingContext.NONE)) { + helper.writeArray(buffer, data.getRequirement().getIngredients(), (buf, h, ingredient) -> h.writeIngredient(buf, ingredient)); + } + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/EventSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/EventSerializer_v685.java new file mode 100644 index 000000000..6665bb71e --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/EventSerializer_v685.java @@ -0,0 +1,34 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v589.serializer.EventSerializer_v589; +import org.cloudburstmc.protocol.bedrock.data.event.EventData; +import org.cloudburstmc.protocol.bedrock.data.event.EventDataType; +import org.cloudburstmc.protocol.bedrock.data.event.ItemUsedEventData; + +public class EventSerializer_v685 extends EventSerializer_v589 { + public static final EventSerializer_v685 INSTANCE = new EventSerializer_v685(); + + public EventSerializer_v685() { + super(); + this.readers.put(EventDataType.ITEM_USED_EVENT, this::readItemUsed); + this.writers.put(EventDataType.ITEM_USED_EVENT, this::writeItemUsed); + } + + protected ItemUsedEventData readItemUsed(ByteBuf buffer, BedrockCodecHelper helper) { + short itemId = buffer.readShortLE(); + int itemAux = buffer.readIntLE(); + int useMethod = buffer.readIntLE(); + int useCount = buffer.readIntLE(); + return new ItemUsedEventData(itemId, itemAux, useMethod, useCount); + } + + protected void writeItemUsed(ByteBuf buffer, BedrockCodecHelper helper, EventData eventData) { + ItemUsedEventData event = (ItemUsedEventData) eventData; + buffer.writeShortLE(event.getItemId()); + buffer.writeIntLE(event.getItemAux()); + buffer.writeIntLE(event.getUseMethod()); + buffer.writeIntLE(event.getUseCount()); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/StartGameSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/StartGameSerializer_v685.java new file mode 100644 index 000000000..b9240a914 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/StartGameSerializer_v685.java @@ -0,0 +1,26 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v671.serializer.StartGameSerializer_v671; +import org.cloudburstmc.protocol.bedrock.packet.StartGamePacket; + +public class StartGameSerializer_v685 extends StartGameSerializer_v671 { + public static final StartGameSerializer_v685 INSTANCE = new StartGameSerializer_v685(); + + @Override + protected void writeLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + super.writeLevelSettings(buffer, helper, packet); + helper.writeString(buffer, packet.getServerId()); + helper.writeString(buffer, packet.getWorldId()); + helper.writeString(buffer, packet.getScenarioId()); + } + + @Override + protected void readLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + super.readLevelSettings(buffer, helper, packet); + packet.setServerId(helper.readString(buffer)); + packet.setWorldId(helper.readString(buffer)); + packet.setScenarioId(helper.readString(buffer)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/TextSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/TextSerializer_v685.java new file mode 100644 index 000000000..4ce007806 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/TextSerializer_v685.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v685.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v554.serializer.TextSerializer_v554; +import org.cloudburstmc.protocol.bedrock.packet.TextPacket; + +public class TextSerializer_v685 extends TextSerializer_v554 { + public static final TextSerializer_v685 INSTANCE = new TextSerializer_v685(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeString(buffer, packet.getFilteredMessage()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setFilteredMessage(helper.readString(buffer)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/CodeBuilderCodeStatus.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/CodeBuilderCodeStatus.java new file mode 100644 index 000000000..23d9dbf1a --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/CodeBuilderCodeStatus.java @@ -0,0 +1,10 @@ +package org.cloudburstmc.protocol.bedrock.data; + +public enum CodeBuilderCodeStatus { + NONE, + NOT_STARTED, + IN_PROGRESS, + PAUSED, + ERROR, + SUCCEEDED +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java index a00d48165..70fa0a510 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java @@ -90,7 +90,10 @@ public enum DisconnectFailReason { CONN_NEGOTIATION_TIMEOUT, CONN_INACTIVITY_TIMEOUT, STALE_CONNECTION_BEING_REPLACED, - REALMS_SESSION_NOT_FOUND, + /** + * @deprecated since v685 + */ + REALMS_SESSION_NOT_FOUND_DEPRECATED, BAD_PACKET, CONN_FAILED_TO_CREATE_OFFER, CONN_FAILED_TO_CREATE_ANSWER, diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/LevelEvent.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/LevelEvent.java index 5ef5f6926..e9b4c710b 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/LevelEvent.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/LevelEvent.java @@ -99,6 +99,12 @@ public enum LevelEvent implements LevelEventType { * @since v662 */ PARTICLE_BREEZE_WIND_EXPLOSION, + /** + * @since v685 + */ + PARTICLE_TRIAL_SPAWNER_DETECTION_CHARGED, + PARTICLE_TRIAL_SPAWNER_BECOME_CHARGED, + PARTICLE_SMASH_ATTACK_GROUND_DUST, SCULK_CATALYST_BLOOM, SCULK_CHARGE, @@ -152,4 +158,8 @@ public enum LevelEvent implements LevelEventType { ANIMATION_VAULT_ACTIVATE, ANIMATION_VAULT_DEACTIVATE, ANIMATION_VAULT_EJECT_ITEM, + /** + * @since v685 + */ + ANIMATION_SPAWN_COBWEB, } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerAuthInputData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerAuthInputData.java index e631a8653..fc7549e03 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerAuthInputData.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerAuthInputData.java @@ -3,6 +3,9 @@ public enum PlayerAuthInputData { ASCEND, DESCEND, + /** + * @deprecated since v685 + */ NORTH_JUMP, JUMP_DOWN, SPRINT_DOWN, @@ -81,5 +84,9 @@ public enum PlayerAuthInputData { /** * @since v662 */ - PADDLE_RIGHT + PADDLE_RIGHT, + /** + * @since v685 + */ + BLOCK_BREAKING_DELAY_ENABLED } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java index 7b71fede9..504bed958 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java @@ -661,6 +661,54 @@ public enum SoundEvent { * @since v671 */ MACE_SMASH_HEAVY_GROUND, + /** + * @since v685 + */ + TRAIL_SPAWNER_CHARGE_ACTIVATE, + /** + * @since v685 + */ + TRAIL_SPAWNER_AMBIENT_OMINOUS, + /** + * @since v685 + */ + OMINOUS_ITEM_SPAWNER_SPAWN_ITEM, + /** + * @since v685 + */ + OMINOUS_BOTTLE_END_USE, + /** + * @since v685 + */ + OMINOUS_ITEM_SPAWNER_SPAWN_ITEM_BEGIN, + /** + * @since v685 + */ + APPLY_EFFECT_BAD_OMEN, + /** + * @since v685 + */ + APPLY_EFFECT_RAID_OMEN, + /** + * @since v685 + */ + APPLY_EFFECT_TRIAL_OMEN, + /** + * @since v685 + */ + OMINOUS_ITEM_SPAWNER_ABOUT_TO_SPAWN_ITEM, + /** + * @since v685 + */ + RECORD_CREATOR, + /** + * @since v685 + */ + RECORD_CREATOR_MUSIC_BOX, + /** + * @since v685 + */ + RECORD_PRECIPICE, UNDEFINED } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java index 8e774660c..26b0452b3 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java @@ -97,7 +97,10 @@ public class CommandParam { public static final CommandParam HAS_PROPERTY_ELEMENT = new CommandParam(CommandParamType.HAS_PROPERTY_ELEMENT); public static final CommandParam HAS_PROPERTY_ELEMENTS = new CommandParam(CommandParamType.HAS_PROPERTY_ELEMENTS); public static final CommandParam HAS_PROPERTY_SELECTOR = new CommandParam(CommandParamType.HAS_PROPERTY_SELECTOR); - + public static final CommandParam CODE_BUILDER_ARG = new CommandParam(CommandParamType.CODE_BUILDER_ARG); + public static final CommandParam CODE_BUILDER_ARGS = new CommandParam(CommandParamType.CODE_BUILDER_ARGS); + public static final CommandParam CODE_BUILDER_SELECT_PARAM = new CommandParam(CommandParamType.CODE_BUILDER_SELECT_PARAM); + public static final CommandParam CODE_BUILDER_SELECTOR = new CommandParam(CommandParamType.CODE_BUILDER_SELECTOR); private final CommandParamType paramType; private final int defaultValue; diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java index 780d52dca..a87280549 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java @@ -90,4 +90,8 @@ public enum CommandParamType { HAS_PROPERTY_ELEMENT, HAS_PROPERTY_ELEMENTS, HAS_PROPERTY_SELECTOR, + CODE_BUILDER_ARG, + CODE_BUILDER_ARGS, + CODE_BUILDER_SELECT_PARAM, + CODE_BUILDER_SELECTOR, } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java index 3c7a87f77..6d5ffe29f 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java @@ -32,6 +32,10 @@ public boolean isInstance(Object value) { public static final EntityDataType TARGET_EID = new EntityDataType<>(Long.class, "TARGET_EID"); public static final EntityDataType AIR_SUPPLY = new EntityDataType<>(Short.class, "AIR_SUPPLY"); public static final EntityDataType EFFECT_COLOR = new EntityDataType<>(Integer.class, "EFFECT_COLOR"); + /** + * @deprecated since v685 + */ + @Deprecated public static final EntityDataType EFFECT_AMBIENCE = new EntityDataType<>(Byte.class, "EFFECT_AMBIENCE"); public static final EntityDataType JUMP_DURATION = new EntityDataType<>(Byte.class, "JUMP_DURATION"); public static final EntityDataType HURT_TICKS = new EntityDataType<>(Integer.class, "HURT_TICKS"); @@ -177,6 +181,10 @@ public boolean isInstance(Object value) { public static final EntityDataType LAYING_AMOUNT_PREVIOUS = new EntityDataType<>(Float.class, "LAYING_AMOUNT_PREVIOUS"); public static final EntityDataType AREA_EFFECT_CLOUD_DURATION = new EntityDataType<>(Integer.class, "AREA_EFFECT_CLOUD_DURATION"); public static final EntityDataType AREA_EFFECT_CLOUD_SPAWN_TIME = new EntityDataType<>(Integer.class, "AREA_EFFECT_CLOUD_SPAWN_TIME"); + /** + * @deprecated since v685 + */ + @Deprecated public static final EntityDataType AREA_EFFECT_CLOUD_CHANGE_RATE = new EntityDataType<>(Float.class, "AREA_EFFECT_CLOUD_CHANGE_RATE"); public static final EntityDataType AREA_EFFECT_CLOUD_CHANGE_ON_PICKUP = new EntityDataType<>(Float.class, "AREA_EFFECT_CLOUD_CHANGE_ON_PICKUP"); public static final EntityDataType AREA_EFFECT_CLOUD_PICKUP_COUNT = new EntityDataType<>(Integer.class, "AREA_EFFECT_CLOUD_PICKUP_COUNT"); @@ -264,4 +272,8 @@ public boolean isInstance(Object value) { * @since v594 */ public static final EntityDataType COLLISION_BOX = new EntityDataType<>(Vector3f.class, "COLLISION_BOX"); + /** + * @since v685 + */ + public static final EntityDataType VISIBLE_MOB_EFFECTS = new EntityDataType<>(NbtMap.class, "VISIBLE_MOB_EFFECTS"); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventDataType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventDataType.java index 9a9b8be3a..fa8e2ab58 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventDataType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventDataType.java @@ -34,5 +34,9 @@ public enum EventDataType { /** * @since v589 */ - CAREFUL_RESTORATION + CAREFUL_RESTORATION, + /** + * @since v685 + */ + ITEM_USED_EVENT } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java new file mode 100644 index 000000000..2414064ae --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java @@ -0,0 +1,16 @@ +package org.cloudburstmc.protocol.bedrock.data.event; + +import lombok.Value; + +@Value +public class ItemUsedEventData implements EventData { + private final short itemId; + private final int itemAux; + private final int useMethod; + private final int useCount; + + @Override + public EventDataType getType() { + return EventDataType.ITEM_USED_EVENT; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ItemUseType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ItemUseType.java index 4625bc825..304cdb41d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ItemUseType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ItemUseType.java @@ -20,5 +20,9 @@ public enum ItemUseType { /** * @since 594 */ - BRUSHING_COMPLETED + BRUSHING_COMPLETED, + /** + * @since v685 + */ + OPENED_VAULT } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/RecipeUnlockingRequirement.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/RecipeUnlockingRequirement.java new file mode 100644 index 000000000..4124325a8 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/RecipeUnlockingRequirement.java @@ -0,0 +1,32 @@ +package org.cloudburstmc.protocol.bedrock.data.inventory.crafting; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import lombok.Value; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; + +import java.util.List; + +@Value +public class RecipeUnlockingRequirement { + public static final RecipeUnlockingRequirement INVALID = new RecipeUnlockingRequirement(UnlockingContext.NONE); + + UnlockingContext context; + List ingredients = new ObjectArrayList<>(); + + public enum UnlockingContext { + NONE, + ALWAYS_UNLOCKED, + PLAYER_IN_WATER, + PLAYER_HAS_MANY_ITEMS; + + private static final UnlockingContext[] VALUES = values(); + + public static UnlockingContext from(int id) { + return VALUES[id]; + } + } + + public boolean isInvalid() { + return this.ingredients.isEmpty() && this.context.equals(UnlockingContext.NONE); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/CraftingRecipeData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/CraftingRecipeData.java index 0f2d11157..4303308d7 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/CraftingRecipeData.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/CraftingRecipeData.java @@ -1,6 +1,7 @@ package org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import java.util.List; @@ -15,4 +16,6 @@ public interface CraftingRecipeData extends TaggedCraftingData, UniqueCraftingDa List getResults(); int getPriority(); + + RecipeUnlockingRequirement getRequirement(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapedRecipeData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapedRecipeData.java index 17c530005..87f5c9fd7 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapedRecipeData.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapedRecipeData.java @@ -3,6 +3,7 @@ import lombok.*; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.CraftingDataType; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import java.util.List; @@ -30,31 +31,43 @@ public class ShapedRecipeData implements CraftingRecipeData { * @since v671 */ private final boolean assumeSymetry; + /** + * @since v685 + */ + private final RecipeUnlockingRequirement requirement; public static ShapedRecipeData of(CraftingDataType type, String id, int width, int height, List ingredients, List results, UUID uuid, String tag, int priority, int netId) { + return ShapedRecipeData.of(type, id, width, height, ingredients, results, uuid, tag, priority, netId, false, + RecipeUnlockingRequirement.INVALID); + } + + public static ShapedRecipeData of(CraftingDataType type, String id, int width, int height, + List ingredients, List results, UUID uuid, + String tag, int priority, int netId, boolean assumeSymetry, RecipeUnlockingRequirement requirement) { checkArgument(type == CraftingDataType.SHAPED || type == CraftingDataType.SHAPED_CHEMISTRY, "type must be SHAPED or SHAPED_CHEMISTRY"); - return new ShapedRecipeData(type, id, width, height, ingredients, results, uuid, tag, priority, netId, false); + return new ShapedRecipeData(type, id, width, height, ingredients, results, uuid, tag, priority, netId, assumeSymetry, requirement); } public static ShapedRecipeData of(CraftingDataType type, String id, int width, int height, List ingredients, List results, UUID uuid, String tag, int priority, int netId, boolean assumeSymetry) { - checkArgument(type == CraftingDataType.SHAPED || type == CraftingDataType.SHAPED_CHEMISTRY, - "type must be SHAPED or SHAPED_CHEMISTRY"); - return new ShapedRecipeData(type, id, width, height, ingredients, results, uuid, tag, priority, netId, assumeSymetry); + return ShapedRecipeData.of(type, id, width, height, ingredients, results, uuid, tag, priority, netId, assumeSymetry, + RecipeUnlockingRequirement.INVALID); } public static ShapedRecipeData shaped(String id, int width, int height, List ingredients, - List results, UUID uuid, String tag, int priority, int netId, boolean assumeSymetry) { - return of(CraftingDataType.SHAPED, id, width, height, ingredients, results, uuid, tag, priority, netId, assumeSymetry); + List results, UUID uuid, String tag, int priority, int netId, boolean assumeSymetry, + RecipeUnlockingRequirement requirement) { + return of(CraftingDataType.SHAPED, id, width, height, ingredients, results, uuid, tag, priority, netId, assumeSymetry, requirement); } public static ShapedRecipeData shapedChemistry(String id, int width, int height, List ingredients, List results, UUID uuid, String tag, int priority, int netId, boolean assumeSymetry) { - return of(CraftingDataType.SHAPED_CHEMISTRY, id, width, height, ingredients, results, uuid, tag, priority, netId, assumeSymetry); + return of(CraftingDataType.SHAPED_CHEMISTRY, id, width, height, ingredients, results, uuid, tag, priority, netId, + assumeSymetry); } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapelessRecipeData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapelessRecipeData.java index 6e6110766..b9d6d5d4d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapelessRecipeData.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/ShapelessRecipeData.java @@ -3,6 +3,7 @@ import lombok.*; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.CraftingDataType; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import java.util.List; @@ -24,17 +25,29 @@ public class ShapelessRecipeData implements CraftingRecipeData { private final String tag; private final int priority; private final int netId; + /** + * @since v685 + */ + private final RecipeUnlockingRequirement requirement; public static ShapelessRecipeData of(CraftingDataType type, String id, List ingredients, - List results, UUID uuid, String tag, int priority, int netId) { + List results, UUID uuid, String tag, int priority, int netId, + RecipeUnlockingRequirement requirement) { checkArgument(type == CraftingDataType.SHAPELESS || type == CraftingDataType.SHAPELESS_CHEMISTRY || type == CraftingDataType.SHULKER_BOX, "type must be SHAPELESS, SHAPELESS_CHEMISTRY or SHULKER_BOX"); - return new ShapelessRecipeData(type, id, ingredients, results, uuid, tag, priority, netId); + return new ShapelessRecipeData(type, id, ingredients, results, uuid, tag, priority, netId, requirement); + } + + public static ShapelessRecipeData of(CraftingDataType type, String id, List ingredients, + List results, UUID uuid, String tag, int priority, int netId) { + return ShapelessRecipeData.of(type, id, ingredients, results, uuid, tag, priority, netId, + RecipeUnlockingRequirement.INVALID); } public static ShapelessRecipeData shapeless(String id, List ingredients, - List results, UUID uuid, String tag, int priority, int netId) { - return of(CraftingDataType.SHAPELESS, id, ingredients, results, uuid, tag, priority, netId); + List results, UUID uuid, String tag, int priority, int netId, + RecipeUnlockingRequirement requirement) { + return of(CraftingDataType.SHAPELESS, id, ingredients, results, uuid, tag, priority, netId, requirement); } public static ShapelessRecipeData shapelessChemistry(String id, List ingredients, diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java new file mode 100644 index 000000000..a542b9197 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class AwardAchievementPacket implements BedrockPacket { + private int achievementId; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.AWARD_ACHIEVEMENT; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java index a66cd7512..28db4a2b3 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java @@ -835,4 +835,8 @@ default PacketSignal handle(SetPlayerInventoryOptionsPacket packet) { default PacketSignal handle(SetHudPacket packet) { return PacketSignal.UNHANDLED; } + + default PacketSignal handle(AwardAchievementPacket packet) { + return PacketSignal.UNHANDLED; + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java index 5ca257d25..87faa794e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java @@ -207,5 +207,6 @@ public enum BedrockPacketType { REFRESH_ENTITLEMENTS, TOGGLE_CRAFTER_SLOT_REQUEST, SET_PLAYER_INVENTORY_OPTIONS, - SET_HUD + SET_HUD, + AWARD_ACHIEVEMENT } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java index 9690759f6..26316183c 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java @@ -4,6 +4,7 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import org.cloudburstmc.protocol.bedrock.data.CodeBuilderCategoryType; +import org.cloudburstmc.protocol.bedrock.data.CodeBuilderCodeStatus; import org.cloudburstmc.protocol.bedrock.data.CodeBuilderOperationType; import org.cloudburstmc.protocol.common.PacketSignal; @@ -14,7 +15,14 @@ public class CodeBuilderSourcePacket implements BedrockPacket { private CodeBuilderOperationType operation; private CodeBuilderCategoryType category; + /** + * @deprecated since v685 + */ private String value; + /** + * @since v685 + */ + private CodeBuilderCodeStatus codeStatus; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java index 359377e6b..58f0c4046 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java @@ -3,6 +3,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.cloudburstmc.protocol.common.PacketSignal; @Data @@ -10,6 +11,7 @@ @ToString(doNotUseGetters = true) public class ContainerClosePacket implements BedrockPacket { private byte id; + private ContainerType type; private boolean serverInitiated; @Override diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java index c754e1d53..4ca27aebd 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java @@ -174,6 +174,18 @@ public class StartGamePacket implements BedrockPacket { * @since v671 */ private boolean hardcore; + /** + * @since v685 + */ + private String serverId; + /** + * @since v685 + */ + private String worldId; + /** + * @since v685 + */ + private String scenarioId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java index 5a1473e2c..6d5f7de8a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java @@ -19,6 +19,7 @@ public class TextPacket implements BedrockPacket { private List parameters = new ObjectArrayList<>(); private String xuid; private String platformChatId = ""; + private String filteredMessage; @Override public final PacketSignal handle(BedrockPacketHandler handler) { From c679da92fb164e22c6614e1fea312de702a16cb7 Mon Sep 17 00:00:00 2001 From: Kaooot <37877491+Kaooot@users.noreply.github.com> Date: Wed, 8 May 2024 00:41:34 +0200 Subject: [PATCH 6/8] Add comments --- .../protocol/bedrock/packet/ContainerClosePacket.java | 5 ++++- .../org/cloudburstmc/protocol/bedrock/packet/TextPacket.java | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java index 58f0c4046..0f7d236e4 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java @@ -11,8 +11,11 @@ @ToString(doNotUseGetters = true) public class ContainerClosePacket implements BedrockPacket { private byte id; - private ContainerType type; private boolean serverInitiated; + /** + * @since v685 + */ + private ContainerType type; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java index 6d5f7de8a..1eae9ada8 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java @@ -19,6 +19,9 @@ public class TextPacket implements BedrockPacket { private List parameters = new ObjectArrayList<>(); private String xuid; private String platformChatId = ""; + /** + * @since v685 + */ private String filteredMessage; @Override From 0eeb31c808cc089d134ffb7d3408745780c175f0 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Thu, 16 May 2024 14:12:45 +0200 Subject: [PATCH 7/8] Missing particle type & small tweaks --- .../protocol/bedrock/codec/v685/Bedrock_v685.java | 10 ++++++---- .../v685/serializer/CraftingDataSerializer_v685.java | 8 +------- .../protocol/bedrock/data/ParticleType.java | 6 +++++- .../protocol/bedrock/packet/TextPacket.java | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java index 2396edfb3..5f39d05ec 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/Bedrock_v685.java @@ -11,10 +11,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v594.serializer.AvailableCommandsSerializer_v594; import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; import org.cloudburstmc.protocol.bedrock.codec.v685.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.*; import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -23,6 +20,10 @@ public class Bedrock_v685 extends Bedrock_v671 { + protected static final TypeMap PARTICLE_TYPES = Bedrock_v671.PARTICLE_TYPES.toBuilder() + .insert(93, ParticleType.OMINOUS_ITEM_SPAWNER) + .build(); + protected static final TypeMap SOUND_EVENTS = Bedrock_v671.SOUND_EVENTS .toBuilder() .insert(516, SoundEvent.TRAIL_SPAWNER_CHARGE_ACTIVATE) @@ -54,6 +55,7 @@ public class Bedrock_v685 extends Bedrock_v671 { .build(); protected static final TypeMap LEVEL_EVENTS = Bedrock_v671.LEVEL_EVENTS.toBuilder() + .insert(LEVEL_EVENT_PARTICLE_TYPE, PARTICLE_TYPES) .replace(LEVEL_EVENT_BLOCK + 115, LevelEvent.PARTICLE_TRIAL_SPAWNER_DETECTION_CHARGED) .insert(LEVEL_EVENT_BLOCK + 116, LevelEvent.PARTICLE_TRIAL_SPAWNER_BECOME_CHARGED) .insert(LEVEL_EVENT_BLOCK + 117, LevelEvent.ALL_PLAYERS_SLEEPING) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java index 7a90087b1..4be68816a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java @@ -89,10 +89,7 @@ protected void writeShapedRecipe(ByteBuf buffer, BedrockCodecHelper helper, Shap } protected RecipeUnlockingRequirement readRequirement(ByteBuf buffer, BedrockCodecHelper helper, CraftingDataType type) { - if (!type.equals(CraftingDataType.SHAPED) && !type.equals(CraftingDataType.SHAPELESS)) { - return RecipeUnlockingRequirement.INVALID; - } - final RecipeUnlockingRequirement requirement = new RecipeUnlockingRequirement(RecipeUnlockingRequirement.UnlockingContext.from(buffer.readByte())); + RecipeUnlockingRequirement requirement = new RecipeUnlockingRequirement(RecipeUnlockingRequirement.UnlockingContext.from(buffer.readByte())); if (requirement.getContext().equals(RecipeUnlockingRequirement.UnlockingContext.NONE)) { helper.readArray(buffer, requirement.getIngredients(), (buf, h) -> h.readIngredient(buf)); } @@ -100,9 +97,6 @@ protected RecipeUnlockingRequirement readRequirement(ByteBuf buffer, BedrockCode } protected void writeRequirement(ByteBuf buffer, BedrockCodecHelper helper, CraftingRecipeData data) { - if (!data.getType().equals(CraftingDataType.SHAPED) && !data.getType().equals(CraftingDataType.SHAPELESS)) { - return; - } buffer.writeByte(data.getRequirement().getContext().ordinal()); if (data.getRequirement().getContext().equals(RecipeUnlockingRequirement.UnlockingContext.NONE)) { helper.writeArray(buffer, data.getRequirement().getIngredients(), (buf, h, ingredient) -> h.writeIngredient(buf, ingredient)); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java index b838140e5..33c392759 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java @@ -117,5 +117,9 @@ public enum ParticleType implements LevelEventType { /** * @since v671 */ - WOLF_ARMOR_BREAK + WOLF_ARMOR_BREAK, + /** + * @since 685 + */ + OMINOUS_ITEM_SPAWNER, } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java index 1eae9ada8..896df2ad4 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java @@ -22,7 +22,7 @@ public class TextPacket implements BedrockPacket { /** * @since v685 */ - private String filteredMessage; + private String filteredMessage = ""; @Override public final PacketSignal handle(BedrockPacketHandler handler) { From 6dc823223c3131ebdca0d80ad633f9c8d4ad2666 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Thu, 16 May 2024 18:43:34 +0200 Subject: [PATCH 8/8] Move this logic to other method --- .../CraftingDataSerializer_v685.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java index 4be68816a..bff737a9f 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v685/serializer/CraftingDataSerializer_v685.java @@ -30,7 +30,12 @@ protected ShapelessRecipeData readShapelessRecipe(ByteBuf buffer, BedrockCodecHe UUID uuid = helper.readUuid(buffer); String craftingTag = helper.readString(buffer); int priority = VarInts.readInt(buffer); - RecipeUnlockingRequirement requirement = this.readRequirement(buffer, helper, type); + + RecipeUnlockingRequirement requirement = RecipeUnlockingRequirement.INVALID; + if (type == CraftingDataType.SHAPELESS) { + requirement = this.readRequirement(buffer, helper, type); + } + int networkId = VarInts.readUnsignedInt(buffer); return ShapelessRecipeData.of(type, recipeId, inputs, outputs, uuid, craftingTag, priority, networkId, requirement); } @@ -44,7 +49,10 @@ protected void writeShapelessRecipe(ByteBuf buffer, BedrockCodecHelper helper, S helper.writeUuid(buffer, data.getUuid()); helper.writeString(buffer, data.getTag()); VarInts.writeInt(buffer, data.getPriority()); - this.writeRequirement(buffer, helper, data); + + if (data.getType() == CraftingDataType.SHAPELESS) { + this.writeRequirement(buffer, helper, data); + } VarInts.writeUnsignedInt(buffer, data.getNetId()); } @@ -64,7 +72,12 @@ protected ShapedRecipeData readShapedRecipe(ByteBuf buffer, BedrockCodecHelper h String craftingTag = helper.readString(buffer); int priority = VarInts.readInt(buffer); boolean assumeSymmetry = buffer.readBoolean(); - RecipeUnlockingRequirement requirement = this.readRequirement(buffer, helper, type); + + RecipeUnlockingRequirement requirement = RecipeUnlockingRequirement.INVALID; + if (type == CraftingDataType.SHAPED) { + requirement = this.readRequirement(buffer, helper, type); + } + int networkId = VarInts.readUnsignedInt(buffer); return ShapedRecipeData.of(type, recipeId, width, height, inputs, outputs, uuid, craftingTag, priority, networkId, assumeSymmetry, requirement); } @@ -84,7 +97,11 @@ protected void writeShapedRecipe(ByteBuf buffer, BedrockCodecHelper helper, Shap helper.writeString(buffer, data.getTag()); VarInts.writeInt(buffer, data.getPriority()); buffer.writeBoolean(data.isAssumeSymetry()); - this.writeRequirement(buffer, helper, data); + + if (data.getType() == CraftingDataType.SHAPED) { + this.writeRequirement(buffer, helper, data); + } + VarInts.writeUnsignedInt(buffer, data.getNetId()); }