From 9c0b6f6631f861cb1582c6bba41d2931ee26bf16 Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 16 Jun 2022 20:59:19 -0500 Subject: [PATCH 01/17] 22w24a & update packets when they're modified --- README.md | 2 +- azalea-protocol/src/packets/mod.rs | 2 +- codegen/lib/download.py | 2 +- codegen/migrate.py | 24 ++++++++++++++++-------- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e57b4728..4d564270 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A Rust crate for creating Minecraft bots.

-*Currently supported Minecraft version: `1.19`.* +*Currently supported Minecraft version: `22w24a`.* 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-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 1cc79b79..8425b0e9 100755 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -12,7 +12,7 @@ use crate::{ use num_derive::FromPrimitive; use num_traits::FromPrimitive; -pub const PROTOCOL_VERSION: u32 = 759; +pub const PROTOCOL_VERSION: u32 = 1073741916; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, FromPrimitive)] pub enum ConnectionProtocol { diff --git a/codegen/lib/download.py b/codegen/lib/download.py index 7d14a3a3..58074634 100644 --- a/codegen/lib/download.py +++ b/codegen/lib/download.py @@ -23,7 +23,7 @@ def get_version_manifest(): print( f'\033[92mDownloading version manifest...\033[m') version_manifest_data = requests.get( - 'https://launchermeta.mojang.com/mc/game/version_manifest.json').json() + 'https://piston-meta.mojang.com/mc/game/version_manifest.json').json() with open(f'downloads/version_manifest.json', 'w') as f: json.dump(version_manifest_data, f) else: diff --git a/codegen/migrate.py b/codegen/migrate.py index 98b701bf..95a6ac4d 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -19,18 +19,24 @@ new_packet_list = list(new_burger_data[0]['packets']['packet'].values()) old_packets: dict[PacketIdentifier, str] = {} +old_packets_data: dict[PacketIdentifier, dict] = {} new_packets: dict[PacketIdentifier, str] = {} +new_packets_data: dict[PacketIdentifier, dict] = {} for packet in old_packet_list: assert packet['class'].endswith('.class') packet_name = old_mappings.get_class(packet['class'][:-6]) - old_packets[PacketIdentifier( - packet['id'], packet['direction'].lower(), fix_state(packet['state']))] = packet_name + packet_ident = PacketIdentifier( + packet['id'], packet['direction'].lower(), fix_state(packet['state'])) + old_packets[packet_ident] = packet_name + old_packets_data[packet_ident] = packet for packet in new_packet_list: assert packet['class'].endswith('.class') packet_name = new_mappings.get_class(packet['class'][:-6]) - new_packets[PacketIdentifier( - packet['id'], packet['direction'].lower(), fix_state(packet['state']))] = packet_name + packet_ident = PacketIdentifier( + packet['id'], packet['direction'].lower(), fix_state(packet['state'])) + new_packets[packet_ident] = packet_name + new_packets_data[packet_ident] = packet # find removed packets removed_packets: list[PacketIdentifier] = [] @@ -63,13 +69,15 @@ for (direction, state), packets in group_packets(list(changed_packets.keys())).i print() -# find added packets -added_packets: list[PacketIdentifier] = [] +# find added/changed packets +added_or_changed_packets: list[PacketIdentifier] = [] for packet, packet_name in new_packets.items(): if packet_name not in old_packets.values(): - added_packets.append(packet) + added_or_changed_packets.append(packet) print('Added packet:', packet, packet_name) -for packet in added_packets: + if new_packets_data[packet].get('instructions') != old_packets_data[packet].get('instructions'): + print('hmm') +for packet in added_or_changed_packets: lib.code.packet.generate_packet( new_burger_data[0]['packets']['packet'], new_mappings, packet.packet_id, packet.direction, packet.state) From 392c553d5688f3d5ad19c4a861c0239c914e3578 Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 21 Jun 2022 19:48:01 -0500 Subject: [PATCH 02/17] Force the generator mod to support snapshots --- codegen/lib/download.py | 25 ++++++++++++++++++++++++- codegen/lib/extract.py | 14 ++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/codegen/lib/download.py b/codegen/lib/download.py index e9712f8d..db21145c 100644 --- a/codegen/lib/download.py +++ b/codegen/lib/download.py @@ -1,4 +1,5 @@ from lib.utils import get_dir_location +import xml.etree.ElementTree as ET from .mappings import Mappings import requests import json @@ -118,11 +119,33 @@ def get_yarn_data(version_id: str): return version +def get_fabric_api_versions(): + # https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api/maven-metadata.xml + if not os.path.exists(get_dir_location('downloads/fabric_api_versions.json')): + print('\033[92mDownloading Fabric API versions...\033[m') + fabric_api_versions_xml_text = requests.get( + 'https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api/maven-metadata.xml').text + # parse xml + fabric_api_versions_data_xml = ET.fromstring( + fabric_api_versions_xml_text) + fabric_api_versions = [] + for version_el in fabric_api_versions_data_xml.find('versioning').find('versions').findall('version'): + fabric_api_versions.append(version_el.text) + + with open(get_dir_location('downloads/fabric_api_versions.json'), 'w') as f: + f.write(json.dumps(fabric_api_versions)) + else: + with open(get_dir_location('downloads/fabric_api_versions.json'), 'r') as f: + fabric_api_versions = json.loads(f.read()) + return fabric_api_versions + + def clear_version_cache(): print('\033[92mClearing version cache...\033[m') files = [ 'version_manifest.json', - 'yarn_versions.json' + 'yarn_versions.json', + 'fabric_api_versions.json' ] for file in files: if os.path.exists(get_dir_location(f'downloads/{file}')): diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py index 893b8d5c..4c2d2399 100644 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -1,6 +1,6 @@ # Extracting data from the Minecraft jars -from lib.download import get_server_jar, get_burger, get_client_jar, get_generator_mod, get_yarn_data +from lib.download import get_server_jar, get_burger, get_client_jar, get_generator_mod, get_yarn_data, get_fabric_api_versions from lib.utils import get_dir_location import json import os @@ -61,7 +61,9 @@ def get_generator_mod_data(version_id: str, category: str): # looks like 1.19+build.1 yarn_version = yarn_data['version'] - # the mod has the minecraft version hard-coded by default, so we just change the gradle.properties + fabric_api_version = get_fabric_api_versions()[-1] + + # the mod has the minecraft version hard-coded by default, so we just change the gradle.properties and fabric.mod.json with open(get_dir_location(f'{generator_mod_dir}/gradle.properties'), 'r') as f: lines = f.readlines() with open(get_dir_location(f'{generator_mod_dir}/gradle.properties'), 'w') as f: @@ -70,7 +72,15 @@ def get_generator_mod_data(version_id: str, category: str): line = f'minecraft_version={version_id}\n' if line.startswith('yarn_mappings='): line = f'yarn_mappings={yarn_version}\n' + if line.startswith('fabric_version='): + line = f'fabric_version={fabric_api_version}\n' f.write(line) + # edit the fabric.mod.json to support this version + with open(get_dir_location(f'{generator_mod_dir}/src/main/resources/fabric.mod.json'), 'r') as f: + fabric_mod_json = json.load(f) + fabric_mod_json['depends']['minecraft'] = '*' + with open(get_dir_location(f'{generator_mod_dir}/src/main/resources/fabric.mod.json'), 'w') as f: + json.dump(fabric_mod_json, f, indent=2) os.system( f'cd {generator_mod_dir} && gradlew runServer' From deef5d27c08daa709e5ebebc382aadff7450fca6 Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 21 Jun 2022 19:57:18 -0500 Subject: [PATCH 03/17] Update to 1.19.1-pre1 --- README.md | 2 +- azalea-protocol/src/packets/mod.rs | 2 +- codegen/lib/code/version.py | 6 +++--- codegen/lib/download.py | 8 +++++++- codegen/migrate.py | 8 ++++++++ 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0bccbc6e..aea4de20 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: `22w24a`.* +*Currently supported Minecraft version: `1.19.1-pre1`.* 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-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 8425b0e9..0dd79a47 100755 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -12,7 +12,7 @@ use crate::{ use num_derive::FromPrimitive; use num_traits::FromPrimitive; -pub const PROTOCOL_VERSION: u32 = 1073741916; +pub const PROTOCOL_VERSION: u32 = 1073741917; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, FromPrimitive)] pub enum ConnectionProtocol { diff --git a/codegen/lib/code/version.py b/codegen/lib/code/version.py index 511d30d1..13d9472d 100644 --- a/codegen/lib/code/version.py +++ b/codegen/lib/code/version.py @@ -36,7 +36,7 @@ def set_version_id(version_id: str) -> None: def get_protocol_version() -> str: # azalea-protocol/src/packets/mod.rs # pub const PROTOCOL_VERSION: u32 = 758; - with open('../azalea-protocol/src/packets/mod.rs', 'r') as f: + with open(get_dir_location('../azalea-protocol/src/packets/mod.rs'), 'r') as f: mod_rs = f.read().splitlines() for line in mod_rs: if line.strip().startswith('pub const PROTOCOL_VERSION'): @@ -46,7 +46,7 @@ def get_protocol_version() -> str: def set_protocol_version(protocol_version: str) -> None: - with open('../azalea-protocol/src/packets/mod.rs', 'r') as f: + with open(get_dir_location('../azalea-protocol/src/packets/mod.rs'), 'r') as f: mod_rs = f.read().splitlines() for i, line in enumerate(mod_rs): if line.strip().startswith('pub const PROTOCOL_VERSION'): @@ -56,5 +56,5 @@ def set_protocol_version(protocol_version: str) -> None: raise Exception( 'Could not find protocol version in azalea-protocol/src/packets/mod.rs') - with open('../azalea-protocol/src/packets/mod.rs', 'w') as f: + with open(get_dir_location('../azalea-protocol/src/packets/mod.rs'), 'w') as f: f.write('\n'.join(mod_rs)) diff --git a/codegen/lib/download.py b/codegen/lib/download.py index db21145c..d9e2e63f 100644 --- a/codegen/lib/download.py +++ b/codegen/lib/download.py @@ -129,7 +129,13 @@ def get_fabric_api_versions(): fabric_api_versions_data_xml = ET.fromstring( fabric_api_versions_xml_text) fabric_api_versions = [] - for version_el in fabric_api_versions_data_xml.find('versioning').find('versions').findall('version'): + + versioning_el = fabric_api_versions_data_xml.find('versioning') + assert versioning_el + versions_el = versioning_el.find('versions') + assert versions_el + + for version_el in versions_el.findall('version'): fabric_api_versions.append(version_el.text) with open(get_dir_location('downloads/fabric_api_versions.json'), 'w') as f: diff --git a/codegen/migrate.py b/codegen/migrate.py index 62924bb9..fa7b01a6 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -9,6 +9,14 @@ import sys lib.download.clear_version_cache() +if len(sys.argv) == 1: + print('\033[91mYou must provide a version to migrate to.\033[m') + version_manifest = lib.download.get_version_manifest() + newest_version = version_manifest['latest']['snapshot'] + print(f'Hint: newest version is \033[1m{newest_version}\033[m') + exit() + + old_version_id = lib.code.version.get_version_id() old_mappings = lib.download.get_mappings_for_version(old_version_id) old_burger_data = lib.extract.get_burger_data_for_version(old_version_id) From e44afb76f4d89ecd3763db83338268b9d9360a0c Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 23 Jun 2022 21:34:10 -0500 Subject: [PATCH 04/17] 1.19.1-rc1 --- README.md | 2 +- azalea-protocol/src/packets/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aea4de20..b228d4ec 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-pre1`.* +*Currently supported Minecraft version: `1.19.1-rc1`.* 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-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 0dd79a47..a8915290 100755 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -12,7 +12,7 @@ use crate::{ use num_derive::FromPrimitive; use num_traits::FromPrimitive; -pub const PROTOCOL_VERSION: u32 = 1073741917; +pub const PROTOCOL_VERSION: u32 = 1073741918; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, FromPrimitive)] pub enum ConnectionProtocol { From 8755f18c2b0c11a51a81f60b5501d9d57d0c370e Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 23 Jun 2022 21:54:38 -0500 Subject: [PATCH 05/17] Correctly detect updated packets --- codegen/lib/code/packet.py | 25 +++++++++++++++++++++++++ codegen/lib/code/utils.py | 3 +-- codegen/migrate.py | 5 +++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 2aabf39a..7849b0b3 100644 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -245,3 +245,28 @@ def remove_packet_ids(removing_packet_ids: list[int], direction: str, state: str new_packet_class_names.append(packet_class_name) set_packets(new_packet_ids, new_packet_class_names, direction, state) + + +def are_packet_instructions_identical(old_packet, new_packet): + old_packet = old_packet or [] + new_packet = new_packet or [] + + if len(old_packet) != len(new_packet): + return False + + for old_field, new_field in zip(old_packet, new_packet): + if old_field['operation'] != new_field['operation']: + return False + if new_field['operation'] == 'write': + if burger_type_to_rust_type(old_field.get('type')) != burger_type_to_rust_type(new_field.get('type')): + return False + else: + # comparing is too complicated here since it's possible the type has variables + # so we just don't + pass + + if 'instructions' in old_field and 'instructions' in new_field: + if not are_packet_instructions_identical(old_field['instructions'], new_field['instructions']): + return False + + return True diff --git a/codegen/lib/code/utils.py b/codegen/lib/code/utils.py index ecfff4fb..0c22d7ba 100644 --- a/codegen/lib/code/utils.py +++ b/codegen/lib/code/utils.py @@ -62,8 +62,7 @@ def burger_type_to_rust_type(burger_type): burger_type[:-2]) field_type_rs = f'Vec<{field_type_rs}>' else: - print('Unknown field type:', burger_type) - exit() + raise Exception(f'Unknown field type: {burger_type}') return field_type_rs, is_var, uses diff --git a/codegen/migrate.py b/codegen/migrate.py index fa7b01a6..fad546e9 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -85,8 +85,9 @@ for packet, packet_name in new_packets.items(): if packet_name not in old_packets.values(): added_or_changed_packets.append(packet) print('Added packet:', packet, packet_name) - if new_packets_data[packet].get('instructions') != old_packets_data[packet].get('instructions'): - print('hmm') + if not lib.code.packet.are_packet_instructions_identical(new_packets_data[packet].get('instructions'), old_packets_data[packet].get('instructions')): + added_or_changed_packets.append(packet) + print('Changed packet:', packet, packet_name) for packet in added_or_changed_packets: lib.code.packet.generate_packet( new_burger_data[0]['packets']['packet'], new_mappings, packet.packet_id, packet.direction, packet.state) From f9e42fa3d8ae96936fe8f38777128c983f3deea4 Mon Sep 17 00:00:00 2001 From: mat Date: Sat, 25 Jun 2022 15:04:21 -0500 Subject: [PATCH 06/17] Update craft_dig_straight_down.rs --- examples/craft_dig_straight_down.rs | 32 +++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/examples/craft_dig_straight_down.rs b/examples/craft_dig_straight_down.rs index 54bf0015..47c4fe28 100644 --- a/examples/craft_dig_straight_down.rs +++ b/examples/craft_dig_straight_down.rs @@ -1,15 +1,35 @@ use azalea::{Bot, Event}; -let bot = Bot::offline("bot"); -// or let bot = azalea::Bot::microsoft("access token").await; +struct Context { + pub started: bool +} -bot.join("localhost".try_into().unwrap()).await.unwrap(); +#[tokio::main] +async fn main() { + let bot = Bot::offline("bot"); + // or let bot = azalea::Bot::microsoft("access token").await; -loop { - match bot.next().await { + bot.join("localhost".try_into().unwrap()).await.unwrap(); + + let ctx = Arc::new(Mutex::new(Context { started: false })); + + loop { + tokio::spawn(handle_event(bot.next().await, bot, ctx.clone())); + } +} + + +async fn handle_event(event: &Event, bot: &Bot, ctx: Arc) { + match event { Event::Message(m) { if m.username == bot.player.username { return }; if m.message = "go" { + // make sure we only start once + let ctx_lock = ctx.lock().unwrap(); + if ctx_lock.started { return }; + ctx_lock.started = true; + drop(ctx_lock); + bot.goto_goal( pathfinder::Goals::NearXZ(5, azalea::BlockXZ(0, 0)) ).await; @@ -34,4 +54,4 @@ loop { }, _ => {} } -} +} \ No newline at end of file From 048792f83cae75d98f77eb7a699652e5a6f8f2f9 Mon Sep 17 00:00:00 2001 From: mat Date: Wed, 6 Jul 2022 18:52:24 -0500 Subject: [PATCH 07/17] Fix bugs with migration --- codegen/lib/code/packet.py | 6 ++++-- codegen/migrate.py | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 186f59e6..59632270 100644 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -110,7 +110,8 @@ def set_packets(packet_ids: list[int], packet_class_names: list[str], direction: packet_ids, packet_class_names = [list(x) for x in zip( *sorted(zip(packet_ids, packet_class_names), key=lambda pair: pair[0]))] # type: ignore - mod_rs_dir = f'../azalea-protocol/src/packets/{state}/mod.rs' + mod_rs_dir = get_dir_location( + f'../azalea-protocol/src/packets/{state}/mod.rs') with open(mod_rs_dir, 'r') as f: mod_rs = f.read().splitlines() new_mod_rs = [] @@ -164,7 +165,8 @@ def set_packets(packet_ids: list[int], packet_class_names: list[str], direction: def get_packets(direction: str, state: str): - mod_rs_dir = f'../azalea-protocol/src/packets/{state}/mod.rs' + mod_rs_dir = get_dir_location( + f'../azalea-protocol/src/packets/{state}/mod.rs') with open(mod_rs_dir, 'r') as f: mod_rs = f.read().splitlines() diff --git a/codegen/migrate.py b/codegen/migrate.py index fad546e9..2dacc208 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -81,13 +81,19 @@ print() # find added/changed packets added_or_changed_packets: list[PacketIdentifier] = [] -for packet, packet_name in new_packets.items(): +for new_packet, packet_name in new_packets.items(): + old_packet = None + for old_packet_tmp, old_packet_name in old_packets.items(): + if old_packet_name == packet_name: + old_packet = old_packet_tmp + break + if packet_name not in old_packets.values(): - added_or_changed_packets.append(packet) - print('Added packet:', packet, packet_name) - if not lib.code.packet.are_packet_instructions_identical(new_packets_data[packet].get('instructions'), old_packets_data[packet].get('instructions')): - added_or_changed_packets.append(packet) - print('Changed packet:', packet, packet_name) + added_or_changed_packets.append(new_packet) + print('Added packet:', new_packet, packet_name) + elif old_packet and not lib.code.packet.are_packet_instructions_identical(new_packets_data[new_packet].get('instructions'), old_packets_data[old_packet].get('instructions')): + added_or_changed_packets.append(new_packet) + print('Changed packet:', new_packet, packet_name) for packet in added_or_changed_packets: lib.code.packet.generate_packet( new_burger_data[0]['packets']['packet'], new_mappings, packet.packet_id, packet.direction, packet.state) From ae3ad007b67e205ee093daa44619acae0f7ccc88 Mon Sep 17 00:00:00 2001 From: mat Date: Wed, 6 Jul 2022 18:55:18 -0500 Subject: [PATCH 08/17] Update packets --- README.md | 2 +- ...entbound_custom_chat_completions_packet.rs | 15 ++ .../game/clientbound_system_chat_packet.rs | 3 +- azalea-protocol/src/packets/game/mod.rs | 140 ++++++------------ azalea-protocol/src/packets/mod.rs | 2 +- 5 files changed, 64 insertions(+), 98 deletions(-) create mode 100644 azalea-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs diff --git a/README.md b/README.md index b228d4ec..0f3c6849 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-rc1`.* +*Currently supported Minecraft version: `1.19.1-pre3`.* 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-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs b/azalea-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs new file mode 100644 index 00000000..94c90039 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs @@ -0,0 +1,15 @@ +use azalea_buf::McBuf; +use packet_macros::GamePacket; + +#[derive(Clone, Debug, McBuf, GamePacket)] +pub struct ClientboundCustomChatCompletionsPacket { + pub action: Action, + pub entries: Vec, +} + +#[derive(Clone, Debug, McBuf)] +pub enum Action { + Add = 0, + Remove = 1, + Set = 2, +} diff --git a/azalea-protocol/src/packets/game/clientbound_system_chat_packet.rs b/azalea-protocol/src/packets/game/clientbound_system_chat_packet.rs index c531fa1e..8318b7d4 100644 --- a/azalea-protocol/src/packets/game/clientbound_system_chat_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_system_chat_packet.rs @@ -5,6 +5,5 @@ use packet_macros::GamePacket; #[derive(Clone, Debug, McBuf, GamePacket)] pub struct ClientboundSystemChatPacket { pub content: Component, - #[var] - pub type_id: i32, + pub overlay: bool, } diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index f407a697..d8c5c3ec 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -1,55 +1,5 @@ -pub mod clientbound_add_entity_packet; -pub mod clientbound_add_player_packet; -pub mod clientbound_animate_packet; -pub mod clientbound_block_changed_ack_packet; -pub mod clientbound_block_update_packet; -pub mod clientbound_change_difficulty_packet; -pub mod clientbound_chat_preview_packet; -pub mod clientbound_container_set_content_packet; -pub mod clientbound_custom_payload_packet; -pub mod clientbound_declare_commands_packet; -pub mod clientbound_disconnect_packet; -pub mod clientbound_entity_event_packet; -pub mod clientbound_entity_velocity_packet; -pub mod clientbound_game_event_packet; -pub mod clientbound_initialize_border_packet; -pub mod clientbound_keep_alive_packet; -pub mod clientbound_level_chunk_with_light_packet; -pub mod clientbound_level_event_packet; -pub mod clientbound_level_particles_packet; -pub mod clientbound_light_update_packet; -pub mod clientbound_login_packet; -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_packet; -pub mod clientbound_player_info_packet; -pub mod clientbound_player_position_packet; -pub mod clientbound_recipe_packet; -pub mod clientbound_remove_entities_packet; -pub mod clientbound_rotate_head_packet; -pub mod clientbound_section_blocks_update_packet; -pub mod clientbound_server_data_packet; -pub mod clientbound_set_carried_item_packet; -pub mod clientbound_set_chunk_cache_center_packet; -pub mod clientbound_set_default_spawn_position_packet; -pub mod clientbound_set_display_chat_preview_packet; -pub mod clientbound_set_entity_data_packet; -pub mod clientbound_set_entity_link_packet; -pub mod clientbound_set_equipment_packet; -pub mod clientbound_set_experience_packet; -pub mod clientbound_set_health_packet; -pub mod clientbound_set_time_packet; -pub mod clientbound_sound_packet; +pub mod clientbound_custom_chat_completions_packet; pub mod clientbound_system_chat_packet; -pub mod clientbound_teleport_entity_packet; -pub mod clientbound_update_advancements_packet; -pub mod clientbound_update_attributes_packet; -pub mod clientbound_update_mob_effect_packet; -pub mod clientbound_update_recipes_packet; -pub mod clientbound_update_tags_packet; -pub mod clientbound_update_view_distance_packet; pub mod serverbound_accept_teleportation_packet; pub mod serverbound_chat_command_packet; pub mod serverbound_chat_preview_packet; @@ -85,48 +35,50 @@ declare_state_packets!( 0x0c: clientbound_chat_preview_packet::ClientboundChatPreviewPacket, 0x0f: clientbound_declare_commands_packet::ClientboundDeclareCommandsPacket, 0x11: clientbound_container_set_content_packet::ClientboundContainerSetContentPacket, - 0x15: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket, - 0x17: clientbound_disconnect_packet::ClientboundDisconnectPacket, - 0x18: clientbound_entity_event_packet::ClientboundEntityEventPacket, - 0x1b: clientbound_game_event_packet::ClientboundGameEventPacket, - 0x1d: clientbound_initialize_border_packet::ClientboundInitializeBorderPacket, - 0x1e: clientbound_keep_alive_packet::ClientboundKeepAlivePacket, - 0x1f: clientbound_level_chunk_with_light_packet::ClientboundLevelChunkWithLightPacket, - 0x20: clientbound_level_event_packet::ClientboundLevelEventPacket, - 0x21: clientbound_level_particles_packet::ClientboundLevelParticlesPacket, - 0x22: clientbound_light_update_packet::ClientboundLightUpdatePacket, - 0x23: clientbound_login_packet::ClientboundLoginPacket, - 0x26: clientbound_move_entity_pos_packet::ClientboundMoveEntityPosPacket, - 0x27: clientbound_move_entity_posrot_packet::ClientboundMoveEntityPosRotPacket, - 0x28: clientbound_move_entity_rot_packet::ClientboundMoveEntityRotPacket, - 0x2f: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket, - 0x30: clientbound_player_chat_packet::ClientboundPlayerChatPacket, - 0x34: clientbound_player_info_packet::ClientboundPlayerInfoPacket, - 0x36: clientbound_player_position_packet::ClientboundPlayerPositionPacket, - 0x37: clientbound_recipe_packet::ClientboundRecipePacket, - 0x38: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket, - 0x3c: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, - 0x3d: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket, - 0x3f: clientbound_server_data_packet::ClientboundServerDataPacket, - 0x47: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, - 0x48: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket, - 0x49: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, - 0x4a: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, - 0x4b: clientbound_set_display_chat_preview_packet::ClientboundSetDisplayChatPreviewPacket, - 0x4d: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, - 0x4e: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, - 0x4f: clientbound_entity_velocity_packet::ClientboundEntityVelocityPacket, - 0x50: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, - 0x51: clientbound_set_experience_packet::ClientboundSetExperiencePacket, - 0x52: clientbound_set_health_packet::ClientboundSetHealthPacket, - 0x59: clientbound_set_time_packet::ClientboundSetTimePacket, - 0x5d: clientbound_sound_packet::ClientboundSoundPacket, - 0x5f: clientbound_system_chat_packet::ClientboundSystemChatPacket, - 0x63: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, - 0x64: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, - 0x65: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, - 0x66: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket, - 0x67: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket, - 0x68: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, + 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, + 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, } ); diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 499b0062..2233b39d 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 = 1073741918; +pub const PROTOCOL_VERSION: u32 = 1073741920; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { From cb8005be6500890f14b5d002f1242493a0653747 Mon Sep 17 00:00:00 2001 From: mat Date: Wed, 6 Jul 2022 19:04:38 -0500 Subject: [PATCH 09/17] Fix the mod.rs --- azalea-protocol/src/packets/game/mod.rs | 140 ++++++++++++++++-------- codegen/lib/code/packet.py | 1 + 2 files changed, 95 insertions(+), 46 deletions(-) diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index d8c5c3ec..f407a697 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -1,5 +1,55 @@ -pub mod clientbound_custom_chat_completions_packet; +pub mod clientbound_add_entity_packet; +pub mod clientbound_add_player_packet; +pub mod clientbound_animate_packet; +pub mod clientbound_block_changed_ack_packet; +pub mod clientbound_block_update_packet; +pub mod clientbound_change_difficulty_packet; +pub mod clientbound_chat_preview_packet; +pub mod clientbound_container_set_content_packet; +pub mod clientbound_custom_payload_packet; +pub mod clientbound_declare_commands_packet; +pub mod clientbound_disconnect_packet; +pub mod clientbound_entity_event_packet; +pub mod clientbound_entity_velocity_packet; +pub mod clientbound_game_event_packet; +pub mod clientbound_initialize_border_packet; +pub mod clientbound_keep_alive_packet; +pub mod clientbound_level_chunk_with_light_packet; +pub mod clientbound_level_event_packet; +pub mod clientbound_level_particles_packet; +pub mod clientbound_light_update_packet; +pub mod clientbound_login_packet; +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_packet; +pub mod clientbound_player_info_packet; +pub mod clientbound_player_position_packet; +pub mod clientbound_recipe_packet; +pub mod clientbound_remove_entities_packet; +pub mod clientbound_rotate_head_packet; +pub mod clientbound_section_blocks_update_packet; +pub mod clientbound_server_data_packet; +pub mod clientbound_set_carried_item_packet; +pub mod clientbound_set_chunk_cache_center_packet; +pub mod clientbound_set_default_spawn_position_packet; +pub mod clientbound_set_display_chat_preview_packet; +pub mod clientbound_set_entity_data_packet; +pub mod clientbound_set_entity_link_packet; +pub mod clientbound_set_equipment_packet; +pub mod clientbound_set_experience_packet; +pub mod clientbound_set_health_packet; +pub mod clientbound_set_time_packet; +pub mod clientbound_sound_packet; pub mod clientbound_system_chat_packet; +pub mod clientbound_teleport_entity_packet; +pub mod clientbound_update_advancements_packet; +pub mod clientbound_update_attributes_packet; +pub mod clientbound_update_mob_effect_packet; +pub mod clientbound_update_recipes_packet; +pub mod clientbound_update_tags_packet; +pub mod clientbound_update_view_distance_packet; pub mod serverbound_accept_teleportation_packet; pub mod serverbound_chat_command_packet; pub mod serverbound_chat_preview_packet; @@ -35,50 +85,48 @@ declare_state_packets!( 0x0c: clientbound_chat_preview_packet::ClientboundChatPreviewPacket, 0x0f: clientbound_declare_commands_packet::ClientboundDeclareCommandsPacket, 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, - 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, + 0x15: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket, + 0x17: clientbound_disconnect_packet::ClientboundDisconnectPacket, + 0x18: clientbound_entity_event_packet::ClientboundEntityEventPacket, + 0x1b: clientbound_game_event_packet::ClientboundGameEventPacket, + 0x1d: clientbound_initialize_border_packet::ClientboundInitializeBorderPacket, + 0x1e: clientbound_keep_alive_packet::ClientboundKeepAlivePacket, + 0x1f: clientbound_level_chunk_with_light_packet::ClientboundLevelChunkWithLightPacket, + 0x20: clientbound_level_event_packet::ClientboundLevelEventPacket, + 0x21: clientbound_level_particles_packet::ClientboundLevelParticlesPacket, + 0x22: clientbound_light_update_packet::ClientboundLightUpdatePacket, + 0x23: clientbound_login_packet::ClientboundLoginPacket, + 0x26: clientbound_move_entity_pos_packet::ClientboundMoveEntityPosPacket, + 0x27: clientbound_move_entity_posrot_packet::ClientboundMoveEntityPosRotPacket, + 0x28: clientbound_move_entity_rot_packet::ClientboundMoveEntityRotPacket, + 0x2f: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket, + 0x30: clientbound_player_chat_packet::ClientboundPlayerChatPacket, + 0x34: clientbound_player_info_packet::ClientboundPlayerInfoPacket, + 0x36: clientbound_player_position_packet::ClientboundPlayerPositionPacket, + 0x37: clientbound_recipe_packet::ClientboundRecipePacket, + 0x38: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket, + 0x3c: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, + 0x3d: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket, + 0x3f: clientbound_server_data_packet::ClientboundServerDataPacket, + 0x47: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, + 0x48: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket, + 0x49: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, + 0x4a: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, + 0x4b: clientbound_set_display_chat_preview_packet::ClientboundSetDisplayChatPreviewPacket, + 0x4d: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, + 0x4e: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, + 0x4f: clientbound_entity_velocity_packet::ClientboundEntityVelocityPacket, + 0x50: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, + 0x51: clientbound_set_experience_packet::ClientboundSetExperiencePacket, + 0x52: clientbound_set_health_packet::ClientboundSetHealthPacket, + 0x59: clientbound_set_time_packet::ClientboundSetTimePacket, + 0x5d: clientbound_sound_packet::ClientboundSoundPacket, + 0x5f: clientbound_system_chat_packet::ClientboundSystemChatPacket, + 0x63: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, + 0x64: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, + 0x65: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, + 0x66: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket, + 0x67: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket, + 0x68: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, } ); diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 59632270..ffa7841c 100644 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -141,6 +141,7 @@ def set_packets(packet_ids: list[int], packet_class_names: list[str], direction: new_mod_rs.append( make_packet_mod_rs_line(packet_id, packet_class_name) ) + required_modules.append(packet_class_name) else: ignore_lines = False continue From 2d7056b3d45ae1b0317b6bcb42e2444dedd72bf4 Mon Sep 17 00:00:00 2001 From: mat Date: Wed, 6 Jul 2022 19:08:19 -0500 Subject: [PATCH 10/17] Update mod.rs --- azalea-protocol/src/packets/game/mod.rs | 88 +++++++++++++------------ 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index f407a697..8009b0fe 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -6,6 +6,7 @@ pub mod clientbound_block_update_packet; pub mod clientbound_change_difficulty_packet; pub mod clientbound_chat_preview_packet; 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_disconnect_packet; @@ -85,48 +86,49 @@ declare_state_packets!( 0x0c: clientbound_chat_preview_packet::ClientboundChatPreviewPacket, 0x0f: clientbound_declare_commands_packet::ClientboundDeclareCommandsPacket, 0x11: clientbound_container_set_content_packet::ClientboundContainerSetContentPacket, - 0x15: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket, - 0x17: clientbound_disconnect_packet::ClientboundDisconnectPacket, - 0x18: clientbound_entity_event_packet::ClientboundEntityEventPacket, - 0x1b: clientbound_game_event_packet::ClientboundGameEventPacket, - 0x1d: clientbound_initialize_border_packet::ClientboundInitializeBorderPacket, - 0x1e: clientbound_keep_alive_packet::ClientboundKeepAlivePacket, - 0x1f: clientbound_level_chunk_with_light_packet::ClientboundLevelChunkWithLightPacket, - 0x20: clientbound_level_event_packet::ClientboundLevelEventPacket, - 0x21: clientbound_level_particles_packet::ClientboundLevelParticlesPacket, - 0x22: clientbound_light_update_packet::ClientboundLightUpdatePacket, - 0x23: clientbound_login_packet::ClientboundLoginPacket, - 0x26: clientbound_move_entity_pos_packet::ClientboundMoveEntityPosPacket, - 0x27: clientbound_move_entity_posrot_packet::ClientboundMoveEntityPosRotPacket, - 0x28: clientbound_move_entity_rot_packet::ClientboundMoveEntityRotPacket, - 0x2f: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket, - 0x30: clientbound_player_chat_packet::ClientboundPlayerChatPacket, - 0x34: clientbound_player_info_packet::ClientboundPlayerInfoPacket, - 0x36: clientbound_player_position_packet::ClientboundPlayerPositionPacket, - 0x37: clientbound_recipe_packet::ClientboundRecipePacket, - 0x38: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket, - 0x3c: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, - 0x3d: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket, - 0x3f: clientbound_server_data_packet::ClientboundServerDataPacket, - 0x47: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, - 0x48: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket, - 0x49: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, - 0x4a: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, - 0x4b: clientbound_set_display_chat_preview_packet::ClientboundSetDisplayChatPreviewPacket, - 0x4d: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, - 0x4e: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, - 0x4f: clientbound_entity_velocity_packet::ClientboundEntityVelocityPacket, - 0x50: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, - 0x51: clientbound_set_experience_packet::ClientboundSetExperiencePacket, - 0x52: clientbound_set_health_packet::ClientboundSetHealthPacket, - 0x59: clientbound_set_time_packet::ClientboundSetTimePacket, - 0x5d: clientbound_sound_packet::ClientboundSoundPacket, - 0x5f: clientbound_system_chat_packet::ClientboundSystemChatPacket, - 0x63: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, - 0x64: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, - 0x65: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, - 0x66: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket, - 0x67: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket, - 0x68: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, + 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, } ); From 017651358d8aeefdadc0f3973f1fe4f394e9b14d Mon Sep 17 00:00:00 2001 From: mat Date: Wed, 6 Jul 2022 19:15:33 -0500 Subject: [PATCH 11/17] It compiles --- azalea-client/src/client.rs | 2 +- .../packets/game/clientbound_custom_chat_completions_packet.rs | 2 +- .../src/packets/game/clientbound_move_entity_posrot_packet.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/azalea-client/src/client.rs b/azalea-client/src/client.rs index 2bc73551..8b586b0c 100644 --- a/azalea-client/src/client.rs +++ b/azalea-client/src/client.rs @@ -545,7 +545,7 @@ impl Client { world.move_entity_with_delta(p.entity_id, &p.delta)?; } - GamePacket::ClientboundMoveEntityPosRotPacket(p) => { + GamePacket::ClientboundMoveEntityPosrotPacket(p) => { let mut state_lock = state.lock()?; let world = state_lock.world.as_mut().unwrap(); diff --git a/azalea-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs b/azalea-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs index 94c90039..06a641f1 100644 --- a/azalea-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_custom_chat_completions_packet.rs @@ -7,7 +7,7 @@ pub struct ClientboundCustomChatCompletionsPacket { pub entries: Vec, } -#[derive(Clone, Debug, McBuf)] +#[derive(Clone, Debug, McBuf, Copy)] pub enum Action { Add = 0, Remove = 1, diff --git a/azalea-protocol/src/packets/game/clientbound_move_entity_posrot_packet.rs b/azalea-protocol/src/packets/game/clientbound_move_entity_posrot_packet.rs index e3422ac0..3dbfaff6 100644 --- a/azalea-protocol/src/packets/game/clientbound_move_entity_posrot_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_move_entity_posrot_packet.rs @@ -4,7 +4,7 @@ use packet_macros::GamePacket; /// This packet is sent by the server when an entity moves less then 8 blocks. #[derive(Clone, Debug, McBuf, GamePacket)] -pub struct ClientboundMoveEntityPosRotPacket { +pub struct ClientboundMoveEntityPosrotPacket { #[var] pub entity_id: u32, pub delta: PositionDelta8, From 27edd4f578e7b64fdaacefa26f691e2148707a8c Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 7 Jul 2022 00:57:50 -0500 Subject: [PATCH 12/17] Update ServerboundHelloPacket PR made in burger --- azalea-protocol/src/packets/login/serverbound_hello_packet.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azalea-protocol/src/packets/login/serverbound_hello_packet.rs b/azalea-protocol/src/packets/login/serverbound_hello_packet.rs index 57a3e4d8..0f6f9a50 100755 --- a/azalea-protocol/src/packets/login/serverbound_hello_packet.rs +++ b/azalea-protocol/src/packets/login/serverbound_hello_packet.rs @@ -1,10 +1,12 @@ use azalea_buf::McBuf; use packet_macros::LoginPacket; +use uuid::Uuid; #[derive(Clone, Debug, McBuf, LoginPacket)] pub struct ServerboundHelloPacket { pub username: String, pub public_key: Option, + pub profile_id: Option, } #[derive(Clone, Debug, McBuf)] From 5e3a6066f87b1a03e0303b41cee82103a709b02a Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 7 Jul 2022 01:17:20 -0500 Subject: [PATCH 13/17] Fix error --- azalea-client/src/client.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/azalea-client/src/client.rs b/azalea-client/src/client.rs index 11c2bb75..b904fa92 100644 --- a/azalea-client/src/client.rs +++ b/azalea-client/src/client.rs @@ -100,6 +100,7 @@ impl Client { ServerboundHelloPacket { username: account.username.clone(), public_key: None, + profile_id: None, } .get(), ) From ec0b6ec06c1607d7bfc9df2fca220f59c700e07b Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 10 Jul 2022 23:43:09 -0500 Subject: [PATCH 14/17] 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 { From c0ca03204f1c507d15ccb2699b69d08bd160139f Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 21 Jul 2022 20:04:33 -0500 Subject: [PATCH 15/17] 1.19.1-rc2 --- README.md | 2 +- azalea-crypto/src/signing.rs | 2 +- .../game/clientbound_player_chat_packet.rs | 22 +++++++++++++---- .../game/clientbound_server_data_packet.rs | 2 +- azalea-protocol/src/packets/game/mod.rs | 24 +++++++++++-------- .../game/serverbound_chat_ack_packet.rs | 8 +++++++ .../game/serverbound_chat_command_packet.rs | 15 +++++++----- .../packets/game/serverbound_chat_packet.rs | 14 +++++++++++ azalea-protocol/src/packets/mod.rs | 2 +- 9 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs create mode 100644 azalea-protocol/src/packets/game/serverbound_chat_packet.rs diff --git a/README.md b/README.md index fd65b1ec..c307bd77 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-pre4`.* +*Currently supported Minecraft version: `1.19.1-rc2`.* 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-crypto/src/signing.rs b/azalea-crypto/src/signing.rs index 99c7b3d7..3bad08c9 100644 --- a/azalea-crypto/src/signing.rs +++ b/azalea-crypto/src/signing.rs @@ -15,5 +15,5 @@ pub struct MessageSignature { #[derive(Clone, Debug, McBuf)] pub struct SignedMessageHeader { pub previous_signature: Option, - pub uuid: Uuid, + pub sender: Uuid, } 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 f5df8869..1b71ccea 100644 --- a/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs @@ -17,7 +17,8 @@ pub enum ChatType { MsgCommandIncoming = 2, MsgCommandOutgoing = 3, TeamMsgCommandIncoming = 4, - EmoteCommand = 5, + TeamMsgCommandOutgoing = 5, + EmoteCommand = 6, } #[derive(Clone, Debug, McBuf)] @@ -37,14 +38,27 @@ pub struct PlayerChatMessage { #[derive(Clone, Debug, McBuf)] pub struct SignedMessageBody { - pub content: Component, + pub content: ChatMessageContent, pub timestamp: u64, pub salt: u64, - pub last_seen: Vec, + pub last_seen: Vec, } #[derive(Clone, Debug, McBuf)] -pub struct LastSeen { +pub struct LastSeenMessagesEntry { pub profile_id: Uuid, pub last_signature: MessageSignature, } + +#[derive(Clone, Debug, McBuf)] +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, +} 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 1dddfc1e..2bfa00bd 100644 --- a/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs @@ -1,5 +1,4 @@ use azalea_buf::McBuf; -use azalea_chat::component::Component; use packet_macros::GamePacket; #[derive(Clone, Debug, McBuf, GamePacket)] @@ -7,4 +6,5 @@ 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/mod.rs b/azalea-protocol/src/packets/game/mod.rs index c9d632e2..0b5c4d3e 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -54,7 +54,9 @@ pub mod clientbound_update_recipes_packet; pub mod clientbound_update_tags_packet; pub mod clientbound_update_view_distance_packet; pub mod serverbound_accept_teleportation_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_custom_payload_packet; pub mod serverbound_keep_alive_packet; @@ -69,14 +71,16 @@ declare_state_packets!( GamePacket, Serverbound => { 0x00: serverbound_accept_teleportation_packet::ServerboundAcceptTeleportationPacket, - 0x03: serverbound_chat_command_packet::ServerboundChatCommandPacket, - 0x05: serverbound_chat_preview_packet::ServerboundChatPreviewPacket, - 0x0c: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket, - 0x11: serverbound_keep_alive_packet::ServerboundKeepAlivePacket, - 0x13: serverbound_move_player_packet_pos::ServerboundMovePlayerPacketPos, - 0x14: serverbound_move_player_packet_pos_rot::ServerboundMovePlayerPacketPosRot, - 0x15: serverbound_move_player_packet_rot::ServerboundMovePlayerPacketRot, - 0x16: serverbound_move_player_packet_status_only::ServerboundMovePlayerPacketStatusOnly, + 0x03: serverbound_chat_ack_packet::ServerboundChatAckPacket, + 0x04: serverbound_chat_command_packet::ServerboundChatCommandPacket, + 0x05: serverbound_chat_packet::ServerboundChatPacket, + 0x06: serverbound_chat_preview_packet::ServerboundChatPreviewPacket, + 0x0d: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket, + 0x12: serverbound_keep_alive_packet::ServerboundKeepAlivePacket, + 0x14: serverbound_move_player_packet_pos::ServerboundMovePlayerPacketPos, + 0x15: serverbound_move_player_packet_pos_rot::ServerboundMovePlayerPacketPosRot, + 0x16: serverbound_move_player_packet_rot::ServerboundMovePlayerPacketRot, + 0x17: serverbound_move_player_packet_status_only::ServerboundMovePlayerPacketStatusOnly, }, Clientbound => { 0x00: clientbound_add_entity_packet::ClientboundAddEntityPacket, @@ -105,8 +109,8 @@ declare_state_packets!( 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, + 0x32: clientbound_player_chat_header_packet::ClientboundPlayerChatHeaderPacket, + 0x33: clientbound_player_chat_packet::ClientboundPlayerChatPacket, 0x37: clientbound_player_info_packet::ClientboundPlayerInfoPacket, 0x39: clientbound_player_position_packet::ClientboundPlayerPositionPacket, 0x3a: clientbound_recipe_packet::ClientboundRecipePacket, diff --git a/azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs b/azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs new file mode 100644 index 00000000..759373e9 --- /dev/null +++ b/azalea-protocol/src/packets/game/serverbound_chat_ack_packet.rs @@ -0,0 +1,8 @@ +use crate::packets::game::clientbound_player_chat_packet::LastSeenUpdate; +use azalea_buf::McBuf; +use packet_macros::GamePacket; + +#[derive(Clone, Debug, McBuf, GamePacket)] +pub struct ServerboundChatAckPacket { + pub last_seen_messages: LastSeenUpdate, +} 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 6371463b..1639deae 100644 --- a/azalea-protocol/src/packets/game/serverbound_chat_command_packet.rs +++ b/azalea-protocol/src/packets/game/serverbound_chat_command_packet.rs @@ -1,19 +1,22 @@ -use std::collections::HashMap; - use azalea_buf::McBuf; +use azalea_crypto::MessageSignature; use packet_macros::GamePacket; +use super::clientbound_player_chat_packet::LastSeenMessagesUpdate; + #[derive(Clone, Debug, McBuf, GamePacket)] pub struct ServerboundChatCommandPacket { pub command: String, // TODO: Choose a real timestamp type pub timestamp: u64, - pub argument_signatures: ArgumentSignatures, + pub salt: i64, + pub argument_signatures: Vec, pub signed_preview: bool, + pub last_seen_messages: LastSeenMessagesUpdate, } #[derive(Clone, Debug, McBuf)] -pub struct ArgumentSignatures { - pub salt: u64, - pub signatures: HashMap>, +pub struct ArgumentSignature { + pub name: String, + pub signature: MessageSignature, } diff --git a/azalea-protocol/src/packets/game/serverbound_chat_packet.rs b/azalea-protocol/src/packets/game/serverbound_chat_packet.rs new file mode 100644 index 00000000..f0c99b14 --- /dev/null +++ b/azalea-protocol/src/packets/game/serverbound_chat_packet.rs @@ -0,0 +1,14 @@ +use crate::packets::game::clientbound_player_chat_packet::LastSeenMessagesUpdate; +use azalea_buf::McBuf; +use azalea_crypto::MessageSignature; +use packet_macros::GamePacket; + +#[derive(Clone, Debug, McBuf, GamePacket)] +pub struct ServerboundChatPacket { + pub message: String, + pub timestamp: u64, + pub salt: u64, + pub signature: MessageSignature, + pub signed_preview: bool, + pub last_seen_messages: LastSeenMessagesUpdate, +} diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 64a5b3b3..2ea163af 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 = 1073741921; +pub const PROTOCOL_VERSION: u32 = 1073741924; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { From 3aa856b41325c3c184903aba8fb835557124131e Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 21 Jul 2022 21:10:20 -0500 Subject: [PATCH 16/17] fix wrong imports --- .../src/packets/game/clientbound_server_data_packet.rs | 1 + .../src/packets/game/serverbound_chat_ack_packet.rs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) 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 2bfa00bd..ed91733e 100644 --- a/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_server_data_packet.rs @@ -1,4 +1,5 @@ use azalea_buf::McBuf; +use azalea_chat::component::Component; use packet_macros::GamePacket; #[derive(Clone, Debug, McBuf, GamePacket)] 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 759373e9..921ca4c7 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::LastSeenUpdate; +use crate::packets::game::clientbound_player_chat_packet::LastSeenMessagesUpdate; use azalea_buf::McBuf; use packet_macros::GamePacket; #[derive(Clone, Debug, McBuf, GamePacket)] pub struct ServerboundChatAckPacket { - pub last_seen_messages: LastSeenUpdate, + pub last_seen_messages: LastSeenMessagesUpdate, } From 2211021105a7ce0ce9fcbc18f3b4f03b0f991a10 Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 28 Jul 2022 23:50:58 -0500 Subject: [PATCH 17/17] 1.19.1 --- README.md | 2 +- .../game/clientbound_player_chat_packet.rs | 39 ++++++++++++++++++- azalea-protocol/src/packets/mod.rs | 2 +- bot/src/main.rs | 2 +- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c307bd77..1fcc3097 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-rc2`.* +*Currently supported Minecraft version: `1.19.1`.* 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-protocol/src/packets/game/clientbound_player_chat_packet.rs b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs index 1b71ccea..68f0ea21 100644 --- a/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs @@ -1,7 +1,9 @@ -use azalea_buf::McBuf; +use azalea_buf::{BitSet, McBuf, McBufReadable, McBufVarWritable}; +use azalea_buf::{McBufVarReadable, McBufWritable}; use azalea_chat::component::Component; use azalea_crypto::{MessageSignature, SignedMessageHeader}; use packet_macros::GamePacket; +use std::io::{Read, Write}; use uuid::Uuid; #[derive(Clone, Debug, McBuf, GamePacket)] @@ -25,7 +27,7 @@ pub enum ChatType { pub struct ChatTypeBound { pub chat_type: ChatType, pub name: Component, - pub target_name: Component, + pub target_name: Option, } #[derive(Clone, Debug, McBuf)] @@ -34,6 +36,7 @@ pub struct PlayerChatMessage { pub header_signature: MessageSignature, pub signed_body: SignedMessageBody, pub unsigned_content: Option, + pub filter_mask: FilterMask, } #[derive(Clone, Debug, McBuf)] @@ -62,3 +65,35 @@ pub struct ChatMessageContent { /// Only sent if the decorated message is different than the plain. pub decorated: Option, } + +#[derive(Clone, Debug)] +pub enum FilterMask { + PassThrough, + FullyFiltered, + PartiallyFiltered(BitSet), +} + +impl McBufReadable for FilterMask { + fn read_from(buf: &mut impl Read) -> Result { + let filter_mask = u32::var_read_from(buf)?; + match filter_mask { + 0 => Ok(FilterMask::PassThrough), + 1 => Ok(FilterMask::FullyFiltered), + 2 => Ok(FilterMask::PartiallyFiltered(BitSet::read_from(buf)?)), + _ => Err("Invalid filter mask".to_string()), + } + } +} +impl McBufWritable for FilterMask { + fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + match self { + FilterMask::PassThrough => 0u32.var_write_into(buf)?, + FilterMask::FullyFiltered => 1u32.var_write_into(buf)?, + FilterMask::PartiallyFiltered(bits) => { + 2u32.var_write_into(buf)?; + bits.write_into(buf)?; + } + } + Ok(()) + } +} diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 2ea163af..fbccc087 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 = 1073741924; +pub const PROTOCOL_VERSION: u32 = 760; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { diff --git a/bot/src/main.rs b/bot/src/main.rs index 3ff30908..0f3ea31a 100644 --- a/bot/src/main.rs +++ b/bot/src/main.rs @@ -6,7 +6,7 @@ async fn main() -> Result<(), Box> { println!("Hello, world!"); // let address = "95.111.249.143:10000"; - let address = "localhost:56150"; + let address = "localhost:25565"; // let response = azalea_client::ping::ping_server(&address.try_into().unwrap()) // .await // .unwrap();