diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2022-08-27 20:31:21 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-27 20:31:21 -0500 |
| commit | b8228a036016fa58cab4b00a2e62298df299d41f (patch) | |
| tree | 37ab80c054d2c0832d0ebf61cbbefd9e368260a8 /codegen/lib | |
| parent | 029ae0e567ccdc631a358755eba43b742811ff05 (diff) | |
| download | azalea-drasl-b8228a036016fa58cab4b00a2e62298df299d41f.tar.xz | |
Azalea registry (#20)
* make azalea-registry crate
* add trait feature to az-block
* registr
* registry macro
* impl Display for registry things
* registries
Diffstat (limited to 'codegen/lib')
| -rw-r--r-- | codegen/lib/code/registry.py | 32 | ||||
| -rw-r--r-- | codegen/lib/extract.py | 6 | ||||
| -rw-r--r-- | codegen/lib/utils.py | 3 |
3 files changed, 40 insertions, 1 deletions
diff --git a/codegen/lib/code/registry.py b/codegen/lib/code/registry.py new file mode 100644 index 00000000..fbe9e5af --- /dev/null +++ b/codegen/lib/code/registry.py @@ -0,0 +1,32 @@ +from typing import Optional +from lib.utils import to_snake_case, upper_first_letter, get_dir_location, to_camel_case +from ..mappings import Mappings +import re + +REGISTRIES_DIR = get_dir_location('../azalea-registry/src/lib.rs') + + +def generate_registries(registries: dict): + code = [] + + code.append('use registry_macros::registry;') + code.append('') + + for registry_name, registry in registries.items(): + # registry!(Block, { + # Air => "minecraft:air", + # Stone => "minecraft:stone" + # }); + registry_struct_name = to_camel_case(registry_name.split(':')[1]) + code.append(f'registry!({registry_struct_name}, {{') + registry_entries = sorted( + registry['entries'].items(), key=lambda x: x[1]['protocol_id']) + for variant_name, _variant in registry_entries: + variant_struct_name = to_camel_case( + variant_name.split(':')[1]) + code.append(f'\t{variant_struct_name} => "{variant_name}",') + code.append('});') + code.append('') + + with open(REGISTRIES_DIR, 'w') as f: + f.write('\n'.join(code)) diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py index 070aba14..75e4908b 100644 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -24,6 +24,12 @@ def get_block_states_report(version_id: str): return json.load(f) +def get_registries_report(version_id: str): + generate_data_from_server_jar(version_id) + with open(get_dir_location(f'downloads/generated-{version_id}/reports/registries.json'), 'r') as f: + return json.load(f) + + def get_block_states_burger(version_id: str): burger_data = get_burger_data_for_version(version_id) return burger_data[0]['blocks']['block'] diff --git a/codegen/lib/utils.py b/codegen/lib/utils.py index c3d293c0..efabbb38 100644 --- a/codegen/lib/utils.py +++ b/codegen/lib/utils.py @@ -10,7 +10,8 @@ def to_snake_case(name: str): def to_camel_case(name: str): - s = re.sub('_([a-z])', lambda m: m.group(1).upper(), name) + s = re.sub('[_ ](\w)', lambda m: m.group(1).upper(), + name.replace('.', '_').replace('/', '_')) s = upper_first_letter(s) # if the first character is a number, we need to add an underscore # maybe we could convert it to the number name (like 2 would become "two")? |
