diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2025-09-30 10:56:34 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-30 10:56:34 -0500 |
| commit | 643fcb98c0e6cdc63218dd39960d9053b209d9a6 (patch) | |
| tree | 6bddb7fe39b8fcc3ab3fb2665574533bb227898a /codegen | |
| parent | a80d8d1b242430c4a251876fa67bfd26af7a0de9 (diff) | |
| download | azalea-drasl-643fcb98c0e6cdc63218dd39960d9053b209d9a6.tar.xz | |
1.21.9 (#235)
* start updating to 25w33a
* 1.21.9-pre2
* clippy
* cleanup, and fix c_explode and c_player_rotation
* mc update should be in Changed section in the changelog
* 1.21.9
Diffstat (limited to 'codegen')
| -rw-r--r-- | codegen/lib/code/data_components.py | 12 | ||||
| -rw-r--r-- | codegen/lib/code/entity.py | 5 | ||||
| -rw-r--r-- | codegen/lib/code/packet.py | 14 | ||||
| -rw-r--r-- | codegen/lib/download.py | 105 | ||||
| -rw-r--r-- | codegen/lib/extract.py | 22 | ||||
| -rw-r--r-- | codegen/migrate.py | 5 |
6 files changed, 118 insertions, 45 deletions
diff --git a/codegen/lib/code/data_components.py b/codegen/lib/code/data_components.py index d29096d2..bba952e1 100644 --- a/codegen/lib/code/data_components.py +++ b/codegen/lib/code/data_components.py @@ -315,6 +315,18 @@ use crate::{ list(python_value.values())[0], target_rust_type ) return str(python_value) + elif target_rust_type == "NbtCompound": + # NbtCompound::from_values([ + # ("id".into(), "minecraft:allay".into()), + # ]), + t = "NbtCompound::from_values(vec![" + for k, v in python_value.items(): + if isinstance(v, str): + t += f'("{k}".into(), "{v}".into()),' + else: + t += f'("{k}".into(), {python_to_rust_value(v, "FIXME_UNKNOWN_NBT")}),' + t = t.rstrip(",") + "])" + return t if isinstance(python_value, dict): if target_rust_type == "ResourceLocation" and len(python_value) == 1: diff --git a/codegen/lib/code/entity.py b/codegen/lib/code/entity.py index eb2677ad..1c2a0d48 100644 --- a/codegen/lib/code/entity.py +++ b/codegen/lib/code/entity.py @@ -121,8 +121,9 @@ use thiserror::Error; use uuid::Uuid; use super::{ - ArmadilloStateKind, EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Quaternion, - Rotations, SnifferStateKind, VillagerData, + ArmadilloStateKind, CopperGolemStateKind, EntityDataItem, EntityDataValue, OptionalUnsignedInt, + Pose, Quaternion, ResolvableProfile, Rotations, SnifferStateKind, VillagerData, + WeatheringCopperStateKind, }; use crate::particle::Particle; diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 994e21e5..1337ac2e 100644 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -20,8 +20,8 @@ PACKETS_DIR = "../azalea-protocol/src/packets" def generate_packet(packets_report, packet_name, direction, state): - mojmap_state = AZALEA_TO_MOJMAP_STATE_NAME_MAPPING.get(state, state) - _packet_report = packets_report[mojmap_state][direction]["minecraft:" + packet_name] + # mojmap_state = AZALEA_TO_MOJMAP_STATE_NAME_MAPPING.get(state, state) + # _packet_report = packets_report[mojmap_state][direction]["minecraft:" + packet_name] code = [] @@ -46,7 +46,11 @@ def generate_packet(packets_report, packet_name, direction, state): def get_packet_module_name(packet_name: str, direction: str): - return f"{direction[0]}_{packet_name}" + return f"{direction[0]}_{get_packet_partial_module_name(packet_name)}" + + +def get_packet_partial_module_name(packet_name: str): + return packet_name.replace("/", "_") def set_packets(packets_report): @@ -75,14 +79,14 @@ def set_packets(packets_report): code.append(f"declare_state_packets!({to_camel_case(state)}Packet,") code.append(" Clientbound => [") for packet_id, packet_name in enumerate(clientbound_packets): - code.append(f" {packet_name},") + code.append(f" {get_packet_partial_module_name(packet_name)},") expected_packet_module_names.add( get_packet_module_name(packet_name, "clientbound") ) code.append(" ],") code.append(" Serverbound => [") for packet_id, packet_name in enumerate(serverbound_packets): - code.append(f" {packet_name},") + code.append(f" {get_packet_partial_module_name(packet_name)},") expected_packet_module_names.add( get_packet_module_name(packet_name, "serverbound") ) diff --git a/codegen/lib/download.py b/codegen/lib/download.py index 7878bb45..de6e2f2d 100644 --- a/codegen/lib/download.py +++ b/codegen/lib/download.py @@ -140,50 +140,87 @@ def get_latest_fabric_api_version(): return tree.find(".//latest").text +def get_latest_fabric_kotlin_version(): + # https://maven.fabricmc.net/net/fabricmc/fabric-language-kotlin/maven-metadata.xml + path = get_dir_location("__cache__/fabric-kotlin-maven-metadata.xml") + + if not os.path.exists(path): + print("\033[92mDownloading Fabric Kotlin metadata...\033[m") + url = "https://maven.fabricmc.net/net/fabricmc/fabric-language-kotlin/maven-metadata.xml" + maven_metadata_xml = requests.get(url).text + with open(path, "w") as f: + json.dump(maven_metadata_xml, f) + else: + with open(path, "r") as f: + maven_metadata_xml = json.load(f) + + tree = ET.ElementTree(ET.fromstring(maven_metadata_xml)) + return tree.find(".//latest").text + + +def get_latest_fabric_loom_version(): + # https://maven.fabricmc.net/fabric-loom/fabric-loom.gradle.plugin/maven-metadata.xml + + path = get_dir_location("__cache__/fabric-loom-maven-metadata.xml") + if not os.path.exists(path): + print("\033[92mDownloading Fabric Loom metadata...\033[m") + url = "https://maven.fabricmc.net/fabric-loom/fabric-loom.gradle.plugin/maven-metadata.xml" + maven_metadata_xml = requests.get(url).text + with open(path, "w") as f: + json.dump(maven_metadata_xml, f) + else: + with open(path, "r") as f: + maven_metadata_xml = json.load(f) + + tree = ET.ElementTree(ET.fromstring(maven_metadata_xml)) + return tree.find(".//latest").text + + 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("__cache__/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 = [] - - 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("__cache__/fabric_api_versions.json"), "w") as f: - f.write(json.dumps(fabric_api_versions)) - else: + if os.path.exists(get_dir_location("__cache__/fabric_api_versions.json")): with open(get_dir_location("__cache__/fabric_api_versions.json"), "r") as f: fabric_api_versions = json.loads(f.read()) + return fabric_api_versions + + 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 = [] + + 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("__cache__/fabric_api_versions.json"), "w") as f: + f.write(json.dumps(fabric_api_versions)) return fabric_api_versions def get_fabric_loader_versions(): # https://meta.fabricmc.net/v2/versions/loader - if not os.path.exists(get_dir_location("__cache__/fabric_loader_versions.json")): - print("\033[92mDownloading Fabric loader versions...\033[m") - fabric_api_versions_json = requests.get( - "https://meta.fabricmc.net/v2/versions/loader" - ).json() + if os.path.exists(get_dir_location("__cache__/fabric_loader_versions.json")): + with open(get_dir_location("__cache__/fabric_loader_versions.json"), "r") as f: + return json.loads(f.read()) - fabric_api_versions = [] - for version in fabric_api_versions_json: - fabric_api_versions.append(version["version"]) + print("\033[92mDownloading Fabric loader versions...\033[m") + fabric_api_versions_json = requests.get( + "https://meta.fabricmc.net/v2/versions/loader" + ).json() - with open(get_dir_location("__cache__/fabric_loader_versions.json"), "w") as f: - f.write(json.dumps(fabric_api_versions)) - else: - with open(get_dir_location("__cache__/fabric_loader_versions.json"), "r") as f: - fabric_api_versions = json.loads(f.read()) + fabric_api_versions = [] + for version in fabric_api_versions_json: + fabric_api_versions.append(version["version"]) + + with open(get_dir_location("__cache__/fabric_loader_versions.json"), "w") as f: + f.write(json.dumps(fabric_api_versions)) return fabric_api_versions @@ -195,6 +232,8 @@ def clear_version_cache(): "fabric_api_versions.json", "fabric_loader_versions.json", "fabric-api-maven-metadata.xml", + "fabric-kotlin-maven-metadata.xml", + "fabric-loom-maven-metadata.xml", ] for file in files: if os.path.exists(get_dir_location(f"__cache__/{file}")): diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py index eaebab84..357059f6 100644 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -3,6 +3,8 @@ import shutil from lib.download import ( get_latest_fabric_api_version, + get_latest_fabric_kotlin_version, + get_latest_fabric_loom_version, get_mappings_for_version, get_pumpkin_extractor, get_server_jar, @@ -151,6 +153,8 @@ def get_pumpkin_data(version_id: str, category: str): fabric_data = get_fabric_data(version_id)[0] fabric_api_version = get_latest_fabric_api_version() + fabric_kotlin_version = get_latest_fabric_kotlin_version() + fabric_loom_version = get_latest_fabric_loom_version() gradle_properties = f"""# Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G @@ -160,7 +164,7 @@ org.gradle.parallel=true minecraft_version={version_id} yarn_mappings={fabric_data["mappings"]["version"]} loader_version={fabric_data["loader"]["version"]} -kotlin_loader_version=1.13.2+kotlin.2.1.20 +kotlin_loader_version={fabric_kotlin_version} # Mod Properties mod_version=1.0-SNAPSHOT maven_group=de.snowii @@ -179,10 +183,24 @@ fabric_version={fabric_api_version} '"minecraft": "${minecraft_version}"', '"minecraft": "*"' ) f.write(fabric_mod_json) + with open(f"{pumpkin_dir}/build.gradle.kts", "r") as f: + build_gradle_kts = f.read() + with open(f"{pumpkin_dir}/build.gradle.kts", "w") as f: + build_gradle_kts = re.sub( + r'(id\("fabric-loom"\) version )"[^"]+"', + rf'\1"{fabric_loom_version}"', + build_gradle_kts, + ) + # kotlin complains about nullable types if we don't add this + build_gradle_kts = re.sub( + r'(to project.property\("\w+"\))([\n,])', r"\1!!\2", build_gradle_kts + ) + f.write(build_gradle_kts) # run ./gradlew runServer until it logs "(pumpkin_extractor) Done" p = subprocess.Popen( - f"cd {pumpkin_dir} && ./gradlew clean && ./gradlew runServer", + # the gradle wrapper (./gradlew) is sometimes on the wrong version so just prefer the system's gradle installation + f"cd {pumpkin_dir} && gradle clean && gradle runServer", stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, diff --git a/codegen/migrate.py b/codegen/migrate.py index 85dc927d..8695024e 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -1,4 +1,4 @@ -import codegen.lib.code.data_components +import lib.code.data_components import lib.code.inventory import lib.code.language import lib.code.registry @@ -10,6 +10,7 @@ import lib.code.entity import lib.code.utils import lib.download import lib.extract +import genregistries import sys lib.download.clear_version_cache() @@ -58,8 +59,6 @@ language = lib.extract.get_en_us_lang(new_version_id) lib.code.language.write_language(language) print("Generating registries...") -import genregistries - genregistries.generate(new_version_id) print("Generating entity data...") |
