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 {