1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00

Fix for states that burger doesn't have

This commit is contained in:
mat 2022-06-16 15:12:20 -05:00
parent 8aa8baa20d
commit 043f70aa6e
4 changed files with 337 additions and 270 deletions

View file

@ -1,3 +1,3 @@
{ {
"editor.formatOnSave": true "editor.formatOnSave": false
} }

View file

@ -1,6 +1,6 @@
# Azalea # Azalea
A Rust crate for creating Minecraft bots. A collection of Rust crates for creating Minecraft bots and other utilities.
<p align="center"> <p align="center">
<img src="https://cdn.matdoes.dev/images/flowering_azalea.webp" alt="Azalea" height="200"> <img src="https://cdn.matdoes.dev/images/flowering_azalea.webp" alt="Azalea" height="200">

File diff suppressed because it is too large Load diff

View file

@ -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 lib.utils import to_snake_case, upper_first_letter, get_dir_location, to_camel_case
from ..mappings import Mappings from ..mappings import Mappings
import re 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 = []
new_make_block_states_macro_code.append('make_block_states! {') 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 property_name = None
for class_name in [block_data_burger['class']] + block_data_burger['super']: for class_name in [block_data_burger['class']] + block_data_burger['super']:
property_name = mappings.get_field( 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_data_report = blocks_report[f'minecraft:{block_id}']
block_properties = {} 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 property_burger = None
for property in block_data_burger['states']: for property in block_data_burger.get('states', []):
if property['name'] == property_struct_name: if property['name'] == property_name:
property_burger = property property_burger = property
break break
property_variants = block_data_report['properties'][property_name]
if property_burger is None: if property_burger is None:
print( print(
'Error: The reports have states for a block, but Burger doesn\'t!', block_data_burger) 'Warning: 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]
property_struct_name = get_property_struct_name( 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 block_properties[property_struct_name] = property_variants
property_name = property_burger['name']
# if the name ends with _<number>, remove that part # if the name ends with _<number>, remove that part
ending = property_name.split('_')[-1] ending = property_name.split('_')[-1]
if ending.isdigit(): 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_burger = blocks_burger[block_id]
block_data_report = blocks_report['minecraft:' + 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] = {} default_property_variants: dict[str, str] = {}
for property in block_data_report['states']: for state in block_data_report['states']:
if property.get('default'): if state.get('default'):
default_property_variants = property.get('properties', {}) default_property_variants = state.get('properties', {})
# TODO: use burger to generate the blockbehavior # TODO: use burger to generate the blockbehavior
new_make_block_states_macro_code.append( new_make_block_states_macro_code.append(
f' {block_id} => BlockBehavior::default(), {{') f' {block_id} => BlockBehavior::default(), {{')
for property in block_properties_burger: for property_name in list(block_data_report.get('properties', {}).keys()):
property_default = default_property_variants.get(property['name']) 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_struct_name = get_property_struct_name(
property, block_data_burger) property_burger, block_data_burger, property_variants)
assert property_default is not None assert property_default is not None
new_make_block_states_macro_code.append( new_make_block_states_macro_code.append(
f' {property_struct_name}={to_camel_case(property_default)},') 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(' }') new_make_block_states_macro_code.append(' }')
new_make_block_states_macro_code.append('}') new_make_block_states_macro_code.append('}')