diff options
Diffstat (limited to 'codegen')
| -rw-r--r-- | codegen/lib/code/packet.py | 6 | ||||
| -rw-r--r-- | codegen/lib/download.py | 37 | ||||
| -rw-r--r-- | codegen/lib/extract.py | 49 | ||||
| -rw-r--r-- | codegen/migrate.py | 3 |
4 files changed, 75 insertions, 20 deletions
diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 98f51ae9..fe0f9f9f 100644 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -1,4 +1,4 @@ -from lib.utils import padded_hex, to_snake_case, to_camel_case, get_dir_location +from lib.utils import to_snake_case, to_camel_case, get_dir_location from lib.code.utils import burger_type_to_rust_type, write_packet_file from lib.mappings import Mappings from typing import Optional @@ -75,14 +75,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}, // {padded_hex(packet_id)}") + code.append(f" {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}, // {padded_hex(packet_id)}") + code.append(f" {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 238336e2..a557b523 100644 --- a/codegen/lib/download.py +++ b/codegen/lib/download.py @@ -135,25 +135,37 @@ def get_mappings_for_version(version_id: str): return Mappings.parse(mappings_text) -def get_yarn_versions(): +def get_fabric_data(version_id: str): # https://meta.fabricmc.net/v2/versions/yarn - if not os.path.exists(get_dir_location("__cache__/yarn_versions.json")): - print("\033[92mDownloading yarn versions...\033[m") - yarn_versions_data = requests.get( - "https://meta.fabricmc.net/v2/versions/yarn" - ).json() - with open(get_dir_location("__cache__/yarn_versions.json"), "w") as f: + path = get_dir_location(f"__cache__/fabric-{version_id}.json") + + if not os.path.exists(path): + print(f"\033[92mDownloading Fabric metadata for {version_id}...\033[m") + url = f"https://meta.fabricmc.net/v1/versions/loader/{version_id}" + yarn_versions_data = requests.get(url).json() + with open(path, "w") as f: json.dump(yarn_versions_data, f) else: - with open(get_dir_location("__cache__/yarn_versions.json"), "r") as f: + with open(path, "r") as f: yarn_versions_data = json.load(f) return yarn_versions_data -def get_yarn_data(version_id: str): - for version in get_yarn_versions(): - if version["gameVersion"] == version_id: - return version +def get_latest_fabric_api_version(): + path = get_dir_location("__cache__/fabric-api-maven-metadata.xml") + + if not os.path.exists(path): + print("\033[92mDownloading Fabric API metadata...\033[m") + url = "https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api/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(): @@ -210,6 +222,7 @@ def clear_version_cache(): "yarn_versions.json", "fabric_api_versions.json", "fabric_loader_versions.json", + "fabric-api-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 97f37ccf..57ece9f2 100644 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -1,11 +1,14 @@ # Extracting data from the Minecraft jars +import shutil from lib.download import ( + get_latest_fabric_api_version, get_mappings_for_version, get_pumpkin_extractor, get_server_jar, get_burger, get_client_jar, + get_fabric_data, ) from lib.utils import get_dir_location, to_camel_case, upper_first_letter from zipfile import ZipFile @@ -131,13 +134,51 @@ def get_pumpkin_data(version_id: str, category: str): return json.load(f) pumpkin_dir = get_pumpkin_extractor() - os.makedirs(f"{pumpkin_dir}/run", exist_ok=True) - with open(f"{pumpkin_dir}/run/eula.txt", "w") as f: + + pumpkin_run_directory = f"{pumpkin_dir}/run" + + if os.path.exists(pumpkin_run_directory): + shutil.rmtree(pumpkin_run_directory) + os.makedirs(pumpkin_run_directory, exist_ok=True) + with open(f"{pumpkin_run_directory}/eula.txt", "w") as f: f.write("eula=true") + with open(f"{pumpkin_run_directory}/server.properties", "w") as f: + f.write("server-port=0") + + fabric_data = get_fabric_data(version_id)[0] + fabric_api_version = get_latest_fabric_api_version() + + gradle_properties = f"""# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx1G +org.gradle.parallel=true +# Fabric Properties +# check these on https://modmuss50.me/fabric.html +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 +# Mod Properties +mod_version=1.0-SNAPSHOT +maven_group=de.snowii +archives_base_name=extractor +fabric_version={fabric_api_version} +""" + with open(f"{pumpkin_dir}/gradle.properties", "w") as f: + f.write(gradle_properties) + + # update the minecraft version dependency in src/main/resources/fabric.mod.json + fabric_mod_json_path = f"{pumpkin_dir}/src/main/resources/fabric.mod.json" + with open(fabric_mod_json_path, "r") as f: + fabric_mod_json = f.read() + with open(fabric_mod_json_path, "w") as f: + fabric_mod_json = fabric_mod_json.replace( + '"minecraft": "${minecraft_version}"', '"minecraft": "*"' + ) + f.write(fabric_mod_json) # run ./gradlew runServer until it logs "(pumpkin_extractor) Done" p = subprocess.Popen( - f"cd {pumpkin_dir} && ./gradlew runServer", + f"cd {pumpkin_dir} && ./gradlew clean && ./gradlew runServer", stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, @@ -149,7 +190,7 @@ def get_pumpkin_data(version_id: str, category: str): if "[Server thread/INFO] (pumpkin_extractor) Done" in data: print("Pumpkin extractor done") break - if data == b"": + if data == "": break p.terminate() diff --git a/codegen/migrate.py b/codegen/migrate.py index bfdf68ec..56874273 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -57,9 +57,10 @@ print('Generating registries...') import genregistries genregistries.generate(new_version_id) -print('Generating entity metadata...') +print('Generating entity data...') burger_entities_data = new_burger_data[0]['entities'] lib.code.entity.generate_entity_metadata(burger_entities_data, new_mappings) +lib.code.entity.generate_entity_dimensions(burger_entities_data) print('Generating item components...') lib.code.item_components.generate(new_version_id) |
