aboutsummaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-06-17 06:49:07 -1200
committermat <git@matdoes.dev>2025-06-17 06:49:07 -1200
commitffbe7a3e426e66c21c7156780728f96f8277c68a (patch)
tree5358ab47c013cc848dd7d24781676062fc87da4e /codegen
parent319d144995e0ca635806941cbb5d6ceaf0fcf515 (diff)
downloadazalea-drasl-ffbe7a3e426e66c21c7156780728f96f8277c68a.tar.xz
1.21.6 (#215)
Diffstat (limited to 'codegen')
-rw-r--r--codegen/lib/code/packet.py6
-rw-r--r--codegen/lib/download.py37
-rw-r--r--codegen/lib/extract.py49
-rw-r--r--codegen/migrate.py3
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)