aboutsummaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-02-02 21:15:45 +0000
committermat <git@matdoes.dev>2025-02-02 21:15:45 +0000
commitb08d3d55d7351eff6e27a09d732078c038539958 (patch)
tree3d511170be7d46bff418296245f62ebd18065453 /codegen
parentcdb68dfb702f442135dadedc53ce29b1cc2b9c14 (diff)
downloadazalea-drasl-b08d3d55d7351eff6e27a09d732078c038539958.tar.xz
start implementing data driven registries
Diffstat (limited to 'codegen')
-rwxr-xr-xcodegen/lib/code/registry.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/codegen/lib/code/registry.py b/codegen/lib/code/registry.py
index 401f4b02..d1399da5 100755
--- a/codegen/lib/code/registry.py
+++ b/codegen/lib/code/registry.py
@@ -9,6 +9,8 @@ def generate_registries(registries: dict):
with open(REGISTRIES_DIR, 'r') as f:
code = f.read().split('\n')
+ existing_registry_enum_names = set()
+
for registry_name, registry in registries.items():
# registry!(Block, {
# Air => "minecraft:air",
@@ -18,6 +20,8 @@ def generate_registries(registries: dict):
registry_name = registry_name.split(':')[1]
registry_enum_name = registry_name_to_enum_name(registry_name)
+ existing_registry_enum_names.add(registry_enum_name)
+
registry_code = []
registry_code.append(f'enum {registry_enum_name} {{')
registry_entries = sorted(
@@ -47,6 +51,24 @@ def generate_registries(registries: dict):
code.append('}')
code.append('')
+ # delete the unused registries
+ i = 0
+ while i < len(code):
+ if code[i] == 'registry! {':
+ # skip until we get to the enum line
+ while not code[i].startswith('enum '):
+ i += 1
+ enum_name = code[i].split(' ')[1]
+ if enum_name not in existing_registry_enum_names:
+ i -= 1
+ while code[i] != '}':
+ code.pop(i)
+ code.pop(i)
+ # close the registry! block
+ code.pop(i)
+ else:
+ i += 1
+
with open(REGISTRIES_DIR, 'w') as f:
f.write('\n'.join(code))