mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 14:26:04 +00:00
blocks works probably
This commit is contained in:
parent
d106221caa
commit
ab0796119b
4 changed files with 398 additions and 374 deletions
File diff suppressed because it is too large
Load diff
|
@ -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)
|
||||
|
|
|
@ -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]
|
||||
|
||||
default_property_variants = {}
|
||||
for state in block_states:
|
||||
if state.get('default'):
|
||||
default_property_variants = state.get('properties', {})
|
||||
block_properties_burger = block_data_burger['states']
|
||||
|
||||
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('}')
|
||||
|
|
|
@ -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']
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue