Skip to content

Commit

Permalink
Merge pull request #75 from OmniacDev/proto_rework
Browse files Browse the repository at this point in the history
impl packets 51-100 for v662
  • Loading branch information
theaddonn authored Dec 3, 2024
2 parents a06bfd2 + a0e7498 commit 6c4dd58
Show file tree
Hide file tree
Showing 59 changed files with 1,035 additions and 20 deletions.
3 changes: 3 additions & 0 deletions crates/proto/src/version/v662/enums/actor_damage_cause.rs
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
2 changes: 1 addition & 1 deletion crates/proto/src/version/v662/enums/actor_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand Down
29 changes: 24 additions & 5 deletions crates/proto/src/version/v662/enums/book_edit_action.rs
Original file line number Diff line number Diff line change
@@ -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,
}
49 changes: 41 additions & 8 deletions crates/proto/src/version/v662/enums/boss_event_update_type.rs
Original file line number Diff line number Diff line change
@@ -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,
}
4 changes: 3 additions & 1 deletion crates/proto/src/version/v662/enums/command_output_type.rs
Original file line number Diff line number Diff line change
@@ -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,
}
6 changes: 6 additions & 0 deletions crates/proto/src/version/v662/enums/minecraft_eventing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -22,6 +25,9 @@ pub mod MinecraftEventing {
}

#[derive(ProtoCodec)]
#[enum_repr(i32)]
#[enum_endianness(var)]
#[repr(i32)]
pub enum POIBlockInteractionType {
None = 0,
Extend = 1,
Expand Down
2 changes: 2 additions & 0 deletions crates/proto/src/version/v662/enums/pack_type.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use bedrockrs_macros::ProtoCodec;

#[derive(ProtoCodec)]
#[enum_repr(i8)]
#[repr(i8)]
pub enum PackType {
Invalid = 0,
Addon = 1,
Expand Down
2 changes: 2 additions & 0 deletions crates/proto/src/version/v662/enums/photo_type.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use bedrockrs_macros::ProtoCodec;

#[derive(ProtoCodec)]
#[enum_repr(i8)]
#[repr(i8)]
pub enum PhotoType {
Portfolio = 0,
PhotoItem = 1,
Expand Down
33 changes: 31 additions & 2 deletions crates/proto/src/version/v662/enums/player_list_packet_type.rs
Original file line number Diff line number Diff line change
@@ -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<AddPlayerListEntry>,
is_trusted_skin: bool,
} = 0,
Remove {
#[vec_repr(u32)]
#[vec_endianness(var)]
remove_player_list: Vec<Uuid>
} = 1,
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use bedrockrs_macros::ProtoCodec;

#[derive(ProtoCodec)]
#[enum_repr(i8)]
#[repr(i8)]
pub enum ShowStoreOfferRedirectType {
MarketplaceOffer = 0,
DressingRoomOffer = 1,
Expand Down
7 changes: 7 additions & 0 deletions crates/proto/src/version/v662/packets/add_behaviour_tree.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
use bedrockrs_macros::{gamepacket, ProtoCodec};

#[gamepacket(id = 89)]
#[derive(ProtoCodec)]
pub struct AddBehaviourTreePacket {
pub json_behaviour_tree_structure: String,
}
Original file line number Diff line number Diff line change
@@ -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,
}
97 changes: 97 additions & 0 deletions crates/proto/src/version/v662/packets/available_commands.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
use bedrockrs_macros::{gamepacket, ProtoCodec};
use crate::version::v662::enums::CommandPermissionLevel;

#[derive(ProtoCodec)]
struct EnumDataEntry {
name: String,
values: Vec<u32>, // 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<ParameterDataEntry>,
}

#[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<u16>, // TODO: custom proto impl
#[vec_repr(u32)]
#[vec_endianness(var)]
pub overloads: Vec<OverloadsEntry>,
}

#[derive(ProtoCodec)]
struct SoftEnumsEntry {
pub enum_name: String,
#[vec_repr(u32)]
#[vec_endianness(var)]
pub enum_options: Vec<String>,
}

#[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<i8>
}

#[gamepacket(id = 76)]
#[derive(ProtoCodec)]
pub struct AvailableCommandsPacket {
#[vec_repr(u32)]
#[vec_endianness(var)]
pub enum_values: Vec<String>,
#[vec_repr(u32)]
#[vec_endianness(var)]
pub post_fixes: Vec<String>,
#[vec_repr(u32)]
#[vec_endianness(var)]
pub enum_data: Vec<EnumDataEntry>,
#[vec_repr(u32)]
#[vec_endianness(var)]
pub chained_sub_command_data: Vec<Vec<SubCommandValues>>,
#[vec_repr(u32)]
#[vec_endianness(var)]
pub commands: Vec<Vec<SubCommandValues>>,
#[vec_repr(u32)]
#[vec_endianness(var)]
pub soft_enums: Vec<SoftEnumsEntry>,
#[vec_repr(u32)]
#[vec_endianness(var)]
pub constraints: Vec<ConstraintsEntry>,
}

// TODO: custom proto impl
9 changes: 9 additions & 0 deletions crates/proto/src/version/v662/packets/block_actor_data.rs
Original file line number Diff line number Diff line change
@@ -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,
}
11 changes: 11 additions & 0 deletions crates/proto/src/version/v662/packets/book_edit.rs
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions crates/proto/src/version/v662/packets/boss_event.rs
Original file line number Diff line number Diff line change
@@ -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
}
9 changes: 9 additions & 0 deletions crates/proto/src/version/v662/packets/camera.rs
Original file line number Diff line number Diff line change
@@ -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,
}
Loading

0 comments on commit 6c4dd58

Please sign in to comment.