From ec0b6ec06c1607d7bfc9df2fca220f59c700e07b Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 10 Jul 2022 23:43:09 -0500 Subject: [PATCH] 1.19.1-pre4 --- Cargo.lock | 1 + README.md | 2 +- azalea-block/src/lib.rs | 2 +- azalea-crypto/Cargo.toml | 1 + azalea-crypto/src/lib.rs | 2 +- azalea-crypto/src/signing.rs | 25 +++--- .../game/clientbound_delete_chat_packet.rs | 8 ++ .../game/clientbound_light_update_packet.rs | 3 +- .../clientbound_player_chat_header_packet.rs | 10 +++ .../game/clientbound_player_chat_packet.rs | 50 ++++++++--- azalea-protocol/src/packets/game/mod.rs | 88 ++++++++++--------- azalea-protocol/src/packets/mod.rs | 2 +- 12 files changed, 120 insertions(+), 74 deletions(-) create mode 100644 azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs create mode 100644 azalea-protocol/src/packets/game/clientbound_player_chat_header_packet.rs diff --git a/Cargo.lock b/Cargo.lock index 5221945c..d38f8eaf 100755 --- a/Cargo.lock +++ b/Cargo.lock @@ -145,6 +145,7 @@ dependencies = [ "rand", "rsa_public_encrypt_pkcs1", "sha-1", + "uuid", ] [[package]] diff --git a/README.md b/README.md index 0f3c6849..fd65b1ec 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A collection of Rust crates primarily for creating Minecraft bots.

-*Currently supported Minecraft version: `1.19.1-pre3`.* +*Currently supported Minecraft version: `1.19.1-pre4`.* I named this Azalea because it sounds like a cool word and this is a cool library. This project was heavily inspired by PrismarineJS. diff --git a/azalea-block/src/lib.rs b/azalea-block/src/lib.rs index f07b1bce..3eb86a90 100644 --- a/azalea-block/src/lib.rs +++ b/azalea-block/src/lib.rs @@ -8,7 +8,7 @@ use std::mem; impl BlockState { /// Transmutes a u32 to a block state. - /// + /// /// # Safety /// The `state_id` should be a valid block state. #[inline] diff --git a/azalea-crypto/Cargo.toml b/azalea-crypto/Cargo.toml index ee652565..7b77eb3b 100644 --- a/azalea-crypto/Cargo.toml +++ b/azalea-crypto/Cargo.toml @@ -13,3 +13,4 @@ num-bigint = "^0.4.3" rand = {version = "^0.8.4", features = ["getrandom"]} rsa_public_encrypt_pkcs1 = "0.4.0" sha-1 = "^0.10.0" +uuid = "^1.1.2" diff --git a/azalea-crypto/src/lib.rs b/azalea-crypto/src/lib.rs index a5e797e8..9a17a472 100644 --- a/azalea-crypto/src/lib.rs +++ b/azalea-crypto/src/lib.rs @@ -7,7 +7,7 @@ use aes::{ }; use rand::{rngs::OsRng, RngCore}; use sha1::{Digest, Sha1}; -pub use signing::SaltSignaturePair; +pub use signing::*; fn generate_secret_key() -> [u8; 16] { let mut key = [0u8; 16]; diff --git a/azalea-crypto/src/signing.rs b/azalea-crypto/src/signing.rs index 535f9f1d..99c7b3d7 100644 --- a/azalea-crypto/src/signing.rs +++ b/azalea-crypto/src/signing.rs @@ -1,24 +1,19 @@ -use azalea_buf::{McBufReadable, McBufWritable}; -use std::io::{Read, Write}; +use azalea_buf::McBuf; +use uuid::Uuid; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, McBuf)] pub struct SaltSignaturePair { pub salt: u64, pub signature: Vec, } -impl McBufReadable for SaltSignaturePair { - fn read_from(buf: &mut impl Read) -> Result { - let salt = u64::read_from(buf)?; - let signature = Vec::::read_from(buf)?; - Ok(SaltSignaturePair { salt, signature }) - } +#[derive(Clone, Debug, Default, McBuf)] +pub struct MessageSignature { + pub bytes: Vec, } -impl McBufWritable for SaltSignaturePair { - fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - self.salt.write_into(buf)?; - self.signature.write_into(buf)?; - Ok(()) - } +#[derive(Clone, Debug, McBuf)] +pub struct SignedMessageHeader { + pub previous_signature: Option, + pub uuid: Uuid, } diff --git a/azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs b/azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs new file mode 100644 index 00000000..6e7ab6b7 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_delete_chat_packet.rs @@ -0,0 +1,8 @@ +use azalea_buf::McBuf; +use azalea_crypto::MessageSignature; +use packet_macros::GamePacket; + +#[derive(Clone, Debug, McBuf, GamePacket)] +pub struct ClientboundDeleteChatPacket { + pub message_signature: MessageSignature, +} diff --git a/azalea-protocol/src/packets/game/clientbound_light_update_packet.rs b/azalea-protocol/src/packets/game/clientbound_light_update_packet.rs index adb6e33b..1c998226 100644 --- a/azalea-protocol/src/packets/game/clientbound_light_update_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_light_update_packet.rs @@ -1,5 +1,4 @@ -use azalea_buf::BitSet; -use azalea_buf::McBuf; +use azalea_buf::{BitSet, McBuf}; use packet_macros::GamePacket; #[derive(Clone, Debug, McBuf, GamePacket)] diff --git a/azalea-protocol/src/packets/game/clientbound_player_chat_header_packet.rs b/azalea-protocol/src/packets/game/clientbound_player_chat_header_packet.rs new file mode 100644 index 00000000..bd0bc1f3 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_player_chat_header_packet.rs @@ -0,0 +1,10 @@ +use azalea_buf::McBuf; +use azalea_crypto::{MessageSignature, SignedMessageHeader}; +use packet_macros::GamePacket; + +#[derive(Clone, Debug, McBuf, GamePacket)] +pub struct ClientboundPlayerChatHeaderPacket { + pub header: SignedMessageHeader, + pub header_signature: MessageSignature, + pub body_digest: Vec, +} 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 4aac93f4..f5df8869 100644 --- a/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs @@ -1,22 +1,50 @@ use azalea_buf::McBuf; use azalea_chat::component::Component; -use azalea_crypto::SaltSignaturePair; +use azalea_crypto::{MessageSignature, SignedMessageHeader}; use packet_macros::GamePacket; +use uuid::Uuid; #[derive(Clone, Debug, McBuf, GamePacket)] pub struct ClientboundPlayerChatPacket { - pub signed_content: Component, - pub unsigned_content: Option, - #[var] - pub type_id: i32, - pub sender: ChatSender, - pub timestamp: u64, - pub salt_signature: SaltSignaturePair, + pub message: PlayerChatMessage, + pub chat_type: ChatTypeBound, +} + +#[derive(Copy, Clone, Debug, McBuf)] +pub enum ChatType { + Chat = 0, + SayCommand = 1, + MsgCommandIncoming = 2, + MsgCommandOutgoing = 3, + TeamMsgCommandIncoming = 4, + EmoteCommand = 5, } #[derive(Clone, Debug, McBuf)] -pub struct ChatSender { - pub uuid: uuid::Uuid, +pub struct ChatTypeBound { + pub chat_type: ChatType, pub name: Component, - pub team_name: Option, + pub target_name: Component, +} + +#[derive(Clone, Debug, McBuf)] +pub struct PlayerChatMessage { + pub signed_header: SignedMessageHeader, + pub header_signature: MessageSignature, + pub signed_body: SignedMessageBody, + pub unsigned_content: Option, +} + +#[derive(Clone, Debug, McBuf)] +pub struct SignedMessageBody { + pub content: Component, + pub timestamp: u64, + pub salt: u64, + pub last_seen: Vec, +} + +#[derive(Clone, Debug, McBuf)] +pub struct LastSeen { + pub profile_id: Uuid, + pub last_signature: MessageSignature, } diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index 8009b0fe..c9d632e2 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -9,6 +9,7 @@ pub mod clientbound_container_set_content_packet; pub mod clientbound_custom_chat_completions_packet; pub mod clientbound_custom_payload_packet; pub mod clientbound_declare_commands_packet; +pub mod clientbound_delete_chat_packet; pub mod clientbound_disconnect_packet; pub mod clientbound_entity_event_packet; pub mod clientbound_entity_velocity_packet; @@ -24,6 +25,7 @@ pub mod clientbound_move_entity_pos_packet; pub mod clientbound_move_entity_posrot_packet; pub mod clientbound_move_entity_rot_packet; pub mod clientbound_player_abilities_packet; +pub mod clientbound_player_chat_header_packet; pub mod clientbound_player_chat_packet; pub mod clientbound_player_info_packet; pub mod clientbound_player_position_packet; @@ -88,47 +90,49 @@ declare_state_packets!( 0x11: clientbound_container_set_content_packet::ClientboundContainerSetContentPacket, 0x15: clientbound_custom_chat_completions_packet::ClientboundCustomChatCompletionsPacket, 0x16: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket, - 0x18: clientbound_disconnect_packet::ClientboundDisconnectPacket, - 0x19: clientbound_entity_event_packet::ClientboundEntityEventPacket, - 0x1c: clientbound_game_event_packet::ClientboundGameEventPacket, - 0x1e: clientbound_initialize_border_packet::ClientboundInitializeBorderPacket, - 0x1f: clientbound_keep_alive_packet::ClientboundKeepAlivePacket, - 0x20: clientbound_level_chunk_with_light_packet::ClientboundLevelChunkWithLightPacket, - 0x21: clientbound_level_event_packet::ClientboundLevelEventPacket, - 0x22: clientbound_level_particles_packet::ClientboundLevelParticlesPacket, - 0x23: clientbound_light_update_packet::ClientboundLightUpdatePacket, - 0x24: clientbound_login_packet::ClientboundLoginPacket, - 0x27: clientbound_move_entity_pos_packet::ClientboundMoveEntityPosPacket, - 0x28: clientbound_move_entity_posrot_packet::ClientboundMoveEntityPosrotPacket, - 0x29: clientbound_move_entity_rot_packet::ClientboundMoveEntityRotPacket, - 0x30: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket, - 0x31: clientbound_player_chat_packet::ClientboundPlayerChatPacket, - 0x35: clientbound_player_info_packet::ClientboundPlayerInfoPacket, - 0x37: clientbound_player_position_packet::ClientboundPlayerPositionPacket, - 0x38: clientbound_recipe_packet::ClientboundRecipePacket, - 0x39: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket, - 0x3d: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, - 0x3e: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket, - 0x40: clientbound_server_data_packet::ClientboundServerDataPacket, - 0x48: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, - 0x49: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket, - 0x4a: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, - 0x4b: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, - 0x4c: clientbound_set_display_chat_preview_packet::ClientboundSetDisplayChatPreviewPacket, - 0x4e: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, - 0x4f: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, - 0x50: clientbound_entity_velocity_packet::ClientboundEntityVelocityPacket, - 0x51: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, - 0x52: clientbound_set_experience_packet::ClientboundSetExperiencePacket, - 0x53: clientbound_set_health_packet::ClientboundSetHealthPacket, - 0x5a: clientbound_set_time_packet::ClientboundSetTimePacket, - 0x5e: clientbound_sound_packet::ClientboundSoundPacket, - 0x60: clientbound_system_chat_packet::ClientboundSystemChatPacket, - 0x64: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, - 0x65: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, - 0x66: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, - 0x67: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket, - 0x68: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket, - 0x69: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, + 0x18: clientbound_delete_chat_packet::ClientboundDeleteChatPacket, + 0x19: clientbound_disconnect_packet::ClientboundDisconnectPacket, + 0x1a: clientbound_entity_event_packet::ClientboundEntityEventPacket, + 0x1d: clientbound_game_event_packet::ClientboundGameEventPacket, + 0x1f: clientbound_initialize_border_packet::ClientboundInitializeBorderPacket, + 0x20: clientbound_keep_alive_packet::ClientboundKeepAlivePacket, + 0x21: clientbound_level_chunk_with_light_packet::ClientboundLevelChunkWithLightPacket, + 0x22: clientbound_level_event_packet::ClientboundLevelEventPacket, + 0x23: clientbound_level_particles_packet::ClientboundLevelParticlesPacket, + 0x24: clientbound_light_update_packet::ClientboundLightUpdatePacket, + 0x25: clientbound_login_packet::ClientboundLoginPacket, + 0x28: clientbound_move_entity_pos_packet::ClientboundMoveEntityPosPacket, + 0x29: clientbound_move_entity_posrot_packet::ClientboundMoveEntityPosrotPacket, + 0x2a: clientbound_move_entity_rot_packet::ClientboundMoveEntityRotPacket, + 0x31: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket, + 0x32: clientbound_player_chat_packet::ClientboundPlayerChatPacket, + 0x33: clientbound_player_chat_header_packet::ClientboundPlayerChatHeaderPacket, + 0x37: clientbound_player_info_packet::ClientboundPlayerInfoPacket, + 0x39: clientbound_player_position_packet::ClientboundPlayerPositionPacket, + 0x3a: clientbound_recipe_packet::ClientboundRecipePacket, + 0x3b: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket, + 0x3f: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, + 0x40: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket, + 0x42: clientbound_server_data_packet::ClientboundServerDataPacket, + 0x4a: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, + 0x4b: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket, + 0x4c: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, + 0x4d: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, + 0x4e: clientbound_set_display_chat_preview_packet::ClientboundSetDisplayChatPreviewPacket, + 0x50: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, + 0x51: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, + 0x52: clientbound_entity_velocity_packet::ClientboundEntityVelocityPacket, + 0x53: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, + 0x54: clientbound_set_experience_packet::ClientboundSetExperiencePacket, + 0x55: clientbound_set_health_packet::ClientboundSetHealthPacket, + 0x5c: clientbound_set_time_packet::ClientboundSetTimePacket, + 0x60: clientbound_sound_packet::ClientboundSoundPacket, + 0x62: clientbound_system_chat_packet::ClientboundSystemChatPacket, + 0x66: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, + 0x67: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, + 0x68: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, + 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/mod.rs b/azalea-protocol/src/packets/mod.rs index 819e31a7..64a5b3b3 100644 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -7,7 +7,7 @@ use crate::connect::PacketFlow; use azalea_buf::{McBufWritable, Readable, Writable}; use std::io::{Read, Write}; -pub const PROTOCOL_VERSION: u32 = 1073741920; +pub const PROTOCOL_VERSION: u32 = 1073741921; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol {