aboutsummaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2025-09-30 10:56:34 -0500
committerGitHub <noreply@github.com>2025-09-30 10:56:34 -0500
commit643fcb98c0e6cdc63218dd39960d9053b209d9a6 (patch)
tree6bddb7fe39b8fcc3ab3fb2665574533bb227898a /codegen
parenta80d8d1b242430c4a251876fa67bfd26af7a0de9 (diff)
downloadazalea-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.py12
-rw-r--r--codegen/lib/code/entity.py5
-rw-r--r--codegen/lib/code/packet.py14
-rw-r--r--codegen/lib/download.py105
-rw-r--r--codegen/lib/extract.py22
-rw-r--r--codegen/migrate.py5
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...")