From 233d7ebce4ea901c117b103326945c17b8acc95c Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 24 Oct 2022 15:40:55 +0000 Subject: [PATCH] start updating to 22w42a --- README.md | 2 +- azalea-block/src/blocks.rs | 604 +----------------- .../game/clientbound_delete_chat_packet.rs | 37 +- .../game/clientbound_disguised_chat_packet.rs | 11 + .../game/clientbound_explode_packet.rs | 119 +--- .../game/clientbound_player_chat_packet.rs | 167 +---- .../clientbound_player_info_remove_packet.rs | 7 + .../clientbound_player_info_update_packet.rs | 5 + .../game/clientbound_server_data_packet.rs | 1 - ...entbound_update_enabled_features_packet.rs | 7 + azalea-protocol/src/packets/game/mod.rs | 190 +++--- .../game/serverbound_chat_ack_packet.rs | 4 +- .../game/serverbound_chat_command_packet.rs | 19 +- .../packets/game/serverbound_chat_packet.rs | 11 +- .../packets/login/serverbound_hello_packet.rs | 35 +- azalea-protocol/src/packets/mod.rs | 2 +- codegen/lib/code/utils.py | 10 +- 17 files changed, 222 insertions(+), 1009 deletions(-) create mode 100644 azalea-protocol/src/packets/game/clientbound_disguised_chat_packet.rs create mode 100644 azalea-protocol/src/packets/game/clientbound_player_info_remove_packet.rs create mode 100644 azalea-protocol/src/packets/game/clientbound_player_info_update_packet.rs create mode 100644 azalea-protocol/src/packets/game/clientbound_update_enabled_features_packet.rs diff --git a/README.md b/README.md index 0bd5b96a..18fae0be 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools.

-*Currently supported Minecraft version: `1.19.2`.* +*Currently supported Minecraft version: `22w42a`.* ## ⚠️ Azalea is still very unfinished, though some crates are in a somewhat useable state diff --git a/azalea-block/src/blocks.rs b/azalea-block/src/blocks.rs index 10779937..846550b9 100644 --- a/azalea-block/src/blocks.rs +++ b/azalea-block/src/blocks.rs @@ -352,115 +352,7 @@ make_block_states! { _7, }, "lit" => bool, - "rotation" => OakSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => SpruceSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => BirchSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => AcaciaSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => JungleSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => DarkOakSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => MangroveSignRotation { + "rotation" => _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15 { _0, _1, _2, @@ -656,114 +548,6 @@ make_block_states! { _6, _7, }, - "rotation" => SkeletonSkullRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => WitherSkeletonSkullRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => ZombieHeadRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => PlayerHeadRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => CreeperHeadRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => DragonHeadRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, "power" => LightWeightedPressurePlatePower { _0, _1, @@ -854,294 +638,6 @@ make_block_states! { Bottom, Double, }, - "rotation" => WhiteBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => OrangeBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => MagentaBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => LightBlueBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => YellowBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => LimeBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => PinkBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => GrayBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => LightGrayBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => CyanBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => PurpleBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => BlueBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => BrownBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => GreenBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => RedBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => BlackBannerRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, "age" => ChorusFlowerAge { _0, _1, @@ -1302,42 +798,6 @@ make_block_states! { _24, _25, }, - "rotation" => CrimsonSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => WarpedSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, "mode" => Mode { Save, Load, @@ -2010,31 +1470,31 @@ make_block_states! { lit: false, }, oak_sign => BlockBehavior::default(), { - rotation: OakSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, spruce_sign => BlockBehavior::default(), { - rotation: SpruceSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, birch_sign => BlockBehavior::default(), { - rotation: BirchSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, acacia_sign => BlockBehavior::default(), { - rotation: AcaciaSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, jungle_sign => BlockBehavior::default(), { - rotation: JungleSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, dark_oak_sign => BlockBehavior::default(), { - rotation: DarkOakSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, mangrove_sign => BlockBehavior::default(), { - rotation: MangroveSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, oak_door => BlockBehavior::default(), { @@ -2550,37 +2010,37 @@ make_block_states! { powered: false, }, skeleton_skull => BlockBehavior::default(), { - rotation: SkeletonSkullRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, skeleton_wall_skull => BlockBehavior::default(), { facing: FacingCardinal::North, }, wither_skeleton_skull => BlockBehavior::default(), { - rotation: WitherSkeletonSkullRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, wither_skeleton_wall_skull => BlockBehavior::default(), { facing: FacingCardinal::North, }, zombie_head => BlockBehavior::default(), { - rotation: ZombieHeadRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, zombie_wall_head => BlockBehavior::default(), { facing: FacingCardinal::North, }, player_head => BlockBehavior::default(), { - rotation: PlayerHeadRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, player_wall_head => BlockBehavior::default(), { facing: FacingCardinal::North, }, creeper_head => BlockBehavior::default(), { - rotation: CreeperHeadRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, creeper_wall_head => BlockBehavior::default(), { facing: FacingCardinal::North, }, dragon_head => BlockBehavior::default(), { - rotation: DragonHeadRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, dragon_wall_head => BlockBehavior::default(), { facing: FacingCardinal::North, @@ -2874,52 +2334,52 @@ make_block_states! { half: Half::Lower, }, white_banner => BlockBehavior::default(), { - rotation: WhiteBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, orange_banner => BlockBehavior::default(), { - rotation: OrangeBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, magenta_banner => BlockBehavior::default(), { - rotation: MagentaBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, light_blue_banner => BlockBehavior::default(), { - rotation: LightBlueBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, yellow_banner => BlockBehavior::default(), { - rotation: YellowBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, lime_banner => BlockBehavior::default(), { - rotation: LimeBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, pink_banner => BlockBehavior::default(), { - rotation: PinkBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, gray_banner => BlockBehavior::default(), { - rotation: GrayBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, light_gray_banner => BlockBehavior::default(), { - rotation: LightGrayBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, cyan_banner => BlockBehavior::default(), { - rotation: CyanBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, purple_banner => BlockBehavior::default(), { - rotation: PurpleBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, blue_banner => BlockBehavior::default(), { - rotation: BlueBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, brown_banner => BlockBehavior::default(), { - rotation: BrownBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, green_banner => BlockBehavior::default(), { - rotation: GreenBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, red_banner => BlockBehavior::default(), { - rotation: RedBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, black_banner => BlockBehavior::default(), { - rotation: BlackBannerRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, }, white_wall_banner => BlockBehavior::default(), { facing: FacingCardinal::North, @@ -3945,11 +3405,11 @@ make_block_states! { powered: false, }, crimson_sign => BlockBehavior::default(), { - rotation: CrimsonSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, warped_sign => BlockBehavior::default(), { - rotation: WarpedSignRotation::_0, + rotation: _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15::_0, waterlogged: false, }, crimson_wall_sign => BlockBehavior::default(), { diff --git a/azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs b/azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs index 6f1a3665..26f43f49 100644 --- a/azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs @@ -1,8 +1,41 @@ -use azalea_buf::McBuf; +use azalea_buf::{McBuf, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable}; use azalea_crypto::MessageSignature; use azalea_protocol_macros::ClientboundGamePacket; +use std::io::{Cursor, Write}; #[derive(Clone, Debug, McBuf, ClientboundGamePacket)] pub struct ClientboundDeleteChatPacket { - pub message_signature: MessageSignature, + pub signature_or_id: SignatureOrId, +} + +/// Messages can be deleted by either their signature or message id. +pub enum SignatureOrId { + Signature(MessageSignature), + Id(u32), +} + +impl McBufReadable for SignatureOrId { + fn read_from(buf: &mut Cursor<&[u8]>) -> Result { + let id = u32::var_read_from(buf)?; + if id == 0 { + let full_signature = MessageSignature::read_from(buf)?; + Ok(SignatureOrId::Signature(full_signature)) + } else { + Ok(SignatureOrId::Id(id - 1)) + } + } +} +impl McBufWritable for SignatureOrId { + fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + match self { + SignatureOrId::Signature(full_signature) => { + 0u32.var_write_into(buf); + full_signature.write_into(buf); + } + SignatureOrId::Id(id) => { + (id + 1).var_write_into(buf); + } + } + Ok(()) + } } diff --git a/azalea-protocol/src/packets/game/clientbound_disguised_chat_packet.rs b/azalea-protocol/src/packets/game/clientbound_disguised_chat_packet.rs new file mode 100644 index 00000000..c0c1b195 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_disguised_chat_packet.rs @@ -0,0 +1,11 @@ +use azalea_buf::McBuf; +use azalea_chat::component::Component; +use azalea_protocol_macros::ClientboundGamePacket; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundDisguisedChatPacket { + pub message: Component, + // TODO: {'field': 'b.a', 'operation': 'write', 'type': 'varint'} + // TODO: {'field': 'b.b', 'operation': 'write', 'type': 'chatcomponent'} + pub chat_type: Option, +} diff --git a/azalea-protocol/src/packets/game/clientbound_explode_packet.rs b/azalea-protocol/src/packets/game/clientbound_explode_packet.rs index 10a9e9a9..7953c704 100644 --- a/azalea-protocol/src/packets/game/clientbound_explode_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_explode_packet.rs @@ -1,118 +1,17 @@ -use azalea_buf::{BufReadError, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable}; -use azalea_core::BlockPos; +use azalea_buf::McBuf; use azalea_protocol_macros::ClientboundGamePacket; -use std::io::{Cursor, Write}; -#[derive(Clone, Debug, PartialEq, ClientboundGamePacket)] +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] pub struct ClientboundExplodePacket { - pub x: f32, - pub y: f32, - pub z: f32, + pub x: f64, + pub y: f64, + pub z: f64, pub power: f32, - pub to_blow: Vec, + // TODO: {'operation': 'store', 'type': 'int', 'value': 'anp.b(this.a)', 'var': 'var2'} + // TODO: {'operation': 'store', 'type': 'int', 'value': 'anp.b(this.b)', 'var': 'var3'} + // TODO: {'operation': 'store', 'type': 'int', 'value': 'anp.b(this.c)', 'var': 'var4'} + pub to_blow: todo!(), pub knockback_x: f32, pub knockback_y: f32, pub knockback_z: f32, } - -impl McBufReadable for ClientboundExplodePacket { - fn read_from(buf: &mut Cursor<&[u8]>) -> Result { - let x = f32::read_from(buf)?; - let y = f32::read_from(buf)?; - let z = f32::read_from(buf)?; - let power = f32::read_from(buf)?; - - let x_floor = x.floor() as i32; - let y_floor = y.floor() as i32; - let z_floor = z.floor() as i32; - - let to_blow_len = u32::var_read_from(buf)?; - let mut to_blow = Vec::with_capacity(to_blow_len as usize); - for _ in 0..to_blow_len { - // the bytes are offsets from the main x y z - let x = x_floor + i8::read_from(buf)? as i32; - let y = y_floor + i8::read_from(buf)? as i32; - let z = z_floor + i8::read_from(buf)? as i32; - to_blow.push(BlockPos { x, y, z }); - } - - let knockback_x = f32::read_from(buf)?; - let knockback_y = f32::read_from(buf)?; - let knockback_z = f32::read_from(buf)?; - - Ok(Self { - x, - y, - z, - power, - to_blow, - knockback_x, - knockback_y, - knockback_z, - }) - } -} - -impl McBufWritable for ClientboundExplodePacket { - fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - self.x.write_into(buf)?; - self.y.write_into(buf)?; - self.z.write_into(buf)?; - self.power.write_into(buf)?; - - let to_blow_len = self.to_blow.len() as u32; - to_blow_len.var_write_into(buf)?; - - let x_floor = self.x.floor() as i32; - let y_floor = self.y.floor() as i32; - let z_floor = self.z.floor() as i32; - - for pos in &self.to_blow { - let x = (pos.x - x_floor) as i8; - let y = (pos.y - y_floor) as i8; - let z = (pos.z - z_floor) as i8; - x.write_into(buf)?; - y.write_into(buf)?; - z.write_into(buf)?; - } - - self.knockback_x.write_into(buf)?; - self.knockback_y.write_into(buf)?; - self.knockback_z.write_into(buf)?; - Ok(()) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_read_write() { - let packet = ClientboundExplodePacket { - x: 123_456.0, - y: 789_012.0, - z: 345_678.0, - power: 1_000.0, - to_blow: vec![ - BlockPos { - x: 123_456 + 1, - y: 789_012 + 2, - z: 345_678 - 127, - }, - BlockPos { - x: 123_456 + 4, - y: 789_012 - 5, - z: 345_678 + 6, - }, - ], - knockback_x: 1_000.0, - knockback_y: 2_000.0, - knockback_z: 3_000.0, - }; - let mut buf = Vec::new(); - packet.write_into(&mut buf).unwrap(); - let packet2 = ClientboundExplodePacket::read_from(&mut Cursor::new(&buf)).unwrap(); - assert_eq!(packet, packet2); - } -} diff --git a/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs index 3f75e74b..4b3d7cf3 100644 --- a/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs @@ -1,161 +1,22 @@ use azalea_buf::McBuf; -use azalea_chat::{ - component::Component, - translatable_component::{StringOrComponent, TranslatableComponent}, -}; -use azalea_core::BitSet; -use azalea_crypto::{MessageSignature, SignedMessageHeader}; +use azalea_chat::component::Component; use azalea_protocol_macros::ClientboundGamePacket; use uuid::Uuid; #[derive(Clone, Debug, McBuf, ClientboundGamePacket)] pub struct ClientboundPlayerChatPacket { - pub message: PlayerChatMessage, - pub chat_type: ChatTypeBound, -} - -#[derive(Copy, Clone, Debug, McBuf, PartialEq, Eq)] -pub enum ChatType { - Chat = 0, - SayCommand = 1, - MsgCommandIncoming = 2, - MsgCommandOutgoing = 3, - TeamMsgCommandIncoming = 4, - TeamMsgCommandOutgoing = 5, - EmoteCommand = 6, -} - -#[derive(Clone, Debug, McBuf)] -pub struct ChatTypeBound { - pub chat_type: ChatType, - pub name: Component, - pub target_name: Option, -} - -#[derive(Clone, Debug, McBuf)] -pub struct PlayerChatMessage { - pub signed_header: SignedMessageHeader, - pub header_signature: MessageSignature, - pub signed_body: SignedMessageBody, + pub sender: Uuid, + #[var] + pub index: u32, + pub signature: Option>, + // TODO: {'field': 'd.a', 'operation': 'write', 'type': 'string'} + // TODO: {'field': 'd.b.toEpochMilli()', 'operation': 'write', 'type': 'long'} + // TODO: {'field': 'd.c', 'operation': 'write', 'type': 'long'} + pub body: todo!(), pub unsigned_content: Option, - pub filter_mask: FilterMask, -} - -#[derive(Clone, Debug, McBuf)] -pub struct SignedMessageBody { - pub content: ChatMessageContent, - pub timestamp: u64, - pub salt: u64, - pub last_seen: Vec, -} - -impl PlayerChatMessage { - /// Returns the content of the message. If you want to get the Component - /// for the whole message including the sender part, use - /// [`ClientboundPlayerChatPacket::message`]. - pub fn content(&self, only_secure_chat: bool) -> Component { - if only_secure_chat { - return self - .signed_body - .content - .decorated - .clone() - .unwrap_or_else(|| Component::from(self.signed_body.content.plain.clone())); - } - self.unsigned_content - .clone() - .unwrap_or_else(|| self.content(true)) - } -} - -impl ClientboundPlayerChatPacket { - /// Get the full message, including the sender part. - pub fn message(&self, only_secure_chat: bool) -> Component { - let sender = self.chat_type.name.clone(); - let content = self.message.content(only_secure_chat); - let target = self.chat_type.target_name.clone(); - - let translation_key = self.chat_type.chat_type.chat_translation_key(); - - let mut args = vec![ - StringOrComponent::Component(sender), - StringOrComponent::Component(content), - ]; - if let Some(target) = target { - args.push(StringOrComponent::Component(target)); - } - - let component = TranslatableComponent::new(translation_key.to_string(), args); - - Component::Translatable(component) - } -} - -impl ChatType { - pub fn chat_translation_key(&self) -> &'static str { - match self { - ChatType::Chat => "chat.type.text", - ChatType::SayCommand => "chat.type.announcement", - ChatType::MsgCommandIncoming => "commands.message.display.incoming", - ChatType::MsgCommandOutgoing => "commands.message.display.outgoing", - ChatType::TeamMsgCommandIncoming => "chat.type.team.text", - ChatType::TeamMsgCommandOutgoing => "chat.type.team.sent", - ChatType::EmoteCommand => "chat.type.emote", - } - } - - pub fn narrator_translation_key(&self) -> &'static str { - match self { - ChatType::Chat => "chat.type.text.narrate", - ChatType::SayCommand => "chat.type.text.narrate", - ChatType::MsgCommandIncoming => "chat.type.text.narrate", - ChatType::MsgCommandOutgoing => "chat.type.text.narrate", - ChatType::TeamMsgCommandIncoming => "chat.type.text.narrate", - ChatType::TeamMsgCommandOutgoing => "chat.type.text.narrate", - ChatType::EmoteCommand => "chat.type.emote", - } - } -} - -#[derive(Clone, Debug, McBuf)] -pub struct LastSeenMessagesEntry { - pub profile_id: Uuid, - pub last_signature: MessageSignature, -} - -#[derive(Clone, Debug, McBuf, Default)] -pub struct LastSeenMessagesUpdate { - pub last_seen: Vec, - pub last_received: Option, -} - -#[derive(Clone, Debug, McBuf)] -pub struct ChatMessageContent { - pub plain: String, - /// Only sent if the decorated message is different than the plain. - pub decorated: Option, -} - -#[derive(Clone, Debug, McBuf)] -pub enum FilterMask { - PassThrough, - FullyFiltered, - PartiallyFiltered(BitSet), -} - -#[cfg(test)] -mod tests { - use super::*; - use azalea_buf::McBufReadable; - use std::io::Cursor; - - #[test] - fn test_chat_type() { - let chat_type_enum = ChatType::read_from(&mut Cursor::new(&[0x06])).unwrap(); - assert_eq!(chat_type_enum, ChatType::EmoteCommand); - assert_eq!( - ChatType::read_from(&mut Cursor::new(&[0x07])).unwrap(), - ChatType::Chat - ); - } + // TODO: {'field': 'f.f', 'operation': 'write', 'type': 'enum'} + // TODO: {'condition': 'f.f == sl$a.c', 'instructions': [{'field': 'f.e.toLongArray().length', 'operation': 'write', 'type': 'varint'}, {'field': 'f.e.toLongArray()', 'operation': 'write', 'type': 'long[]'}], 'operation': 'if'} + // TODO: {'field': 'g.a', 'operation': 'write', 'type': 'varint'} + // TODO: {'field': 'g.b', 'operation': 'write', 'type': 'chatcomponent'} + pub chat_type: Option, } diff --git a/azalea-protocol/src/packets/game/clientbound_player_info_remove_packet.rs b/azalea-protocol/src/packets/game/clientbound_player_info_remove_packet.rs new file mode 100644 index 00000000..841321c8 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_player_info_remove_packet.rs @@ -0,0 +1,7 @@ +use azalea_buf::McBuf; +use azalea_protocol_macros::ClientboundGamePacket; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundPlayerInfoRemovePacket { + pub profile_ids: Vec, +} diff --git a/azalea-protocol/src/packets/game/clientbound_player_info_update_packet.rs b/azalea-protocol/src/packets/game/clientbound_player_info_update_packet.rs new file mode 100644 index 00000000..ef5f2786 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_player_info_update_packet.rs @@ -0,0 +1,5 @@ +use azalea_buf::McBuf; +use azalea_protocol_macros::ClientboundGamePacket; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundPlayerInfoUpdatePacket {} diff --git a/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs b/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs index b1147305..b3c4808d 100644 --- a/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs @@ -6,6 +6,5 @@ use azalea_protocol_macros::ClientboundGamePacket; pub struct ClientboundServerDataPacket { pub motd: Option, pub icon_base64: Option, - pub previews_chat: bool, pub enforces_secure_chat: bool, } diff --git a/azalea-protocol/src/packets/game/clientbound_update_enabled_features_packet.rs b/azalea-protocol/src/packets/game/clientbound_update_enabled_features_packet.rs new file mode 100644 index 00000000..6311760f --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_update_enabled_features_packet.rs @@ -0,0 +1,7 @@ +use azalea_buf::McBuf; +use azalea_protocol_macros::ClientboundGamePacket; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundUpdateEnabledFeaturesPacket { + pub features: Vec, +} diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index ae66c0be..023bc8e0 100644 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -10,9 +10,6 @@ pub mod clientbound_block_event_packet; pub mod clientbound_block_update_packet; pub mod clientbound_boss_event_packet; pub mod clientbound_change_difficulty_packet; -pub mod clientbound_chat_preview_packet; -pub mod clientbound_command_suggestions_packet; -pub mod clientbound_commands_packet; pub mod clientbound_container_set_content_packet; pub mod clientbound_container_set_data_packet; pub mod clientbound_container_set_slot_packet; @@ -22,6 +19,7 @@ pub mod clientbound_custom_payload_packet; pub mod clientbound_custom_sound_packet; pub mod clientbound_delete_chat_packet; pub mod clientbound_disconnect_packet; +pub mod clientbound_disguised_chat_packet; pub mod clientbound_entity_event_packet; pub mod clientbound_entity_velocity_packet; pub mod clientbound_explode_packet; @@ -47,12 +45,10 @@ pub mod clientbound_open_sign_editor_packet; pub mod clientbound_ping_packet; pub mod clientbound_place_ghost_recipe_packet; pub mod clientbound_player_abilities_packet; -pub mod clientbound_player_chat_header_packet; pub mod clientbound_player_chat_packet; -pub mod clientbound_player_combat_end_packet; -pub mod clientbound_player_combat_enter_packet; pub mod clientbound_player_combat_kill_packet; -pub mod clientbound_player_info_packet; +pub mod clientbound_player_info_remove_packet; +pub mod clientbound_player_info_update_packet; pub mod clientbound_player_look_at_packet; pub mod clientbound_player_position_packet; pub mod clientbound_recipe_packet; @@ -75,10 +71,6 @@ pub mod clientbound_set_carried_item_packet; pub mod clientbound_set_chunk_cache_center_packet; pub mod clientbound_set_chunk_cache_radius_packet; pub mod clientbound_set_default_spawn_position_packet; -pub mod clientbound_set_display_chat_preview_packet; -pub mod clientbound_set_display_objective_packet; -pub mod clientbound_set_entity_data_packet; -pub mod clientbound_set_entity_link_packet; pub mod clientbound_set_entity_motion_packet; pub mod clientbound_set_equipment_packet; pub mod clientbound_set_experience_packet; @@ -102,6 +94,7 @@ pub mod clientbound_take_item_entity_packet; pub mod clientbound_teleport_entity_packet; pub mod clientbound_update_advancements_packet; pub mod clientbound_update_attributes_packet; +pub mod clientbound_update_enabled_features_packet; pub mod clientbound_update_mob_effect_packet; pub mod clientbound_update_recipes_packet; pub mod clientbound_update_tags_packet; @@ -112,10 +105,6 @@ pub mod serverbound_change_difficulty_packet; pub mod serverbound_chat_ack_packet; pub mod serverbound_chat_command_packet; pub mod serverbound_chat_packet; -pub mod serverbound_chat_preview_packet; -pub mod serverbound_client_command_packet; -pub mod serverbound_client_information_packet; -pub mod serverbound_command_suggestion_packet; pub mod serverbound_container_button_click_packet; pub mod serverbound_container_click_packet; pub mod serverbound_container_close_packet; @@ -169,51 +158,47 @@ declare_state_packets!( 0x03: serverbound_chat_ack_packet::ServerboundChatAckPacket, 0x04: serverbound_chat_command_packet::ServerboundChatCommandPacket, 0x05: serverbound_chat_packet::ServerboundChatPacket, - 0x06: serverbound_chat_preview_packet::ServerboundChatPreviewPacket, - 0x07: serverbound_client_command_packet::ServerboundClientCommandPacket, - 0x08: serverbound_client_information_packet::ServerboundClientInformationPacket, - 0x09: serverbound_command_suggestion_packet::ServerboundCommandSuggestionPacket, - 0x0a: serverbound_container_button_click_packet::ServerboundContainerButtonClickPacket, - 0x0b: serverbound_container_click_packet::ServerboundContainerClickPacket, - 0x0c: serverbound_container_close_packet::ServerboundContainerClosePacket, - 0x0d: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket, - 0x0e: serverbound_edit_book_packet::ServerboundEditBookPacket, - 0x0f: serverbound_entity_tag_query::ServerboundEntityTagQuery, - 0x10: serverbound_interact_packet::ServerboundInteractPacket, - 0x11: serverbound_jigsaw_generate_packet::ServerboundJigsawGeneratePacket, - 0x12: serverbound_keep_alive_packet::ServerboundKeepAlivePacket, - 0x13: serverbound_lock_difficulty_packet::ServerboundLockDifficultyPacket, - 0x14: serverbound_move_player_pos_packet::ServerboundMovePlayerPosPacket, - 0x15: serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket, - 0x16: serverbound_move_player_rot_packet::ServerboundMovePlayerRotPacket, - 0x17: serverbound_move_player_status_only_packet::ServerboundMovePlayerStatusOnlyPacket, - 0x18: serverbound_move_vehicle_packet::ServerboundMoveVehiclePacket, - 0x19: serverbound_paddle_boat_packet::ServerboundPaddleBoatPacket, - 0x1a: serverbound_pick_item_packet::ServerboundPickItemPacket, - 0x1b: serverbound_place_recipe_packet::ServerboundPlaceRecipePacket, - 0x1c: serverbound_player_abilities_packet::ServerboundPlayerAbilitiesPacket, - 0x1d: serverbound_player_action_packet::ServerboundPlayerActionPacket, - 0x1e: serverbound_player_command_packet::ServerboundPlayerCommandPacket, - 0x1f: serverbound_player_input_packet::ServerboundPlayerInputPacket, - 0x20: serverbound_pong_packet::ServerboundPongPacket, - 0x21: serverbound_recipe_book_change_settings_packet::ServerboundRecipeBookChangeSettingsPacket, - 0x22: serverbound_recipe_book_seen_recipe_packet::ServerboundRecipeBookSeenRecipePacket, - 0x23: serverbound_rename_item_packet::ServerboundRenameItemPacket, - 0x24: serverbound_resource_pack_packet::ServerboundResourcePackPacket, - 0x25: serverbound_seen_advancements_packet::ServerboundSeenAdvancementsPacket, - 0x26: serverbound_select_trade_packet::ServerboundSelectTradePacket, - 0x27: serverbound_set_beacon_packet::ServerboundSetBeaconPacket, - 0x28: serverbound_set_carried_item_packet::ServerboundSetCarriedItemPacket, - 0x29: serverbound_set_command_block_packet::ServerboundSetCommandBlockPacket, - 0x2a: serverbound_set_command_minecart_packet::ServerboundSetCommandMinecartPacket, - 0x2b: serverbound_set_creative_mode_slot_packet::ServerboundSetCreativeModeSlotPacket, - 0x2c: serverbound_set_jigsaw_block_packet::ServerboundSetJigsawBlockPacket, - 0x2d: serverbound_set_structure_block_packet::ServerboundSetStructureBlockPacket, - 0x2e: serverbound_sign_update_packet::ServerboundSignUpdatePacket, - 0x2f: serverbound_swing_packet::ServerboundSwingPacket, - 0x30: serverbound_teleport_to_entity_packet::ServerboundTeleportToEntityPacket, - 0x31: serverbound_use_item_on_packet::ServerboundUseItemOnPacket, - 0x32: serverbound_use_item_packet::ServerboundUseItemPacket, + 0x06: serverbound_container_button_click_packet::ServerboundContainerButtonClickPacket, + 0x07: serverbound_container_click_packet::ServerboundContainerClickPacket, + 0x08: serverbound_container_close_packet::ServerboundContainerClosePacket, + 0x09: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket, + 0x0a: serverbound_edit_book_packet::ServerboundEditBookPacket, + 0x0b: serverbound_entity_tag_query::ServerboundEntityTagQuery, + 0x0c: serverbound_interact_packet::ServerboundInteractPacket, + 0x0d: serverbound_jigsaw_generate_packet::ServerboundJigsawGeneratePacket, + 0x0e: serverbound_keep_alive_packet::ServerboundKeepAlivePacket, + 0x0f: serverbound_lock_difficulty_packet::ServerboundLockDifficultyPacket, + 0x10: serverbound_move_player_pos_packet::ServerboundMovePlayerPosPacket, + 0x11: serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket, + 0x12: serverbound_move_player_rot_packet::ServerboundMovePlayerRotPacket, + 0x13: serverbound_move_player_status_only_packet::ServerboundMovePlayerStatusOnlyPacket, + 0x14: serverbound_move_vehicle_packet::ServerboundMoveVehiclePacket, + 0x15: serverbound_paddle_boat_packet::ServerboundPaddleBoatPacket, + 0x16: serverbound_pick_item_packet::ServerboundPickItemPacket, + 0x17: serverbound_place_recipe_packet::ServerboundPlaceRecipePacket, + 0x18: serverbound_player_abilities_packet::ServerboundPlayerAbilitiesPacket, + 0x19: serverbound_player_action_packet::ServerboundPlayerActionPacket, + 0x1a: serverbound_player_command_packet::ServerboundPlayerCommandPacket, + 0x1b: serverbound_player_input_packet::ServerboundPlayerInputPacket, + 0x1c: serverbound_pong_packet::ServerboundPongPacket, + 0x1d: serverbound_recipe_book_change_settings_packet::ServerboundRecipeBookChangeSettingsPacket, + 0x1e: serverbound_recipe_book_seen_recipe_packet::ServerboundRecipeBookSeenRecipePacket, + 0x1f: serverbound_rename_item_packet::ServerboundRenameItemPacket, + 0x20: serverbound_resource_pack_packet::ServerboundResourcePackPacket, + 0x21: serverbound_seen_advancements_packet::ServerboundSeenAdvancementsPacket, + 0x22: serverbound_select_trade_packet::ServerboundSelectTradePacket, + 0x23: serverbound_set_beacon_packet::ServerboundSetBeaconPacket, + 0x24: serverbound_set_carried_item_packet::ServerboundSetCarriedItemPacket, + 0x25: serverbound_set_command_block_packet::ServerboundSetCommandBlockPacket, + 0x26: serverbound_set_command_minecart_packet::ServerboundSetCommandMinecartPacket, + 0x27: serverbound_set_creative_mode_slot_packet::ServerboundSetCreativeModeSlotPacket, + 0x28: serverbound_set_jigsaw_block_packet::ServerboundSetJigsawBlockPacket, + 0x29: serverbound_set_structure_block_packet::ServerboundSetStructureBlockPacket, + 0x2a: serverbound_sign_update_packet::ServerboundSignUpdatePacket, + 0x2b: serverbound_swing_packet::ServerboundSwingPacket, + 0x2c: serverbound_teleport_to_entity_packet::ServerboundTeleportToEntityPacket, + 0x2d: serverbound_use_item_on_packet::ServerboundUseItemOnPacket, + 0x2e: serverbound_use_item_packet::ServerboundUseItemPacket, }, Clientbound => { 0x00: clientbound_add_entity_packet::ClientboundAddEntityPacket, @@ -228,18 +213,16 @@ declare_state_packets!( 0x09: clientbound_block_update_packet::ClientboundBlockUpdatePacket, 0x0a: clientbound_boss_event_packet::ClientboundBossEventPacket, 0x0b: clientbound_change_difficulty_packet::ClientboundChangeDifficultyPacket, - 0x0c: clientbound_chat_preview_packet::ClientboundChatPreviewPacket, - 0x0e: clientbound_command_suggestions_packet::ClientboundCommandSuggestionsPacket, - 0x0f: clientbound_commands_packet::ClientboundCommandsPacket, - 0x11: clientbound_container_set_content_packet::ClientboundContainerSetContentPacket, - 0x12: clientbound_container_set_data_packet::ClientboundContainerSetDataPacket, - 0x13: clientbound_container_set_slot_packet::ClientboundContainerSetSlotPacket, - 0x14: clientbound_cooldown_packet::ClientboundCooldownPacket, - 0x15: clientbound_custom_chat_completions_packet::ClientboundCustomChatCompletionsPacket, - 0x16: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket, - 0x17: clientbound_custom_sound_packet::ClientboundCustomSoundPacket, - 0x18: clientbound_delete_chat_packet::ClientboundDeleteChatPacket, - 0x19: clientbound_disconnect_packet::ClientboundDisconnectPacket, + 0x0d: clientbound_container_set_content_packet::ClientboundContainerSetContentPacket, + 0x0e: clientbound_container_set_data_packet::ClientboundContainerSetDataPacket, + 0x0f: clientbound_container_set_slot_packet::ClientboundContainerSetSlotPacket, + 0x10: clientbound_cooldown_packet::ClientboundCooldownPacket, + 0x11: clientbound_custom_chat_completions_packet::ClientboundCustomChatCompletionsPacket, + 0x12: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket, + 0x13: clientbound_custom_sound_packet::ClientboundCustomSoundPacket, + 0x14: clientbound_delete_chat_packet::ClientboundDeleteChatPacket, + 0x15: clientbound_disconnect_packet::ClientboundDisconnectPacket, + 0x16: clientbound_disguised_chat_packet::ClientboundDisguisedChatPacket, 0x1a: clientbound_entity_event_packet::ClientboundEntityEventPacket, 0x1b: clientbound_explode_packet::ClientboundExplodePacket, 0x1c: clientbound_forget_level_chunk_packet::ClientboundForgetLevelChunkPacket, @@ -264,12 +247,10 @@ declare_state_packets!( 0x2f: clientbound_ping_packet::ClientboundPingPacket, 0x30: clientbound_place_ghost_recipe_packet::ClientboundPlaceGhostRecipePacket, 0x31: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket, - 0x32: clientbound_player_chat_header_packet::ClientboundPlayerChatHeaderPacket, - 0x33: clientbound_player_chat_packet::ClientboundPlayerChatPacket, - 0x34: clientbound_player_combat_end_packet::ClientboundPlayerCombatEndPacket, - 0x35: clientbound_player_combat_enter_packet::ClientboundPlayerCombatEnterPacket, - 0x36: clientbound_player_combat_kill_packet::ClientboundPlayerCombatKillPacket, - 0x37: clientbound_player_info_packet::ClientboundPlayerInfoPacket, + 0x32: clientbound_player_combat_kill_packet::ClientboundPlayerCombatKillPacket, + 0x32: clientbound_player_chat_packet::ClientboundPlayerChatPacket, + 0x36: clientbound_player_info_remove_packet::ClientboundPlayerInfoRemovePacket, + 0x37: clientbound_player_info_update_packet::ClientboundPlayerInfoUpdatePacket, 0x38: clientbound_player_look_at_packet::ClientboundPlayerLookAtPacket, 0x39: clientbound_player_position_packet::ClientboundPlayerPositionPacket, 0x3a: clientbound_recipe_packet::ClientboundRecipePacket, @@ -293,34 +274,31 @@ declare_state_packets!( 0x4c: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, 0x4c: clientbound_set_chunk_cache_radius_packet::ClientboundSetChunkCacheRadiusPacket, 0x4d: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, - 0x4e: clientbound_set_display_chat_preview_packet::ClientboundSetDisplayChatPreviewPacket, - 0x4f: clientbound_set_display_objective_packet::ClientboundSetDisplayObjectivePacket, - 0x50: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, - 0x51: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, - 0x52: clientbound_entity_velocity_packet::ClientboundEntityVelocityPacket, - 0x52: clientbound_set_entity_motion_packet::ClientboundSetEntityMotionPacket, - 0x53: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, - 0x54: clientbound_set_experience_packet::ClientboundSetExperiencePacket, - 0x55: clientbound_set_health_packet::ClientboundSetHealthPacket, - 0x56: clientbound_set_objective_packet::ClientboundSetObjectivePacket, - 0x57: clientbound_set_passengers_packet::ClientboundSetPassengersPacket, - 0x58: clientbound_set_player_team_packet::ClientboundSetPlayerTeamPacket, - 0x59: clientbound_set_score_packet::ClientboundSetScorePacket, - 0x5a: clientbound_set_simulation_distance_packet::ClientboundSetSimulationDistancePacket, - 0x5b: clientbound_set_subtitle_text_packet::ClientboundSetSubtitleTextPacket, - 0x5c: clientbound_set_time_packet::ClientboundSetTimePacket, - 0x5d: clientbound_set_title_text_packet::ClientboundSetTitleTextPacket, - 0x5e: clientbound_set_titles_animation_packet::ClientboundSetTitlesAnimationPacket, - 0x5f: clientbound_sound_entity_packet::ClientboundSoundEntityPacket, - 0x60: clientbound_sound_packet::ClientboundSoundPacket, - 0x61: clientbound_stop_sound_packet::ClientboundStopSoundPacket, - 0x62: clientbound_system_chat_packet::ClientboundSystemChatPacket, - 0x63: clientbound_tab_list_packet::ClientboundTabListPacket, - 0x64: clientbound_tag_query_packet::ClientboundTagQueryPacket, - 0x65: clientbound_take_item_entity_packet::ClientboundTakeItemEntityPacket, - 0x66: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, - 0x67: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, - 0x68: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, + 0x4e: clientbound_entity_velocity_packet::ClientboundEntityVelocityPacket, + 0x4e: clientbound_set_entity_motion_packet::ClientboundSetEntityMotionPacket, + 0x4f: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, + 0x50: clientbound_set_experience_packet::ClientboundSetExperiencePacket, + 0x51: clientbound_set_health_packet::ClientboundSetHealthPacket, + 0x52: clientbound_set_objective_packet::ClientboundSetObjectivePacket, + 0x53: clientbound_set_passengers_packet::ClientboundSetPassengersPacket, + 0x54: clientbound_set_player_team_packet::ClientboundSetPlayerTeamPacket, + 0x55: clientbound_set_score_packet::ClientboundSetScorePacket, + 0x56: clientbound_set_simulation_distance_packet::ClientboundSetSimulationDistancePacket, + 0x57: clientbound_set_subtitle_text_packet::ClientboundSetSubtitleTextPacket, + 0x58: clientbound_set_time_packet::ClientboundSetTimePacket, + 0x59: clientbound_set_title_text_packet::ClientboundSetTitleTextPacket, + 0x5a: clientbound_set_titles_animation_packet::ClientboundSetTitlesAnimationPacket, + 0x5b: clientbound_sound_entity_packet::ClientboundSoundEntityPacket, + 0x5c: clientbound_sound_packet::ClientboundSoundPacket, + 0x5d: clientbound_stop_sound_packet::ClientboundStopSoundPacket, + 0x5e: clientbound_system_chat_packet::ClientboundSystemChatPacket, + 0x5f: clientbound_tab_list_packet::ClientboundTabListPacket, + 0x60: clientbound_tag_query_packet::ClientboundTagQueryPacket, + 0x61: clientbound_take_item_entity_packet::ClientboundTakeItemEntityPacket, + 0x62: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, + 0x63: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, + 0x64: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, + 0x68: clientbound_update_enabled_features_packet::ClientboundUpdateEnabledFeaturesPacket, 0x69: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket, 0x6a: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket, 0x6b: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, diff --git a/azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs b/azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs index 19c51de8..998e96d2 100644 --- a/azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs +++ b/azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs @@ -1,8 +1,8 @@ -use crate::packets::game::clientbound_player_chat_packet::LastSeenMessagesUpdate; use azalea_buf::McBuf; use azalea_protocol_macros::ServerboundGamePacket; #[derive(Clone, Debug, McBuf, ServerboundGamePacket)] pub struct ServerboundChatAckPacket { - pub last_seen_messages: LastSeenMessagesUpdate, + #[var] + pub offset: u32, } diff --git a/azalea-protocol/src/packets/game/serverbound_chat_command_packet.rs b/azalea-protocol/src/packets/game/serverbound_chat_command_packet.rs index a840e44f..412468f1 100644 --- a/azalea-protocol/src/packets/game/serverbound_chat_command_packet.rs +++ b/azalea-protocol/src/packets/game/serverbound_chat_command_packet.rs @@ -1,22 +1,5 @@ use azalea_buf::McBuf; -use azalea_crypto::MessageSignature; use azalea_protocol_macros::ServerboundGamePacket; -use super::clientbound_player_chat_packet::LastSeenMessagesUpdate; - #[derive(Clone, Debug, McBuf, ServerboundGamePacket)] -pub struct ServerboundChatCommandPacket { - pub command: String, - // TODO: Choose a real timestamp type - pub timestamp: u64, - pub salt: u64, - pub argument_signatures: Vec, - pub signed_preview: bool, - pub last_seen_messages: LastSeenMessagesUpdate, -} - -#[derive(Clone, Debug, McBuf)] -pub struct ArgumentSignature { - pub name: String, - pub signature: MessageSignature, -} +pub struct ServerboundChatCommandPacket {} diff --git a/azalea-protocol/src/packets/game/serverbound_chat_packet.rs b/azalea-protocol/src/packets/game/serverbound_chat_packet.rs index 434474a2..1e9bc3dd 100644 --- a/azalea-protocol/src/packets/game/serverbound_chat_packet.rs +++ b/azalea-protocol/src/packets/game/serverbound_chat_packet.rs @@ -1,14 +1,5 @@ -use crate::packets::game::clientbound_player_chat_packet::LastSeenMessagesUpdate; use azalea_buf::McBuf; -use azalea_crypto::MessageSignature; use azalea_protocol_macros::ServerboundGamePacket; #[derive(Clone, Debug, McBuf, ServerboundGamePacket)] -pub struct ServerboundChatPacket { - pub message: String, - pub timestamp: u64, - pub salt: u64, - pub signature: MessageSignature, - pub signed_preview: bool, - pub last_seen_messages: LastSeenMessagesUpdate, -} +pub struct ServerboundChatPacket {} diff --git a/azalea-protocol/src/packets/login/serverbound_hello_packet.rs b/azalea-protocol/src/packets/login/serverbound_hello_packet.rs index 5e1422fb..f4172a27 100755 --- a/azalea-protocol/src/packets/login/serverbound_hello_packet.rs +++ b/azalea-protocol/src/packets/login/serverbound_hello_packet.rs @@ -2,37 +2,10 @@ use azalea_buf::McBuf; use azalea_protocol_macros::ServerboundLoginPacket; use uuid::Uuid; -#[derive(Clone, Debug, ServerboundLoginPacket, McBuf, PartialEq, Eq)] +#[derive(Clone, Debug, McBuf, ServerboundLoginPacket)] pub struct ServerboundHelloPacket { - pub username: String, - pub public_key: Option, + pub name: String, + // TODO: {'field': 'b.b', 'operation': 'write', 'type': 'uuid'} + pub chat_session: Option<(u64, u32, Vec, u32, Vec)>, pub profile_id: Option, } - -#[derive(Clone, Debug, McBuf, PartialEq, Eq)] -pub struct ProfilePublicKeyData { - pub expires_at: u64, - pub key: Vec, - pub key_signature: Vec, -} - -#[cfg(test)] -mod tests { - use std::io::Cursor; - - use super::*; - use azalea_buf::{McBufReadable, McBufWritable}; - - #[test] - fn test_read_write() { - let packet = ServerboundHelloPacket { - username: "test".to_string(), - public_key: None, - profile_id: Some(Uuid::from_u128(0)), - }; - let mut buf: Vec = Vec::new(); - packet.write_into(&mut buf).unwrap(); - let packet2 = ServerboundHelloPacket::read_from(&mut Cursor::new(&buf)).unwrap(); - assert_eq!(packet, packet2); - } -} diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index f7270b51..6066e729 100644 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -9,7 +9,7 @@ use std::io::{Cursor, Write}; // TODO: rename the packet files to just like clientbound_add_entity instead of clientbound_add_entity_packet -pub const PROTOCOL_VERSION: u32 = 760; +pub const PROTOCOL_VERSION: u32 = 1073741928; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { diff --git a/codegen/lib/code/utils.py b/codegen/lib/code/utils.py index d91e0634..3cb73e15 100644 --- a/codegen/lib/code/utils.py +++ b/codegen/lib/code/utils.py @@ -80,8 +80,14 @@ def burger_type_to_rust_type(burger_type, field_name: Optional[str] = None, inst enum_first_part_name) print('enum_first_part_obfuscated_name', enum_first_part_obfuscated_name) - enum_name = mappings.get_method_type( - enum_first_part_obfuscated_name, enum_field.split('.')[1].split('(')[0], '') + print('enum field', enum_field.split('.')[1].split('(')[0]) + try: + enum_name = mappings.get_method_type( + enum_first_part_obfuscated_name, enum_field.split('.')[1].split('(')[0], '') + except KeyError: + # sometimes enums are fields instead of methods + enum_name = mappings.get_field_type( + enum_first_part_obfuscated_name, enum_field.split('.')[1].split('(')[0]) print('hm', enum_name) else: