diff --git a/crates/proto/src/version/v662/enums/actor_damage_cause.rs b/crates/proto/src/version/v662/enums/actor_damage_cause.rs index 6a47bb45..8a776a8e 100644 --- a/crates/proto/src/version/v662/enums/actor_damage_cause.rs +++ b/crates/proto/src/version/v662/enums/actor_damage_cause.rs @@ -1,6 +1,9 @@ use bedrockrs_macros::ProtoCodec; #[derive(ProtoCodec)] +#[enum_repr(i32)] +#[enum_endianness(var)] +#[repr(i32)] pub enum ActorDamageCause { None = -1, Override = 0, diff --git a/crates/proto/src/version/v662/enums/actor_type.rs b/crates/proto/src/version/v662/enums/actor_type.rs index 8d81b7f7..a4333b31 100644 --- a/crates/proto/src/version/v662/enums/actor_type.rs +++ b/crates/proto/src/version/v662/enums/actor_type.rs @@ -158,7 +158,7 @@ bitflags! { #[derive(ProtoCodec)] #[enum_repr(i32)] -#[enum_endianness(le)] +#[enum_endianness(var)] #[repr(i32)] pub enum ActorType { Undefined = Flags::UNDEFINED.bits(), diff --git a/crates/proto/src/version/v662/enums/book_edit_action.rs b/crates/proto/src/version/v662/enums/book_edit_action.rs index 9aa9794c..03f92cdc 100644 --- a/crates/proto/src/version/v662/enums/book_edit_action.rs +++ b/crates/proto/src/version/v662/enums/book_edit_action.rs @@ -1,10 +1,29 @@ use bedrockrs_macros::ProtoCodec; #[derive(ProtoCodec)] +#[enum_repr(i8)] +#[repr(i8)] pub enum BookEditAction { - ReplacePage = 0, - AddPage = 1, - DeletePage = 2, - SwapPages = 3, - Finalize = 4, + ReplacePage { + page_index: i8, + text_a: String, + text_b: String, + } = 0, + AddPage { + page_index: i8, + text_a: String, + text_b: String, + } = 1, + DeletePage { + page_index: i8, + } = 2, + SwapPages { + page_index_a: i8, + page_index_b: i8, + } = 3, + Finalize { + text_a: String, + text_b: String, + xuid: String, + } = 4, } \ No newline at end of file diff --git a/crates/proto/src/version/v662/enums/boss_event_update_type.rs b/crates/proto/src/version/v662/enums/boss_event_update_type.rs index b0129c92..a6122e8d 100644 --- a/crates/proto/src/version/v662/enums/boss_event_update_type.rs +++ b/crates/proto/src/version/v662/enums/boss_event_update_type.rs @@ -1,14 +1,47 @@ use bedrockrs_macros::ProtoCodec; +use crate::version::v662::types::ActorUniqueID; #[derive(ProtoCodec)] +#[enum_repr(i32)] +#[enum_endianness(le)] +#[repr(i32)] pub enum BossEventUpdateType { - Add = 0, - PlayerAdded = 1, + Add { + name: String, + #[endianness(le)] + health_percent: f32, + #[endianness(le)] + darken_screen: u16, + } = 0, + PlayerAdded { + player_id: ActorUniqueID, + } = 1, Remove = 2, - PlayerRemoved = 3, - UpdatePercent = 4, - UpdateName = 5, - UpdateProperties = 6, - UpdateStyle = 7, - Query = 8, + PlayerRemoved { + player_id: ActorUniqueID, + } = 3, + UpdatePercent { + #[endianness(le)] + health_percent: f32, + } = 4, + UpdateName { + name: String, + } = 5, + UpdateProperties { + #[endianness(le)] + darken_screen: u16, + #[endianness(var)] + color: u32, + #[endianness(var)] + overlay: u32, + } = 6, + UpdateStyle { + #[endianness(var)] + color: u32, + #[endianness(var)] + overlay: u32, + } = 7, + Query { + player_id: ActorUniqueID, + } = 8, } \ No newline at end of file diff --git a/crates/proto/src/version/v662/enums/command_output_type.rs b/crates/proto/src/version/v662/enums/command_output_type.rs index ff9138f8..695c38af 100644 --- a/crates/proto/src/version/v662/enums/command_output_type.rs +++ b/crates/proto/src/version/v662/enums/command_output_type.rs @@ -1,10 +1,12 @@ use bedrockrs_macros::ProtoCodec; #[derive(ProtoCodec)] +#[enum_repr(i8)] +#[repr(i8)] pub enum CommandOutputType { None = 0, LastOutput = 1, Silent = 2, AllOutput = 3, - DataSet = 4, + DataSet(String) = 4, } \ No newline at end of file diff --git a/crates/proto/src/version/v662/enums/minecraft_eventing.rs b/crates/proto/src/version/v662/enums/minecraft_eventing.rs index 13488b1d..19e85417 100644 --- a/crates/proto/src/version/v662/enums/minecraft_eventing.rs +++ b/crates/proto/src/version/v662/enums/minecraft_eventing.rs @@ -2,6 +2,9 @@ pub mod MinecraftEventing { use bedrockrs_macros::ProtoCodec; #[derive(ProtoCodec)] + #[enum_repr(i32)] + #[enum_endianness(var)] + #[repr(i32)] pub enum InteractionType { Breeding = 1, Taming = 2, @@ -22,6 +25,9 @@ pub mod MinecraftEventing { } #[derive(ProtoCodec)] + #[enum_repr(i32)] + #[enum_endianness(var)] + #[repr(i32)] pub enum POIBlockInteractionType { None = 0, Extend = 1, diff --git a/crates/proto/src/version/v662/enums/pack_type.rs b/crates/proto/src/version/v662/enums/pack_type.rs index c5997802..3726b74b 100644 --- a/crates/proto/src/version/v662/enums/pack_type.rs +++ b/crates/proto/src/version/v662/enums/pack_type.rs @@ -1,6 +1,8 @@ use bedrockrs_macros::ProtoCodec; #[derive(ProtoCodec)] +#[enum_repr(i8)] +#[repr(i8)] pub enum PackType { Invalid = 0, Addon = 1, diff --git a/crates/proto/src/version/v662/enums/photo_type.rs b/crates/proto/src/version/v662/enums/photo_type.rs index 73765479..1b1e3def 100644 --- a/crates/proto/src/version/v662/enums/photo_type.rs +++ b/crates/proto/src/version/v662/enums/photo_type.rs @@ -1,6 +1,8 @@ use bedrockrs_macros::ProtoCodec; #[derive(ProtoCodec)] +#[enum_repr(i8)] +#[repr(i8)] pub enum PhotoType { Portfolio = 0, PhotoItem = 1, diff --git a/crates/proto/src/version/v662/enums/player_list_packet_type.rs b/crates/proto/src/version/v662/enums/player_list_packet_type.rs index 3050e403..993ec268 100644 --- a/crates/proto/src/version/v662/enums/player_list_packet_type.rs +++ b/crates/proto/src/version/v662/enums/player_list_packet_type.rs @@ -1,7 +1,36 @@ +use uuid::Uuid; use bedrockrs_macros::ProtoCodec; +use crate::version::v662::enums::BuildPlatform; +use crate::version::v662::types::{ActorUniqueID, SerializedSkin}; #[derive(ProtoCodec)] +struct AddPlayerListEntry { + pub uuid: Uuid, + pub target_actor_id: ActorUniqueID, + pub player_name: String, + pub xbl_xuid: String, + pub platform_chat_id: String, + pub build_platform: BuildPlatform, + pub serialized_skin: SerializedSkin, + pub is_teacher: bool, + pub is_host: bool, + pub is_sub_client: bool, + +} + +#[derive(ProtoCodec)] +#[enum_repr(i8)] +#[repr(i8)] pub enum PlayerListPacketType { - Add = 0, - Remove = 1, + Add { + #[vec_repr(u32)] + #[vec_endianness(var)] + add_player_list: Vec, + is_trusted_skin: bool, + } = 0, + Remove { + #[vec_repr(u32)] + #[vec_endianness(var)] + remove_player_list: Vec + } = 1, } \ No newline at end of file diff --git a/crates/proto/src/version/v662/enums/player_position_mode_component.rs b/crates/proto/src/version/v662/enums/player_position_mode_component.rs index 26a7b49f..ed68ff4f 100644 --- a/crates/proto/src/version/v662/enums/player_position_mode_component.rs +++ b/crates/proto/src/version/v662/enums/player_position_mode_component.rs @@ -9,8 +9,8 @@ pub mod PlayerPositionModeComponent { Normal = 0, Respawn = 1, Teleport { - teleportation_cause: MinecraftEventing::TeleportationCause, - source_actor_type: ActorType, + teleportation_cause: MinecraftEventing::TeleportationCause, // TODO: same here. listed as int without an enum. + source_actor_type: ActorType, // TODO: listed as int without enum. ActorType is assumed, but it is a varint enum. } = 2, OnlyHeadRot = 3, } diff --git a/crates/proto/src/version/v662/enums/show_store_offer_redirect_type.rs b/crates/proto/src/version/v662/enums/show_store_offer_redirect_type.rs index 9e927622..e8193c15 100644 --- a/crates/proto/src/version/v662/enums/show_store_offer_redirect_type.rs +++ b/crates/proto/src/version/v662/enums/show_store_offer_redirect_type.rs @@ -1,6 +1,8 @@ use bedrockrs_macros::ProtoCodec; #[derive(ProtoCodec)] +#[enum_repr(i8)] +#[repr(i8)] pub enum ShowStoreOfferRedirectType { MarketplaceOffer = 0, DressingRoomOffer = 1, diff --git a/crates/proto/src/version/v662/packets/add_behaviour_tree.rs b/crates/proto/src/version/v662/packets/add_behaviour_tree.rs new file mode 100644 index 00000000..e1c24ca2 --- /dev/null +++ b/crates/proto/src/version/v662/packets/add_behaviour_tree.rs @@ -0,0 +1,7 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 89)] +#[derive(ProtoCodec)] +pub struct AddBehaviourTreePacket { + pub json_behaviour_tree_structure: String, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/automation_client_connect.rs b/crates/proto/src/version/v662/packets/automation_client_connect.rs new file mode 100644 index 00000000..904a12de --- /dev/null +++ b/crates/proto/src/version/v662/packets/automation_client_connect.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::WebSocketPacketData; + +#[gamepacket(id = 95)] +#[derive(ProtoCodec)] +pub struct AutomationClientConnectPacket { + pub web_socket_data: WebSocketPacketData, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/available_commands.rs b/crates/proto/src/version/v662/packets/available_commands.rs new file mode 100644 index 00000000..4cd391a4 --- /dev/null +++ b/crates/proto/src/version/v662/packets/available_commands.rs @@ -0,0 +1,97 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::CommandPermissionLevel; + +#[derive(ProtoCodec)] +struct EnumDataEntry { + name: String, + values: Vec, // TODO: weird varint. Needs custom proto +} + +#[derive(ProtoCodec)] +struct SubCommandValues { + #[endianness(le)] + pub sub_command_first_value: u16, + #[endianness(le)] + pub sub_command_second_value: u16, +} + +#[derive(ProtoCodec)] +struct ParameterDataEntry { + pub name: String, + #[endianness(le)] + pub parse_symbol: u32, + pub is_optional: bool, + pub options: i8, +} + +#[derive(ProtoCodec)] +struct OverloadsEntry { + pub is_chaining: bool, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub parameter_data: Vec, +} + +#[derive(ProtoCodec)] +struct CommandsEntry { + pub name: String, + pub description: String, + #[endianness(le)] + pub flags: u16, + pub permission_level: CommandPermissionLevel, + #[endianness(le)] + pub alias_enum: i32, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub chained_sub_command_indices: Vec, // TODO: custom proto impl + #[vec_repr(u32)] + #[vec_endianness(var)] + pub overloads: Vec, +} + +#[derive(ProtoCodec)] +struct SoftEnumsEntry { + pub enum_name: String, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub enum_options: Vec, +} + +#[derive(ProtoCodec)] +struct ConstraintsEntry { + #[endianness(le)] + pub enum_value_symbol: u32, + #[endianness(le)] + pub enum_symbol: u32, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub constraint_indices: Vec +} + +#[gamepacket(id = 76)] +#[derive(ProtoCodec)] +pub struct AvailableCommandsPacket { + #[vec_repr(u32)] + #[vec_endianness(var)] + pub enum_values: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub post_fixes: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub enum_data: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub chained_sub_command_data: Vec>, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub commands: Vec>, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub soft_enums: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub constraints: Vec, +} + +// TODO: custom proto impl \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/block_actor_data.rs b/crates/proto/src/version/v662/packets/block_actor_data.rs new file mode 100644 index 00000000..408a76dd --- /dev/null +++ b/crates/proto/src/version/v662/packets/block_actor_data.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::{CompoundTag, NetworkBlockPosition}; + +#[gamepacket(id = 56)] +#[derive(ProtoCodec)] +pub struct BlockActorDataPacket { + pub block_position: NetworkBlockPosition, + pub actor_data_tags: CompoundTag, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/book_edit.rs b/crates/proto/src/version/v662/packets/book_edit.rs new file mode 100644 index 00000000..9f240d67 --- /dev/null +++ b/crates/proto/src/version/v662/packets/book_edit.rs @@ -0,0 +1,11 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::BookEditAction; + +#[gamepacket(id = 97)] +#[derive(ProtoCodec)] +pub struct BookEditPacket { + pub action: BookEditAction, + pub book_slot: i8, +} + +// TODO: custom proto impl, enum variants \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/boss_event.rs b/crates/proto/src/version/v662/packets/boss_event.rs new file mode 100644 index 00000000..60b492a3 --- /dev/null +++ b/crates/proto/src/version/v662/packets/boss_event.rs @@ -0,0 +1,10 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::BossEventUpdateType; +use crate::version::v662::types::ActorUniqueID; + +#[gamepacket(id = 74)] +#[derive(ProtoCodec)] +pub struct BossEventPacket { + pub target_actor_id: ActorUniqueID, + pub event_type: BossEventUpdateType +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/camera.rs b/crates/proto/src/version/v662/packets/camera.rs new file mode 100644 index 00000000..bdf129d0 --- /dev/null +++ b/crates/proto/src/version/v662/packets/camera.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::ActorUniqueID; + +#[gamepacket(id = 73)] +#[derive(ProtoCodec)] +pub struct CameraPacket { + pub camera_id: ActorUniqueID, + pub target_player_id: ActorUniqueID, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/change_dimension.rs b/crates/proto/src/version/v662/packets/change_dimension.rs new file mode 100644 index 00000000..8e6c334a --- /dev/null +++ b/crates/proto/src/version/v662/packets/change_dimension.rs @@ -0,0 +1,11 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::Vec3; + +#[gamepacket(id = 61)] +#[derive(ProtoCodec)] +pub struct ChangeDimensionPacket { + #[endianness(var)] + pub dimension_id: i32, + pub position: Vec3, + pub respawn: bool, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/chunk_radius_updated.rs b/crates/proto/src/version/v662/packets/chunk_radius_updated.rs new file mode 100644 index 00000000..8a4cfa07 --- /dev/null +++ b/crates/proto/src/version/v662/packets/chunk_radius_updated.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 70)] +#[derive(ProtoCodec)] +pub struct ChunkRadiusUpdatedPacket { + #[endianness(var)] + pub chunk_radius: i32, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/clientbound_map_item_data.rs b/crates/proto/src/version/v662/packets/clientbound_map_item_data.rs new file mode 100644 index 00000000..9646e770 --- /dev/null +++ b/crates/proto/src/version/v662/packets/clientbound_map_item_data.rs @@ -0,0 +1,54 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::{ActorUniqueID, BlockPos, MapDecoration, MapItemTrackedActor}; + +#[derive(ProtoCodec)] +struct PixelEntry { + #[endianness(var)] + pub pixel: u32, +} + +#[derive(ProtoCodec)] +#[enum_repr(u32)] +#[enum_endianness(var)] +#[repr(u32)] +enum Type { + Invalid = 0, + TextureUpdate { + #[endianness(var)] + texture_width: i32, + #[endianness(var)] + texture_height: i32, + #[endianness(var)] + x_tex_coordinate: i32, + #[endianness(var)] + y_tex_coordinate: i32, + #[vec_repr(u32)] + #[vec_endianness(var)] + pixels: Vec, + } = 1 << 1, + DecorationUpdate { + #[vec_repr(u32)] + #[vec_endianness(var)] + actor_ids: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + decoration_list: Vec + } = 1 << 2, + Creation { + #[vec_repr(u32)] + #[vec_endianness(var)] + map_id_list: Vec + } = 1 << 3, +} + +#[gamepacket(id = 67)] +#[derive(ProtoCodec)] +pub struct ClientboundMapItemDataPacket { + pub map_id: ActorUniqueID, + pub type_flags: Type, + pub dimension: i8, + pub is_locked: bool, + pub map_origin: BlockPos, +} + +// TODO: custom proto impl, enum variants \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/command_block_update.rs b/crates/proto/src/version/v662/packets/command_block_update.rs new file mode 100644 index 00000000..9db13b96 --- /dev/null +++ b/crates/proto/src/version/v662/packets/command_block_update.rs @@ -0,0 +1,23 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::{ActorRuntimeID, NetworkBlockPosition}; + +#[gamepacket(id = 78)] +#[derive(ProtoCodec)] +pub struct CommandBlockUpdatePacket { + pub is_block: bool, + pub target_runtime_id: Option, // Only if is_block is false + pub block_position: Option, // Only if is_block is true + #[endianness(var)] + pub command_block_mode: Option, // Only if is_block is true + pub redstone_mode: Option, // Only if is_block is true + pub is_conditional: Option, // Only if is_block is true + pub command: String, + pub last_output: String, + pub name: String, + pub track_output: bool, + #[endianness(le)] + pub tick_delay: u32, + pub should_execute_on_first_tick: bool, +} + +// TODO: custom proto impl diff --git a/crates/proto/src/version/v662/packets/command_output.rs b/crates/proto/src/version/v662/packets/command_output.rs new file mode 100644 index 00000000..dc479bb8 --- /dev/null +++ b/crates/proto/src/version/v662/packets/command_output.rs @@ -0,0 +1,24 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::CommandOutputType; +use crate::version::v662::types::CommandOriginData; + +#[derive(ProtoCodec)] +struct OutputMessagesEntry { + pub message_id: String, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub parameters: Vec, +} + +#[gamepacket(id = 79)] +#[derive(ProtoCodec)] +pub struct CommandOutputPacket { + pub origin_data: CommandOriginData, + pub output_type: CommandOutputType, + pub success_count: u32, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub output_messages: Vec, +} + +// TODO: custom proto impl, enum variant \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/command_request.rs b/crates/proto/src/version/v662/packets/command_request.rs new file mode 100644 index 00000000..5d6a5ebd --- /dev/null +++ b/crates/proto/src/version/v662/packets/command_request.rs @@ -0,0 +1,12 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::CommandOriginData; + +#[gamepacket(id = 77)] +#[derive(ProtoCodec)] +pub struct CommandRequestPacket { + pub command: String, + pub command_origin: CommandOriginData, + pub is_internal_source: bool, + #[endianness(var)] + pub version: i32, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/container_set_data.rs b/crates/proto/src/version/v662/packets/container_set_data.rs new file mode 100644 index 00000000..7654d115 --- /dev/null +++ b/crates/proto/src/version/v662/packets/container_set_data.rs @@ -0,0 +1,12 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::ContainerID; + +#[gamepacket(id = 51)] +#[derive(ProtoCodec)] +pub struct ContainerSetDataPacket { + pub container_id: ContainerID, + #[endianness(var)] + pub id: i32, + #[endianness(var)] + pub value: i32, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/crafting_data.rs b/crates/proto/src/version/v662/packets/crafting_data.rs new file mode 100644 index 00000000..0b49e412 --- /dev/null +++ b/crates/proto/src/version/v662/packets/crafting_data.rs @@ -0,0 +1,20 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::{ContainerMixDataEntry, CraftingDataEntry, MaterialReducerDataEntry, PotionMixDataEntry}; + +#[gamepacket(id = 52)] +#[derive(ProtoCodec)] +pub struct CraftingDataPacket { + #[vec_repr(u32)] + #[vec_endianness(var)] + pub crafting_entries: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub potion_mixes: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub container_mixes: Vec, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub material_reducers: Vec, + pub clear_recipes: bool, +} diff --git a/crates/proto/src/version/v662/packets/game_rules_changed.rs b/crates/proto/src/version/v662/packets/game_rules_changed.rs new file mode 100644 index 00000000..06564290 --- /dev/null +++ b/crates/proto/src/version/v662/packets/game_rules_changed.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::GameRulesChangedPacketData; + +#[gamepacket(id = 72)] +#[derive(ProtoCodec)] +pub struct GameRulesChangedPacket { + pub rules_data: GameRulesChangedPacketData, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/gui_data_pick_item.rs b/crates/proto/src/version/v662/packets/gui_data_pick_item.rs new file mode 100644 index 00000000..a1b96e06 --- /dev/null +++ b/crates/proto/src/version/v662/packets/gui_data_pick_item.rs @@ -0,0 +1,10 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 54)] +#[derive(ProtoCodec)] +pub struct GuiDataPickItemPacket { + pub item_name: String, + pub item_effect_name: String, + #[endianness(le)] + pub slot: i32, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/legacy_telemetry_event.rs b/crates/proto/src/version/v662/packets/legacy_telemetry_event.rs new file mode 100644 index 00000000..c6972850 --- /dev/null +++ b/crates/proto/src/version/v662/packets/legacy_telemetry_event.rs @@ -0,0 +1,164 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::ActorUniqueID; +use crate::version::v662::enums::{ActorDamageCause, ActorType, MinecraftEventing}; + +#[derive(ProtoCodec)] +#[enum_repr(i32)] +#[enum_endianness(var)] +#[repr(i32)] +enum AgentResult { + ActionFail = 0, + ActionSuccess = 1, + QueryResultFalse = 2, + QueryResultTrue = 3, +} + +#[derive(ProtoCodec)] +#[enum_repr(i32)] +#[enum_endianness(var)] +#[repr(i32)] +enum Type { + Achievement { + #[endianness(var)] + achievement_id: i32, + } = 0, + Interaction { + interaction_type: MinecraftEventing::InteractionType, + interaction_actor_type: ActorType, + #[endianness(var)] + interaction_actor_variant: i32, + interaction_actor_color: i8, + } = 1, + PortalCreated { + #[endianness(var)] + dimension_id: i32, + } = 2, + PortalUsed { + #[endianness(var)] + source_dimension_id: i32, + #[endianness(var)] + target_dimension_id: i32, + } = 3, + MobKilled { + #[endianness(var)] + instigator_actor_id: i64, + #[endianness(var)] + target_actor_id: i64, + instigator_child_actor_type: ActorType, + damage_source: ActorDamageCause, + #[endianness(var)] + trade_tier: i32, + trader_name: String, + } = 4, + CauldronUsed { + #[endianness(var)] + contents_color: u32, + #[endianness(var)] + contents_type: i32, + #[endianness(var)] + fill_level: i32, + } = 5, + PlayerDied { + #[endianness(var)] + instigator_actor_id: i32, + #[endianness(var)] + instigator_mob_variant: i32, + damage_source: ActorDamageCause, + died_in_raid: bool, + } = 6, + BossKilled { + #[endianness(var)] + boss_actor_id: i64, + #[endianness(var)] + party_size: i32, + boss_type: ActorType, + } = 7, + AgentCommandObsolete { + result: AgentResult, + #[endianness(var)] + result_number: i32, + command_name: String, + result_key: String, + result_string: String, + } = 8, + AgentCreated = 9, + PatternRemovedObsolete = 10, + SlashCommand { + #[endianness(var)] + success_count: i32, + #[endianness(var)] + error_count: i32, + command_name: String, + error_list: String, + } = 11, + #[deprecated] FishBucketed = 12, + MobBorn { + #[endianness(var)] + baby_entity_type: i32, + #[endianness(var)] + baby_entity_variant: i32, + baby_color: i8, + } = 13, + PetDiedObsolete = 14, + POICauldronUsed { + block_interaction_type: MinecraftEventing::POIBlockInteractionType, + #[endianness(var)] + item_id: i32, + } = 15, + ComposterUsed { + block_interaction_type: MinecraftEventing::POIBlockInteractionType, + #[endianness(var)] + item_id: i32, + } = 16, + BellUsed { + #[endianness(var)] + item_id: i32, + } = 17, + ActorDefinition { + event_name: String, + } = 18, + RaidUpdate { + #[endianness(var)] + current_raid_wave: i32, + #[endianness(var)] + total_raid_waves: i32, + raid_won: bool, + } = 19, + PlayerMovementAnomalyObsolete = 20, + PlayerMovementCorrectedObsolete = 21, + HoneyHarvested = 22, + TargetBlockHit { + #[endianness(var)] + redstone_level: i32, + } = 23, + PiglinBarter { + #[endianness(var)] + item_id: i32, + bartering_with_player: bool, + } = 24, + PlayerWaxedOrUnwaxedCopper { + #[endianness(var)] + block_id: i32, + } = 25, + CodeBuilderRuntimeAction { + runtime_action: String, + } = 26, + CodeBuilderScoreboard { + objective_name: String, + #[endianness(var)] + score: i32, + } = 27, + StriderRiddenInLavaInOverworld = 28, + SneakCloseToSculkSensor = 29, + CarefulRestoration = 30, +} + +#[gamepacket(id = 65)] +#[derive(ProtoCodec)] +pub struct LegacyTelemetryEventPacket { + pub target_actor_id: ActorUniqueID, + pub event_type: Type, + pub use_player_id: i8, +} + +// TODO: custom proto impl, enum variant serialization \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/level_chunk.rs b/crates/proto/src/version/v662/packets/level_chunk.rs new file mode 100644 index 00000000..c93a72d1 --- /dev/null +++ b/crates/proto/src/version/v662/packets/level_chunk.rs @@ -0,0 +1,18 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::ChunkPos; + +#[gamepacket(id = 58)] +#[derive(ProtoCodec)] +pub struct LevelChunkPacket { + pub chunk_position: ChunkPos, + #[endianness(var)] + pub dimension_id: i32, + // TODO: sub-chunk count stuff + pub cache_enabled: bool, + #[vec_repr(u32)] + #[vec_endianness(var)] + pub cache_blobs: Vec, + pub serialized_chunk_data: String, +} + +// TODO: this whole thing is terrible \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/map_info_request.rs b/crates/proto/src/version/v662/packets/map_info_request.rs new file mode 100644 index 00000000..d472cfb7 --- /dev/null +++ b/crates/proto/src/version/v662/packets/map_info_request.rs @@ -0,0 +1,19 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::ActorUniqueID; + +#[derive(ProtoCodec)] +struct ClientPixelsListEntry { + #[endianness(le)] + pub pixel: u32, + #[endianness(le)] + pub index: u16, +} + +#[gamepacket(id = 68)] +#[derive(ProtoCodec)] +pub struct MapInfoRequestPacket { + pub map_unique_id: ActorUniqueID, + #[vec_repr(u32)] + #[vec_endianness(le)] + pub client_pixels_list: Vec +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/mod.rs b/crates/proto/src/version/v662/packets/mod.rs index 9e8a4edb..1d9585f6 100644 --- a/crates/proto/src/version/v662/packets/mod.rs +++ b/crates/proto/src/version/v662/packets/mod.rs @@ -53,4 +53,51 @@ export!(container_open); export!(container_close); export!(player_hotbar); export!(inventory_content); -export!(inventory_slot); \ No newline at end of file +export!(inventory_slot); +export!(container_set_data); +export!(crafting_data); +export!(gui_data_pick_item); +export!(block_actor_data); +export!(player_input); +export!(level_chunk); +export!(set_commands_enabled); +export!(set_difficulty); +export!(change_dimension); +export!(set_player_game_type); +export!(player_list); +export!(simple_event); +export!(legacy_telemetry_event); +export!(spawn_experience_orb); +export!(clientbound_map_item_data); +export!(map_info_request); +export!(request_chunk_radius); +export!(chunk_radius_updated); +export!(game_rules_changed); +export!(camera); +export!(boss_event); +export!(show_credits); +export!(available_commands); +export!(command_request); +export!(command_block_update); +export!(command_output); +export!(update_trade); +export!(update_equip); +export!(resource_pack_data_info); +export!(resource_pack_chunk_data); +export!(resource_pack_chunk_request); +export!(transfer_player); +export!(play_sound); +export!(stop_sound); +export!(set_title); +export!(add_behaviour_tree); +export!(structure_block_update); +export!(show_store_offer); +export!(purchase_receipt); +export!(player_skin); +export!(sub_client_login); +export!(automation_client_connect); +export!(set_last_hurt_by); +export!(book_edit); +export!(npc_request); +export!(photo_transfer); +export!(modal_form_request); \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/modal_form_request.rs b/crates/proto/src/version/v662/packets/modal_form_request.rs new file mode 100644 index 00000000..4af32dd3 --- /dev/null +++ b/crates/proto/src/version/v662/packets/modal_form_request.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 100)] +#[derive(ProtoCodec)] +pub struct ModalFormRequestPacket { + #[endianness(var)] + pub form_id: u32, + pub form_ui_json: String, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/npc_request.rs b/crates/proto/src/version/v662/packets/npc_request.rs new file mode 100644 index 00000000..eecb3119 --- /dev/null +++ b/crates/proto/src/version/v662/packets/npc_request.rs @@ -0,0 +1,25 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::ActorRuntimeID; + +#[derive(ProtoCodec)] +#[enum_repr(i8)] +#[repr(i8)] +enum RequestType { + SetActions = 0, + ExecuteAction = 1, + ExecuteClosingCommands = 2, + SetName = 3, + SetSkin = 4, + SetInteractText = 5, + ExecuteOpeningCommands = 6, +} + +#[gamepacket(id = 98)] +#[derive(ProtoCodec)] +pub struct NpcRequestPacket { + pub npc_runtime_id: ActorRuntimeID, + pub request_type: RequestType, + pub actions: String, + pub action_index: i8, + pub scene_name: String, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/photo_transfer.rs b/crates/proto/src/version/v662/packets/photo_transfer.rs new file mode 100644 index 00000000..7ba21dde --- /dev/null +++ b/crates/proto/src/version/v662/packets/photo_transfer.rs @@ -0,0 +1,15 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::PhotoType; + +#[gamepacket(id = 99)] +#[derive(ProtoCodec)] +pub struct PhotoTransferPacket { + pub photo_name: String, + pub photo_data: String, + pub book_id: String, + pub photo_type: PhotoType, + pub source_type: PhotoType, + #[endianness(le)] + pub owner_id: i64, + pub new_photo_name: String, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/play_sound.rs b/crates/proto/src/version/v662/packets/play_sound.rs new file mode 100644 index 00000000..2e8f4989 --- /dev/null +++ b/crates/proto/src/version/v662/packets/play_sound.rs @@ -0,0 +1,13 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::NetworkBlockPosition; + +#[gamepacket(id = 86)] +#[derive(ProtoCodec)] +pub struct PlaySoundPacket { + pub name: String, + pub position: NetworkBlockPosition, + #[endianness(le)] + pub volume: f32, + #[endianness(le)] + pub pitch: f32, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/player_input.rs b/crates/proto/src/version/v662/packets/player_input.rs new file mode 100644 index 00000000..6a685637 --- /dev/null +++ b/crates/proto/src/version/v662/packets/player_input.rs @@ -0,0 +1,10 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::Vec2; + +#[gamepacket(id = 57)] +#[derive(ProtoCodec)] +pub struct PlayerInputPacket { + pub move_vector: Vec2, + pub jumping: bool, + pub sneaking: bool, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/player_list.rs b/crates/proto/src/version/v662/packets/player_list.rs new file mode 100644 index 00000000..965aad2b --- /dev/null +++ b/crates/proto/src/version/v662/packets/player_list.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::PlayerListPacketType; + +#[gamepacket(id = 63)] +#[derive(ProtoCodec)] +pub struct PlayerListPacket { + pub action: PlayerListPacketType, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/player_skin.rs b/crates/proto/src/version/v662/packets/player_skin.rs new file mode 100644 index 00000000..1913a179 --- /dev/null +++ b/crates/proto/src/version/v662/packets/player_skin.rs @@ -0,0 +1,13 @@ +use uuid::Uuid; +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::SerializedSkin; + +#[gamepacket(id = 93)] +#[derive(ProtoCodec)] +pub struct PlayerSkinPacket { + pub uuid: Uuid, + pub serialized_skin: SerializedSkin, + pub new_skin_name: String, + pub old_skin_name: String, + pub trusted_marketplace_skin: bool, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/purchase_receipt.rs b/crates/proto/src/version/v662/packets/purchase_receipt.rs new file mode 100644 index 00000000..87851d48 --- /dev/null +++ b/crates/proto/src/version/v662/packets/purchase_receipt.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 92)] +#[derive(ProtoCodec)] +pub struct PurchaseReceiptPacket { + #[vec_repr(u32)] + #[vec_endianness(var)] + pub purchase_receipts: Vec, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/request_chunk_radius.rs b/crates/proto/src/version/v662/packets/request_chunk_radius.rs new file mode 100644 index 00000000..cf275607 --- /dev/null +++ b/crates/proto/src/version/v662/packets/request_chunk_radius.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 69)] +#[derive(ProtoCodec)] +pub struct RequestChunkRadiusPacket { + #[endianness(var)] + pub chunk_radius: i32, + pub max_chunk_radius: i8, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/resource_pack_chunk_data.rs b/crates/proto/src/version/v662/packets/resource_pack_chunk_data.rs new file mode 100644 index 00000000..b4ef87e9 --- /dev/null +++ b/crates/proto/src/version/v662/packets/resource_pack_chunk_data.rs @@ -0,0 +1,12 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 83)] +#[derive(ProtoCodec)] +pub struct ResourcePackChunkDataPacket { + pub resource_name: String, + #[endianness(le)] + pub chunk_id: u32, + #[endianness(le)] + pub byte_offset: u64, + pub chunk_data: String, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/resource_pack_chunk_request.rs b/crates/proto/src/version/v662/packets/resource_pack_chunk_request.rs new file mode 100644 index 00000000..998d0344 --- /dev/null +++ b/crates/proto/src/version/v662/packets/resource_pack_chunk_request.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 84)] +#[derive(ProtoCodec)] +pub struct ResourcePackChunkRequestPacket { + pub resource_name: String, + #[endianness(le)] + pub chunk: u32, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/resource_pack_data_info.rs b/crates/proto/src/version/v662/packets/resource_pack_data_info.rs new file mode 100644 index 00000000..cf632a14 --- /dev/null +++ b/crates/proto/src/version/v662/packets/resource_pack_data_info.rs @@ -0,0 +1,17 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::PackType; + +#[gamepacket(id = 82)] +#[derive(ProtoCodec)] +pub struct ResourcePackDataInfoPacket { + pub resource_name: String, + #[endianness(le)] + pub chunk_size: u32, + #[endianness(le)] + pub chunk_amount: u32, + #[endianness(le)] + pub file_size: u64, + pub file_hash: String, + pub is_premium: bool, + pub pack_type: PackType, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/set_commands_enabled.rs b/crates/proto/src/version/v662/packets/set_commands_enabled.rs new file mode 100644 index 00000000..9ce27b5e --- /dev/null +++ b/crates/proto/src/version/v662/packets/set_commands_enabled.rs @@ -0,0 +1,7 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 59)] +#[derive(ProtoCodec)] +pub struct SetCommandsEnabledPacket { + pub commands_enabled: bool, +} diff --git a/crates/proto/src/version/v662/packets/set_difficulty.rs b/crates/proto/src/version/v662/packets/set_difficulty.rs new file mode 100644 index 00000000..eb3c46ab --- /dev/null +++ b/crates/proto/src/version/v662/packets/set_difficulty.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::Difficulty; + +#[gamepacket(id = 60)] +#[derive(ProtoCodec)] +pub struct SetDifficultyPacket { + pub difficulty: Difficulty, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/set_last_hurt_by.rs b/crates/proto/src/version/v662/packets/set_last_hurt_by.rs new file mode 100644 index 00000000..3fe847da --- /dev/null +++ b/crates/proto/src/version/v662/packets/set_last_hurt_by.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::ActorType; + +#[gamepacket(id = 96)] +#[derive(ProtoCodec)] +pub struct SetLastHurtByPacket { + pub last_hurt_by: ActorType, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/set_player_game_type.rs b/crates/proto/src/version/v662/packets/set_player_game_type.rs new file mode 100644 index 00000000..76a70e79 --- /dev/null +++ b/crates/proto/src/version/v662/packets/set_player_game_type.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::GameType; + +#[gamepacket(id = 62)] +#[derive(ProtoCodec)] +pub struct SetPlayerGameTypePacket { + pub player_game_type: GameType, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/set_title.rs b/crates/proto/src/version/v662/packets/set_title.rs new file mode 100644 index 00000000..fd35c4bf --- /dev/null +++ b/crates/proto/src/version/v662/packets/set_title.rs @@ -0,0 +1,32 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[derive(ProtoCodec)] +#[enum_repr(i32)] +#[enum_endianness(var)] +#[repr(i32)] +enum TitleType { + Clear = 0, + Reset = 1, + Title = 2, + Subtitle = 3, + Actionbar = 4, + Times = 5, + TitleTextObject = 6, + SubtitleTextObject = 7, + ActionbarTextObject = 8, +} + +#[gamepacket(id = 88)] +#[derive(ProtoCodec)] +pub struct SetTitlePacket { + pub title_type: TitleType, + pub title_text: String, + #[endianness(var)] + pub fade_in_time: i32, + #[endianness(var)] + pub stay_time: i32, + #[endianness(var)] + pub fade_out_time: i32, + pub xuid: String, + pub platform_online_id: String, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/show_credits.rs b/crates/proto/src/version/v662/packets/show_credits.rs new file mode 100644 index 00000000..dd5f9cc2 --- /dev/null +++ b/crates/proto/src/version/v662/packets/show_credits.rs @@ -0,0 +1,18 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::ActorRuntimeID; + +#[derive(ProtoCodec)] +#[enum_repr(i32)] +#[enum_endianness(var)] +#[repr(i32)] +enum CreditsState { + Start = 0, + Finished = 1, +} + +#[gamepacket(id = 75)] +#[derive(ProtoCodec)] +pub struct ShowCreditsPacket { + pub player_runtime_id: ActorRuntimeID, + pub credits_state: CreditsState +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/show_store_offer.rs b/crates/proto/src/version/v662/packets/show_store_offer.rs new file mode 100644 index 00000000..a39562d1 --- /dev/null +++ b/crates/proto/src/version/v662/packets/show_store_offer.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::ShowStoreOfferRedirectType; + +#[gamepacket(id = 91)] +#[derive(ProtoCodec)] +pub struct ShowStoreOfferPacket { + pub product_id: String, + pub redirect_type: ShowStoreOfferRedirectType, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/simple_event.rs b/crates/proto/src/version/v662/packets/simple_event.rs new file mode 100644 index 00000000..ba86ccb6 --- /dev/null +++ b/crates/proto/src/version/v662/packets/simple_event.rs @@ -0,0 +1,18 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[derive(ProtoCodec)] +#[enum_repr(u16)] +#[enum_endianness(le)] +#[repr(u16)] +enum Subtype { + UninitializedSubtype = 0, + EnableCommands = 1, + DisableCommands = 2, + UnlockWorldTemplateSettings = 3, +} + +#[gamepacket(id = 64)] +#[derive(ProtoCodec)] +pub struct SimpleEventPacket { + pub simple_event_type: Subtype, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/spawn_experience_orb.rs b/crates/proto/src/version/v662/packets/spawn_experience_orb.rs new file mode 100644 index 00000000..f36b47e5 --- /dev/null +++ b/crates/proto/src/version/v662/packets/spawn_experience_orb.rs @@ -0,0 +1,10 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::Vec3; + +#[gamepacket(id = 66)] +#[derive(ProtoCodec)] +pub struct SpawnExperienceOrbPacket { + pub position: Vec3, + #[endianness(var)] + pub xp_value: i32, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/stop_sound.rs b/crates/proto/src/version/v662/packets/stop_sound.rs new file mode 100644 index 00000000..6fd0bfbb --- /dev/null +++ b/crates/proto/src/version/v662/packets/stop_sound.rs @@ -0,0 +1,8 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 87)] +#[derive(ProtoCodec)] +pub struct StopSoundPacket { + pub sound_name: String, + pub stop_all_sounds: bool, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/structure_block_update.rs b/crates/proto/src/version/v662/packets/structure_block_update.rs new file mode 100644 index 00000000..1b2519f8 --- /dev/null +++ b/crates/proto/src/version/v662/packets/structure_block_update.rs @@ -0,0 +1,11 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::types::{NetworkBlockPosition, StructureEditorData}; + +#[gamepacket(id = 90)] +#[derive(ProtoCodec)] +pub struct StructureBlockUpdatePacket { + pub block_position: NetworkBlockPosition, + pub structure_data: StructureEditorData, + pub trigger: bool, + pub is_waterlogged: bool, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/sub_client_login.rs b/crates/proto/src/version/v662/packets/sub_client_login.rs new file mode 100644 index 00000000..f34bd46a --- /dev/null +++ b/crates/proto/src/version/v662/packets/sub_client_login.rs @@ -0,0 +1,7 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 94)] +#[derive(ProtoCodec)] +pub struct SubClientLoginPacket { + pub connection_request: String, // TODO: SubClientConnectionRequest diagram, not sure. +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/transfer_player.rs b/crates/proto/src/version/v662/packets/transfer_player.rs new file mode 100644 index 00000000..0cf18132 --- /dev/null +++ b/crates/proto/src/version/v662/packets/transfer_player.rs @@ -0,0 +1,9 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; + +#[gamepacket(id = 85)] +#[derive(ProtoCodec)] +pub struct TransferPlayerPacket { + pub server_address: String, + #[endianness(le)] + pub server_port: u16, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/update_equip.rs b/crates/proto/src/version/v662/packets/update_equip.rs new file mode 100644 index 00000000..fc88b87d --- /dev/null +++ b/crates/proto/src/version/v662/packets/update_equip.rs @@ -0,0 +1,14 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::{ContainerID, ContainerType}; +use crate::version::v662::types::{ActorUniqueID, CompoundTag}; + +#[gamepacket(id = 81)] +#[derive(ProtoCodec)] +pub struct UpdateEquipPacket { + pub container_id: ContainerID, + pub container_type: ContainerType, + #[endianness(var)] + pub size: i32, + pub target_actor_id: ActorUniqueID, + pub data_tags: CompoundTag, +} \ No newline at end of file diff --git a/crates/proto/src/version/v662/packets/update_trade.rs b/crates/proto/src/version/v662/packets/update_trade.rs new file mode 100644 index 00000000..e53599fa --- /dev/null +++ b/crates/proto/src/version/v662/packets/update_trade.rs @@ -0,0 +1,20 @@ +use bedrockrs_macros::{gamepacket, ProtoCodec}; +use crate::version::v662::enums::{ContainerID, ContainerType}; +use crate::version::v662::types::{ActorUniqueID, CompoundTag}; + +#[gamepacket(id = 80)] +#[derive(ProtoCodec)] +pub struct UpdateTradePacket { + pub container_id: ContainerID, + pub container_type: ContainerType, + #[endianness(var)] + pub size: i32, + #[endianness(var)] + pub trade_tier: i32, + pub target_actor_id: ActorUniqueID, + pub last_trading_player_id: ActorUniqueID, + pub display_name: String, + pub use_new_trade_ui: bool, + pub using_economy_trade: bool, + pub data_tags: CompoundTag, +} \ No newline at end of file