From 9c0b6f6631f861cb1582c6bba41d2931ee26bf16 Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 16 Jun 2022 20:59:19 -0500 Subject: 22w24a & update packets when they're modified --- codegen/migrate.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'codegen/migrate.py') 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) -- cgit v1.2.3 From deef5d27c08daa709e5ebebc382aadff7450fca6 Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 21 Jun 2022 19:57:18 -0500 Subject: 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(-) (limited to 'codegen/migrate.py') 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) -- cgit v1.2.3 From 8755f18c2b0c11a51a81f60b5501d9d57d0c370e Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 23 Jun 2022 21:54:38 -0500 Subject: 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(-) (limited to 'codegen/migrate.py') 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) -- cgit v1.2.3 From 048792f83cae75d98f77eb7a699652e5a6f8f2f9 Mon Sep 17 00:00:00 2001 From: mat Date: Wed, 6 Jul 2022 18:52:24 -0500 Subject: Fix bugs with migration --- codegen/lib/code/packet.py | 6 ++++-- codegen/migrate.py | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) (limited to 'codegen/migrate.py') 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) -- cgit v1.2.3