diff options
| author | mat <github@matdoes.dev> | 2022-06-16 15:12:20 -0500 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-06-16 15:12:20 -0500 |
| commit | 043f70aa6ef8a6ae37d56ac63d284251cbecdfaf (patch) | |
| tree | 4ae42fbea20b945e9a3bda44074c3b3627e66dfd /codegen/lib/code/blocks.py | |
| parent | 8aa8baa20d47676b56f633260229d08dfb5ac856 (diff) | |
| download | azalea-drasl-043f70aa6ef8a6ae37d56ac63d284251cbecdfaf.tar.xz | |
Fix for states that burger doesn't have
Diffstat (limited to 'codegen/lib/code/blocks.py')
| -rw-r--r-- | codegen/lib/code/blocks.py | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/codegen/lib/code/blocks.py b/codegen/lib/code/blocks.py index 9d1a5f30..4978da6f 100644 --- a/codegen/lib/code/blocks.py +++ b/codegen/lib/code/blocks.py @@ -1,3 +1,4 @@ +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 @@ -18,7 +19,10 @@ def generate_blocks(blocks_burger: dict, blocks_report: dict, ordered_blocks: li new_make_block_states_macro_code = [] new_make_block_states_macro_code.append('make_block_states! {') - def get_property_struct_name(property: dict, block_data_burger: dict) -> str: + def get_property_struct_name(property: Optional[dict], block_data_burger: dict, property_variants: list[str]) -> str: + if property is None: + return '_'.join(map(to_camel_case, property_variants)) + property_name = None for class_name in [block_data_burger['class']] + block_data_burger['super']: property_name = mappings.get_field( @@ -42,24 +46,25 @@ def generate_blocks(blocks_burger: dict, blocks_report: dict, ordered_blocks: li block_data_report = blocks_report[f'minecraft:{block_id}'] block_properties = {} - for property_struct_name in list(block_data_report.get('properties', {}).keys()): + for property_name in list(block_data_report.get('properties', {}).keys()): property_burger = None - for property in block_data_burger['states']: - if property['name'] == property_struct_name: + for property in block_data_burger.get('states', []): + if property['name'] == property_name: property_burger = property break + + property_variants = block_data_report['properties'][property_name] + if property_burger is None: print( - 'Error: The reports have states for a block, but Burger doesn\'t!', block_data_burger) - continue - # assert property_burger is not None - property_variants = block_data_report['properties'][property_struct_name] + 'Warning: The reports have states for a block, but Burger doesn\'t!', block_data_burger) + property_struct_name = get_property_struct_name( - property_burger, block_data_burger) + property_burger, block_data_burger, property_variants) + # assert property_name == property_burger['name'] block_properties[property_struct_name] = property_variants - property_name = property_burger['name'] # if the name ends with _<number>, remove that part ending = property_name.split('_')[-1] if ending.isdigit(): @@ -94,25 +99,32 @@ def generate_blocks(blocks_burger: dict, blocks_report: dict, ordered_blocks: li block_data_burger = blocks_burger[block_id] block_data_report = blocks_report['minecraft:' + block_id] - block_properties_burger = block_data_burger['states'] + block_properties = block_data_burger.get('states', []) + block_properties_burger = block_data_burger.get('states', []) default_property_variants: dict[str, str] = {} - for property in block_data_report['states']: - if property.get('default'): - default_property_variants = property.get('properties', {}) + for state in block_data_report['states']: + if state.get('default'): + default_property_variants = state.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_properties_burger: - property_default = default_property_variants.get(property['name']) + for property_name in list(block_data_report.get('properties', {}).keys()): + property_burger = None + for property in block_data_burger.get('states', []): + if property['name'] == property_name: + property_burger = property + break + + property_default = default_property_variants.get(property_name) + property_variants = block_data_report['properties'][property_name] + property_struct_name = get_property_struct_name( - property, block_data_burger) + property_burger, block_data_burger, property_variants) assert property_default is not None new_make_block_states_macro_code.append( f' {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('}') |
