diff options
| author | mat <github@matdoes.dev> | 2022-06-10 15:06:15 -0500 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-06-10 15:06:15 -0500 |
| commit | ab0796119b39b785da8cff4c09904511de16bf72 (patch) | |
| tree | 43f7a6ff6dbf5034a514f8e20c592f4a6a361528 /codegen | |
| parent | d106221caac1f4e441fe33c6a0ecca6087d33d50 (diff) | |
| download | azalea-drasl-ab0796119b39b785da8cff4c09904511de16bf72.tar.xz | |
blocks works probably
Diffstat (limited to 'codegen')
| -rw-r--r-- | codegen/genblocks.py | 5 | ||||
| -rw-r--r-- | codegen/lib/code/blocks.py | 47 | ||||
| -rw-r--r-- | codegen/lib/extract.py | 12 |
3 files changed, 40 insertions, 24 deletions
diff --git a/codegen/genblocks.py b/codegen/genblocks.py index 0863ec31..75516626 100644 --- a/codegen/genblocks.py +++ b/codegen/genblocks.py @@ -20,6 +20,7 @@ os.system( print('Ok') mappings = lib.download.get_mappings_for_version(version_id) -block_states_data = lib.extract.get_block_states(version_id) +block_states_burger = lib.extract.get_block_states_burger(version_id) +block_states_report = lib.extract.get_block_states_report(version_id) -lib.code.blocks.generate_blocks(block_states_data, mappings) +lib.code.blocks.generate_blocks(block_states_burger, block_states_report, mappings) diff --git a/codegen/lib/code/blocks.py b/codegen/lib/code/blocks.py index bc5083c7..eb1485ef 100644 --- a/codegen/lib/code/blocks.py +++ b/codegen/lib/code/blocks.py @@ -23,24 +23,32 @@ def get_property_variants(data) -> list[str]: raise Exception('Unknown property type: ' + data['type']) -def generate_blocks(blocks: dict, mappings: Mappings): +def generate_blocks(blocks_burger: dict, blocks_report: dict, mappings: Mappings): with open(BLOCKS_RS_DIR, 'r') as f: existing_code = f.read().splitlines() new_make_block_states_macro_code = [] new_make_block_states_macro_code.append('make_block_states! {') + def get_property_name(property: dict, block_data_burger: dict) -> str: + property_name = None + for class_name in [block_data_burger['class']] + block_data_burger['super']: + property_name = mappings.get_field(class_name, property['field_name']) + if property_name: + break + assert property_name + property_name = property_name.lower() + return property_name + # Find properties properties = {} - for block_data in blocks.values(): + for block_data_burger in blocks_burger.values(): block_properties = {} - for property in block_data.get('states', []): - property_name = mappings.get_field( - property.get('declared_in', block_data['class']), property['field_name']).lower() + for property in block_data_burger.get('states', []): + property_name = get_property_name(property, block_data_burger) + property_variants = get_property_variants(property) block_properties[property_name] = property_variants - # if property_name == 'eggs': - # print(property, property_name, property_variants) properties.update(block_properties) # Property codegen @@ -59,21 +67,28 @@ def generate_blocks(blocks: dict, mappings: Mappings): # Block codegen new_make_block_states_macro_code.append(' Blocks => {') - for block_id, block_data in blocks.items(): - block_states = block_data['states'] + for block_id, block_data_burger in blocks_burger.items(): + block_data_report = blocks_report['minecraft:' + block_id] + + block_properties_burger = block_data_burger['states'] - default_property_variants = {} - for state in block_states: - if state.get('default'): - default_property_variants = state.get('properties', {}) + default_property_variants: dict[str, str] = {} + for property in block_data_report['states']: + if property.get('default'): + default_property_variants = property.get('properties', {}) # TODO: use burger to generate the blockbehavior new_make_block_states_macro_code.append( f' {block_id} => BlockBehavior::default(), {{') - for property in block_data.get('properties', {}): - property_default = default_property_variants.get(property) + print('block data', block_data_burger) + for property in block_properties_burger: + property_default = default_property_variants.get(property['name']) + property_struct_name = get_property_name(property, block_data_burger) + assert property_default is not None new_make_block_states_macro_code.append( - f' {to_camel_case(property)}={to_camel_case(property_default)},') + f' {to_camel_case(property_struct_name)}={to_camel_case(property_default)},') + # new_make_block_states_macro_code.append( + # f' {to_camel_case(state)}=TODO,') new_make_block_states_macro_code.append(' },') new_make_block_states_macro_code.append(' }') new_make_block_states_macro_code.append('}') diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py index bf116437..360c368c 100644 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -16,12 +16,12 @@ def generate_data_from_server_jar(version_id: str): ) -# the minecraft server jar doesn't give enough useful info so we use burger instead -# def get_block_states(version_id: str): -# generate_data_from_server_jar(version_id) -# with open(get_dir_location(f'downloads/generated-{version_id}/reports/blocks.json'), 'r') as f: -# return json.load(f) -def get_block_states(version_id: str): +def get_block_states_report(version_id: str): + generate_data_from_server_jar(version_id) + with open(get_dir_location(f'downloads/generated-{version_id}/reports/blocks.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'] |
