minecraft-datapack-language 15.4.32__tar.gz → 15.4.34__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- minecraft_datapack_language-15.4.34/.github/workflows/ci.yml +79 -0
- {minecraft_datapack_language-15.4.32/minecraft_datapack_language.egg-info → minecraft_datapack_language-15.4.34}/PKG-INFO +1 -1
- minecraft_datapack_language-15.4.34/docs/_data/version.yml +3 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/language-reference.md +11 -11
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/_version.py +3 -3
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/cli.py +22 -7
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_compiler.py +124 -39
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34/minecraft_datapack_language.egg-info}/PKG-INFO +1 -1
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/SOURCES.txt +4 -0
- minecraft_datapack_language-15.4.34/temp_output/data/test/function/helper.mcfunction +4 -0
- minecraft_datapack_language-15.4.34/temp_output/data/test/function/load.mcfunction +3 -0
- minecraft_datapack_language-15.4.34/temp_output/data/test/function/main.mcfunction +4 -0
- minecraft_datapack_language-15.4.34/temp_output/pack.mcmeta +6 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/run_all_tests.py +24 -15
- minecraft_datapack_language-15.4.32/.github/workflows/ci.yml +0 -338
- minecraft_datapack_language-15.4.32/docs/_data/version.yml +0 -3
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.cursor/rules/aispec.mdc +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/actions/mdl-compile/action.yml +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/docs.yml +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/pypi.yml +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/release.yml +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/update-website-version.yml +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.gitignore +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/COMPILER_FIXES_SUMMARY.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/CONDITIONALS_IMPLEMENTATION.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/LICENSE +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/Makefile +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/README.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/first_spell.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/other_advancement.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/test_advancement.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/comprehensive_error_test.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/control_test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/control_test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/control_test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/if_test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/if_test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/countdown_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/countdown_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_else_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_7.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_7.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/while_test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/while_test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/dist.zip +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/.env +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/404.html +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/Gemfile +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/README.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_config.yml +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/cli-reference.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/contributing.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/docs-hub.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/documentation.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/examples.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/getting-started.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/multi-file-projects.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/python-api.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/vscode-extension.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_includes/head-custom.html +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_includes/navigation.html +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_layouts/default.html +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_layouts/page.html +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_plugins/test_version.rb +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_plugins/version_reader.rb +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/assets/css/style.css +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/docs.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/downloads.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-64.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/index.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/examples/hello_world.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/examples/scope_examples.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/examples/simple_counter.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-64.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/item_modifiers/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/item_modifiers/enchant_tool.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/item_modifiers/test_item_modifier.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/epic_loot.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/main_loot.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/test_loot.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/mdllocal.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/__init__.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/ast_nodes.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/dir_map.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_errors.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_lexer.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_linter.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_parser.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/utils.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/requires.txt +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/multi_scope_example.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/my_awesome_pack/README.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/has_mana.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/other_predicate.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/test_predicate.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/pyproject.toml +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/pytest.ini +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/custom_pickaxe.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/first.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/inlet.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/main_recipe.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/outlet.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/pipe.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/second.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/test_recipe.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/wrench.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scope_demo.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scoreboard_test.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/UpdateMDL.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/bootstrap.ps1 +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/bootstrap.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/build_pkg.ps1 +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/build_pkg.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_build.ps1 +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_build.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_setup.ps1 +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_setup.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/git-bash/test_cli-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/release.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_cli.ps1 +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_cli.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_dev.ps1 +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_dev.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/update_docs.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/update_version_info.sh +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/setup.cfg +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/structures/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/structures/test_structure.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/structures/workshop.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tellraw_variables_test.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_all_registry.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_complex_scenarios.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_comprehensive_fixes.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_if_else_while.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_project/complex_test.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_simple.mdl +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/__init__.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_cli.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_compiler_fixes.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_complex_scenarios.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_comprehensive_end_to_end.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_python_api.py +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/README.md +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/language-configuration.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/package-lock.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/package.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/snippets/mdl.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/src/extension.ts +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/themes/mdl-color-theme.json +0 -0
- {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/tsconfig.json +0 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ "**" ]
|
6
|
+
pull_request:
|
7
|
+
workflow_dispatch:
|
8
|
+
|
9
|
+
defaults:
|
10
|
+
run:
|
11
|
+
shell: bash
|
12
|
+
|
13
|
+
jobs:
|
14
|
+
build-test:
|
15
|
+
name: build & test (${{ matrix.os }} / py${{ matrix.python-version }})
|
16
|
+
runs-on: ${{ matrix.os }}
|
17
|
+
strategy:
|
18
|
+
fail-fast: false
|
19
|
+
matrix:
|
20
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
21
|
+
python-version: ["3.10", "3.11", "3.12"]
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v4
|
24
|
+
with:
|
25
|
+
fetch-depth: 0
|
26
|
+
|
27
|
+
- name: Setup Python
|
28
|
+
uses: actions/setup-python@v5
|
29
|
+
with:
|
30
|
+
python-version: ${{ matrix.python-version }}
|
31
|
+
|
32
|
+
- name: Upgrade pip & install build deps
|
33
|
+
run: |
|
34
|
+
python -m pip install --upgrade pip
|
35
|
+
python -m pip install build
|
36
|
+
|
37
|
+
- name: Install package (editable)
|
38
|
+
run: |
|
39
|
+
python -m pip install -e .[dev]
|
40
|
+
|
41
|
+
- name: Build sdist & wheel
|
42
|
+
run: |
|
43
|
+
python -m build
|
44
|
+
|
45
|
+
- name: Run consolidated test runner
|
46
|
+
run: |
|
47
|
+
echo "Running consolidated test runner..."
|
48
|
+
python tests/run_all_tests.py
|
49
|
+
|
50
|
+
- name: Upload dist artifacts
|
51
|
+
uses: actions/upload-artifact@v4
|
52
|
+
with:
|
53
|
+
name: dist-${{ matrix.os }}-py${{ matrix.python-version }}
|
54
|
+
path: dist/*
|
55
|
+
if-no-files-found: error
|
56
|
+
|
57
|
+
comprehensive-tests:
|
58
|
+
name: comprehensive tests
|
59
|
+
runs-on: ubuntu-latest
|
60
|
+
needs: build-test
|
61
|
+
steps:
|
62
|
+
- uses: actions/checkout@v4
|
63
|
+
with:
|
64
|
+
fetch-depth: 0
|
65
|
+
|
66
|
+
- name: Setup Python
|
67
|
+
uses: actions/setup-python@v5
|
68
|
+
with:
|
69
|
+
python-version: "3.12"
|
70
|
+
|
71
|
+
- name: Install package (editable)
|
72
|
+
run: |
|
73
|
+
python -m pip install --upgrade pip
|
74
|
+
python -m pip install -e .[dev]
|
75
|
+
|
76
|
+
- name: Run consolidated test runner
|
77
|
+
run: |
|
78
|
+
echo "Running consolidated test runner..."
|
79
|
+
python tests/run_all_tests.py
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 15.4.
|
3
|
+
Version: 15.4.34
|
4
4
|
Summary: Compile MDL language with explicit scoping into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
|
5
5
|
Project-URL: Homepage, https://www.mcmdl.com
|
6
6
|
Project-URL: Documentation, https://www.mcmdl.com/docs
|
@@ -116,8 +116,8 @@ function game:start_game {
|
|
116
116
|
player_health<@s> = 20;
|
117
117
|
}
|
118
118
|
|
119
|
-
// Function
|
120
|
-
function game:reset_player
|
119
|
+
// Function declaration (no scope on definition)
|
120
|
+
function game:reset_player {
|
121
121
|
player_score<@s> = 0;
|
122
122
|
player_health<@s> = 20;
|
123
123
|
}
|
@@ -330,7 +330,7 @@ tag advancement "first_sword" "advancements/first_sword.json";
|
|
330
330
|
var num global_counter<@a> = 0;
|
331
331
|
var num player_counter<@s> = 0;
|
332
332
|
|
333
|
-
function "increment"
|
333
|
+
function "increment" {
|
334
334
|
global_counter<@a> = $global_counter<@a>$ + 1;
|
335
335
|
player_counter<@s> = $player_counter<@s>$ + 1;
|
336
336
|
|
@@ -341,7 +341,7 @@ function "increment"<@s> {
|
|
341
341
|
say "Player $player_counter<@s>$ just incremented the counter!";
|
342
342
|
}
|
343
343
|
|
344
|
-
function "reset_player"
|
344
|
+
function "reset_player" {
|
345
345
|
player_counter<@s> = 0;
|
346
346
|
tellraw @s {"text":"Counter reset!"};
|
347
347
|
}
|
@@ -364,7 +364,7 @@ var num red_score<@a[team=red]> = 0;
|
|
364
364
|
var num blue_score<@a[team=blue]> = 0;
|
365
365
|
var num player_score<@s> = 0;
|
366
366
|
|
367
|
-
function "award_points"
|
367
|
+
function "award_points" {
|
368
368
|
player_score<@s> = $player_score<@s>$ + 10;
|
369
369
|
|
370
370
|
if $player_score<@s>$ > 100 {
|
@@ -381,14 +381,14 @@ function "award_points"<@s> {
|
|
381
381
|
tellraw @s {"text":"Your score: ","extra":[{"score":{"name":"@s","objective":"player_score"}}]};
|
382
382
|
}
|
383
383
|
|
384
|
-
function "show_leaderboard"
|
384
|
+
function "show_leaderboard" {
|
385
385
|
tellraw @s {"text":"=== LEADERBOARD ==="};
|
386
386
|
tellraw @s {"text":"Red Team: ","extra":[{"score":{"name":"@s","objective":"red_score"}}]};
|
387
387
|
tellraw @s {"text":"Blue Team: ","extra":[{"score":{"name":"@s","objective":"blue_score"}}]};
|
388
388
|
tellraw @s {"text":"Your Score: ","extra":[{"score":{"name":"@s","objective":"player_score"}}]};
|
389
389
|
}
|
390
390
|
|
391
|
-
function "countdown_timer"
|
391
|
+
function "countdown_timer" {
|
392
392
|
var num timer<@s> = 10;
|
393
393
|
|
394
394
|
while $timer<@s>$ > 0 {
|
@@ -418,7 +418,7 @@ var num player_exp<@s> = 0;
|
|
418
418
|
var num global_high_score<@a> = 0;
|
419
419
|
var num game_timer<@a> = 0;
|
420
420
|
|
421
|
-
function "gain_experience"
|
421
|
+
function "gain_experience" {
|
422
422
|
player_exp<@s> = $player_exp<@s>$ + 10;
|
423
423
|
|
424
424
|
if $player_exp<@s>$ >= 100 {
|
@@ -433,7 +433,7 @@ function "gain_experience"<@s> {
|
|
433
433
|
}
|
434
434
|
}
|
435
435
|
|
436
|
-
function "update_timer"
|
436
|
+
function "update_timer" {
|
437
437
|
game_timer<@a> = $game_timer<@a>$ + 1;
|
438
438
|
|
439
439
|
if $game_timer<@a>$ >= 1200 {
|
@@ -660,7 +660,7 @@ Tokenized as:
|
|
660
660
|
|
661
661
|
#### **Function with Scope**
|
662
662
|
```
|
663
|
-
function game:reset_player
|
663
|
+
function game:reset_player {
|
664
664
|
```
|
665
665
|
Tokenized as:
|
666
666
|
1. `FUNCTION` (`function`)
|
@@ -961,7 +961,7 @@ var num _internal_counter<@s> = 0;
|
|
961
961
|
#### **Function Names with Numbers**
|
962
962
|
```mdl
|
963
963
|
// Valid - numbers are allowed in function names
|
964
|
-
function game:level_1_complete
|
964
|
+
function game:level_1_complete {
|
965
965
|
player_score<@s> = player_score<@s> + 100;
|
966
966
|
}
|
967
967
|
```
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
28
28
|
commit_id: COMMIT_ID
|
29
29
|
__commit_id__: COMMIT_ID
|
30
30
|
|
31
|
-
__version__ = version = '15.4.
|
32
|
-
__version_tuple__ = version_tuple = (15, 4,
|
31
|
+
__version__ = version = '15.4.34'
|
32
|
+
__version_tuple__ = version_tuple = (15, 4, 34)
|
33
33
|
|
34
|
-
__commit_id__ = commit_id = '
|
34
|
+
__commit_id__ = commit_id = 'g600f6b0c4'
|
@@ -26,6 +26,8 @@ Examples:
|
|
26
26
|
mdl new my_project # Create a new project
|
27
27
|
"""
|
28
28
|
)
|
29
|
+
# Global options
|
30
|
+
parser.add_argument('--version', action='store_true', help='Show version and exit')
|
29
31
|
|
30
32
|
subparsers = parser.add_subparsers(dest='command', help='Available commands')
|
31
33
|
|
@@ -34,6 +36,7 @@ Examples:
|
|
34
36
|
build_parser.add_argument('--mdl', required=True, help='MDL file(s) or directory to build')
|
35
37
|
build_parser.add_argument('-o', '--output', required=True, help='Output directory for the datapack')
|
36
38
|
build_parser.add_argument('--verbose', action='store_true', help='Show detailed output')
|
39
|
+
build_parser.add_argument('--wrapper', help='Optional wrapper directory name for the datapack output')
|
37
40
|
|
38
41
|
# Check command
|
39
42
|
check_parser = subparsers.add_parser('check', help='Check MDL files for syntax errors')
|
@@ -45,9 +48,19 @@ Examples:
|
|
45
48
|
new_parser.add_argument('project_name', help='Name of the new project')
|
46
49
|
new_parser.add_argument('--pack-name', help='Custom name for the datapack')
|
47
50
|
new_parser.add_argument('--pack-format', type=int, default=82, help='Pack format number (default: 82)')
|
51
|
+
new_parser.add_argument('--output', help='Directory to create the project in (defaults to current directory)')
|
48
52
|
|
49
53
|
args = parser.parse_args()
|
50
54
|
|
55
|
+
if args.version and not args.command:
|
56
|
+
# Print version and exit
|
57
|
+
try:
|
58
|
+
from . import __version__
|
59
|
+
except Exception:
|
60
|
+
__version__ = "0.0.0"
|
61
|
+
print(__version__)
|
62
|
+
return 0
|
63
|
+
|
51
64
|
if not args.command:
|
52
65
|
parser.print_help()
|
53
66
|
return 1
|
@@ -133,6 +146,7 @@ def build_command(args):
|
|
133
146
|
print(f"Compiling to {output_dir}...")
|
134
147
|
|
135
148
|
compiler = MDLCompiler()
|
149
|
+
# Note: --wrapper is currently accepted for compatibility but not required by compiler
|
136
150
|
output_path = compiler.compile(final_ast, str(output_dir))
|
137
151
|
|
138
152
|
print(f"Successfully built datapack: {output_path}")
|
@@ -193,9 +207,10 @@ def new_command(args):
|
|
193
207
|
project_name = args.project_name
|
194
208
|
pack_name = args.pack_name or project_name
|
195
209
|
pack_format = args.pack_format
|
210
|
+
base_dir = Path(args.output) if getattr(args, 'output', None) else Path('.')
|
211
|
+
project_dir = base_dir / project_name
|
196
212
|
|
197
213
|
# Create project directory
|
198
|
-
project_dir = Path(project_name)
|
199
214
|
if project_dir.exists():
|
200
215
|
print(f"Error: Project directory '{project_name}' already exists")
|
201
216
|
return 1
|
@@ -213,7 +228,7 @@ var num counter<@s> = 0;
|
|
213
228
|
var num global_timer<@a> = 0;
|
214
229
|
|
215
230
|
// Main function
|
216
|
-
function {project_name}:main
|
231
|
+
function {project_name}:main {{
|
217
232
|
say "Hello from {project_name}!";
|
218
233
|
|
219
234
|
// Variable example
|
@@ -228,13 +243,13 @@ function {project_name}:main<@s> {{
|
|
228
243
|
}}
|
229
244
|
}}
|
230
245
|
|
231
|
-
//
|
232
|
-
function {project_name}:
|
233
|
-
say "Datapack
|
246
|
+
// Init function (avoid reserved names like 'load' or 'tick')
|
247
|
+
function {project_name}:init {{
|
248
|
+
say "Datapack initialized successfully!";
|
234
249
|
}}
|
235
250
|
|
236
251
|
// Hook to run on load
|
237
|
-
on_load {project_name}:
|
252
|
+
on_load {project_name}:init;
|
238
253
|
'''
|
239
254
|
|
240
255
|
with open(mdl_file, 'w', encoding='utf-8') as f:
|
@@ -281,7 +296,7 @@ For more information, visit: https://www.mcmdl.com
|
|
281
296
|
with open(readme_file, 'w', encoding='utf-8') as f:
|
282
297
|
f.write(readme_content)
|
283
298
|
|
284
|
-
print(f"Created new MDL project: {
|
299
|
+
print(f"Created new MDL project: {project_dir}/")
|
285
300
|
print(f" - {mdl_file}")
|
286
301
|
print(f" - {readme_file}")
|
287
302
|
print(f"\nNext steps:")
|
@@ -16,6 +16,7 @@ from .ast_nodes import (
|
|
16
16
|
)
|
17
17
|
from .dir_map import get_dir_map, DirMap
|
18
18
|
from .mdl_errors import MDLCompilerError
|
19
|
+
from .mdl_lexer import TokenType
|
19
20
|
|
20
21
|
|
21
22
|
class MDLCompiler:
|
@@ -164,15 +165,6 @@ class MDLCompiler:
|
|
164
165
|
for temp_cmd in self.temp_commands:
|
165
166
|
lines.append(temp_cmd)
|
166
167
|
|
167
|
-
# Add any generated functions that were created during compilation
|
168
|
-
if hasattr(self, 'generated_functions') and self.generated_functions:
|
169
|
-
lines.append("")
|
170
|
-
lines.append("# Generated functions:")
|
171
|
-
for func_name, func_lines in self.generated_functions.items():
|
172
|
-
lines.append(f"# {func_name}:")
|
173
|
-
lines.extend(func_lines)
|
174
|
-
lines.append("")
|
175
|
-
|
176
168
|
return "\n".join(lines)
|
177
169
|
|
178
170
|
def _compile_hooks(self, hooks: List[HookDeclaration], namespace_dir: Path):
|
@@ -239,6 +231,12 @@ class MDLCompiler:
|
|
239
231
|
load_file = functions_dir / "load.mcfunction"
|
240
232
|
with open(load_file, 'w') as f:
|
241
233
|
f.write(load_content)
|
234
|
+
# Ensure minecraft load tag points to namespace:load
|
235
|
+
tags_fn_dir = self.output_dir / "data" / "minecraft" / self.dir_map.tags_function
|
236
|
+
tags_fn_dir.mkdir(parents=True, exist_ok=True)
|
237
|
+
load_tag_file = tags_fn_dir / "load.json"
|
238
|
+
with open(load_tag_file, 'w') as f:
|
239
|
+
json.dump({"values": [f"{self.current_namespace}:load"]}, f, indent=2)
|
242
240
|
|
243
241
|
# Create tick function if needed
|
244
242
|
tick_hooks = [h for h in hooks if h.hook_type == "on_tick"]
|
@@ -247,6 +245,10 @@ class MDLCompiler:
|
|
247
245
|
tick_file = functions_dir / "tick.mcfunction"
|
248
246
|
with open(tick_file, 'w') as f:
|
249
247
|
f.write(tick_content)
|
248
|
+
# Ensure minecraft tick tag points to namespace:tick
|
249
|
+
tick_tag_file = tags_fn_dir / "tick.json"
|
250
|
+
with open(tick_tag_file, 'w') as f:
|
251
|
+
json.dump({"values": [f"{self.current_namespace}:tick"]}, f, indent=2)
|
250
252
|
|
251
253
|
def _generate_load_function(self, hooks: List[HookDeclaration]) -> str:
|
252
254
|
"""Generate the content of load.mcfunction."""
|
@@ -380,19 +382,19 @@ class MDLCompiler:
|
|
380
382
|
|
381
383
|
def _if_statement_to_command(self, if_stmt: IfStatement) -> str:
|
382
384
|
"""Convert if statement to proper Minecraft execute if commands."""
|
383
|
-
condition = self.
|
385
|
+
condition, invert_then = self._build_condition(if_stmt.condition)
|
384
386
|
lines = []
|
385
387
|
|
386
|
-
#
|
387
|
-
|
388
|
-
|
389
|
-
|
388
|
+
# Prepare function name for the then branch
|
389
|
+
if_function_name = self._generate_if_function_name()
|
390
|
+
# Generate condition command
|
391
|
+
if invert_then:
|
392
|
+
lines.append(f"execute unless {condition} run function {self.current_namespace}:{if_function_name}")
|
390
393
|
else:
|
391
|
-
|
392
|
-
lines.append(f"execute if {condition} run function {self.current_namespace}:{self._generate_if_function_name()}")
|
394
|
+
lines.append(f"execute if {condition} run function {self.current_namespace}:{if_function_name}")
|
393
395
|
|
394
|
-
# Generate the if body function
|
395
|
-
if_body_lines = [f"# Function: {self.current_namespace}:{
|
396
|
+
# Generate the if body function content
|
397
|
+
if_body_lines = [f"# Function: {self.current_namespace}:{if_function_name}"]
|
396
398
|
for stmt in if_stmt.then_body:
|
397
399
|
if isinstance(stmt, VariableAssignment):
|
398
400
|
cmd = self._variable_assignment_to_command(stmt)
|
@@ -415,18 +417,26 @@ class MDLCompiler:
|
|
415
417
|
# Handle else body if it exists
|
416
418
|
if if_stmt.else_body:
|
417
419
|
if isinstance(if_stmt.else_body, list) and len(if_stmt.else_body) == 1 and isinstance(if_stmt.else_body[0], IfStatement):
|
418
|
-
#
|
419
|
-
|
420
|
-
|
420
|
+
# Else-if: create an else function wrapper that contains the nested if
|
421
|
+
else_function_name = self._generate_else_function_name()
|
422
|
+
if invert_then:
|
423
|
+
lines.append(f"execute if {condition} run function {self.current_namespace}:{else_function_name}")
|
424
|
+
else:
|
425
|
+
lines.append(f"execute unless {condition} run function {self.current_namespace}:{else_function_name}")
|
426
|
+
else_body_lines = [f"# Function: {self.current_namespace}:{else_function_name}"]
|
427
|
+
nested_cmd = self._if_statement_to_command(if_stmt.else_body[0])
|
428
|
+
for nested_line in nested_cmd.split('\n'):
|
429
|
+
if nested_line:
|
430
|
+
else_body_lines.append(nested_line)
|
431
|
+
self._store_generated_function(else_function_name, else_body_lines)
|
421
432
|
else:
|
422
|
-
#
|
423
|
-
|
424
|
-
|
433
|
+
# Regular else: compile its body into its own function
|
434
|
+
else_function_name = self._generate_else_function_name()
|
435
|
+
if invert_then:
|
436
|
+
lines.append(f"execute if {condition} run function {self.current_namespace}:{else_function_name}")
|
425
437
|
else:
|
426
|
-
lines.append(f"execute unless {condition} run function {self.current_namespace}:{
|
427
|
-
|
428
|
-
# Generate the else body function
|
429
|
-
else_body_lines = [f"# Function: {self.current_namespace}:{self._generate_else_function_name()}"]
|
438
|
+
lines.append(f"execute unless {condition} run function {self.current_namespace}:{else_function_name}")
|
439
|
+
else_body_lines = [f"# Function: {self.current_namespace}:{else_function_name}"]
|
430
440
|
for stmt in if_stmt.else_body:
|
431
441
|
if isinstance(stmt, VariableAssignment):
|
432
442
|
cmd = self._variable_assignment_to_command(stmt)
|
@@ -445,12 +455,10 @@ class MDLCompiler:
|
|
445
455
|
elif isinstance(stmt, FunctionCall):
|
446
456
|
cmd = self._function_call_to_command(stmt)
|
447
457
|
else_body_lines.append(cmd)
|
448
|
-
|
449
|
-
# Store the else function for later generation
|
450
|
-
self._store_generated_function(self._generate_else_function_name(), else_body_lines)
|
458
|
+
self._store_generated_function(else_function_name, else_body_lines)
|
451
459
|
|
452
|
-
# Store the if function
|
453
|
-
self._store_generated_function(
|
460
|
+
# Store the if function as its own file
|
461
|
+
self._store_generated_function(if_function_name, if_body_lines)
|
454
462
|
|
455
463
|
return "\n".join(lines)
|
456
464
|
|
@@ -494,7 +502,7 @@ class MDLCompiler:
|
|
494
502
|
else:
|
495
503
|
loop_body_lines.append(f"execute if {condition} run function {self.current_namespace}:{loop_function_name}")
|
496
504
|
|
497
|
-
# Store the loop function
|
505
|
+
# Store the loop function as its own file
|
498
506
|
self._store_generated_function(loop_function_name, loop_body_lines)
|
499
507
|
|
500
508
|
return "\n".join(lines)
|
@@ -529,10 +537,15 @@ class MDLCompiler:
|
|
529
537
|
return f"while_{self.while_counter}"
|
530
538
|
|
531
539
|
def _store_generated_function(self, name: str, lines: List[str]):
|
532
|
-
"""Store a generated function
|
533
|
-
if
|
534
|
-
self.
|
535
|
-
|
540
|
+
"""Store a generated function as a separate file under the same namespace."""
|
541
|
+
if self.dir_map:
|
542
|
+
functions_dir = self.output_dir / "data" / self.current_namespace / self.dir_map.function
|
543
|
+
else:
|
544
|
+
functions_dir = self.output_dir / "data" / self.current_namespace / "functions"
|
545
|
+
functions_dir.mkdir(parents=True, exist_ok=True)
|
546
|
+
func_file = functions_dir / f"{name}.mcfunction"
|
547
|
+
with open(func_file, 'w') as f:
|
548
|
+
f.write("\n".join(lines) + "\n")
|
536
549
|
|
537
550
|
def _function_call_to_command(self, func_call: FunctionCall) -> str:
|
538
551
|
"""Convert function call to execute command."""
|
@@ -544,6 +557,15 @@ class MDLCompiler:
|
|
544
557
|
def _expression_to_value(self, expression: Any) -> str:
|
545
558
|
"""Convert expression to a value string."""
|
546
559
|
if isinstance(expression, LiteralExpression):
|
560
|
+
# Format numbers as integers if possible
|
561
|
+
if isinstance(expression.value, (int, float)):
|
562
|
+
try:
|
563
|
+
v = float(expression.value)
|
564
|
+
if v.is_integer():
|
565
|
+
return str(int(v))
|
566
|
+
return str(v)
|
567
|
+
except Exception:
|
568
|
+
return str(expression.value)
|
547
569
|
return str(expression.value)
|
548
570
|
elif isinstance(expression, VariableSubstitution):
|
549
571
|
objective = self.variables.get(expression.name, expression.name)
|
@@ -560,13 +582,76 @@ class MDLCompiler:
|
|
560
582
|
return str(expression)
|
561
583
|
|
562
584
|
def _expression_to_condition(self, expression: Any) -> str:
|
563
|
-
"""Convert expression to a condition string."""
|
585
|
+
"""Legacy: Convert expression to a naive condition string (internal use)."""
|
564
586
|
if isinstance(expression, BinaryExpression):
|
565
587
|
left = self._expression_to_value(expression.left)
|
566
588
|
right = self._expression_to_value(expression.right)
|
567
589
|
return f"{left} {expression.operator} {right}"
|
568
590
|
else:
|
569
591
|
return self._expression_to_value(expression)
|
592
|
+
|
593
|
+
def _build_condition(self, expression: Any) -> (str, bool):
|
594
|
+
"""Build a valid Minecraft execute condition.
|
595
|
+
Returns (condition_string, invert_then) where invert_then True means the THEN branch should use 'unless'.
|
596
|
+
"""
|
597
|
+
# Default: generic expression string, no inversion
|
598
|
+
invert_then = False
|
599
|
+
|
600
|
+
if isinstance(expression, BinaryExpression):
|
601
|
+
left = expression.left
|
602
|
+
right = expression.right
|
603
|
+
op = expression.operator
|
604
|
+
# Variable vs literal
|
605
|
+
if isinstance(left, VariableSubstitution) and isinstance(right, LiteralExpression) and isinstance(right.value, (int, float)):
|
606
|
+
objective = self.variables.get(left.name, left.name)
|
607
|
+
scope = left.scope.strip("<>")
|
608
|
+
# Normalize number
|
609
|
+
try:
|
610
|
+
v = float(right.value)
|
611
|
+
except Exception:
|
612
|
+
v = None
|
613
|
+
if v is not None:
|
614
|
+
n = int(v) if float(v).is_integer() else v
|
615
|
+
if op == TokenType.GREATER:
|
616
|
+
rng = f"{int(n)+1}.." if isinstance(n, int) else f"{v+1}.."
|
617
|
+
return (f"score {scope} {objective} matches {rng}", False)
|
618
|
+
if op == TokenType.GREATER_EQUAL:
|
619
|
+
rng = f"{int(n)}.."
|
620
|
+
return (f"score {scope} {objective} matches {rng}", False)
|
621
|
+
if op == TokenType.LESS:
|
622
|
+
rng = f"..{int(n)-1}"
|
623
|
+
return (f"score {scope} {objective} matches {rng}", False)
|
624
|
+
if op == TokenType.LESS_EQUAL:
|
625
|
+
rng = f"..{int(n)}"
|
626
|
+
return (f"score {scope} {objective} matches {rng}", False)
|
627
|
+
if op == TokenType.EQUAL:
|
628
|
+
rng = f"{int(n)}"
|
629
|
+
return (f"score {scope} {objective} matches {rng}", False)
|
630
|
+
if op == TokenType.NOT_EQUAL:
|
631
|
+
rng = f"{int(n)}"
|
632
|
+
return (f"score {scope} {objective} matches {rng}", True)
|
633
|
+
# Variable vs variable
|
634
|
+
if isinstance(left, VariableSubstitution) and isinstance(right, VariableSubstitution):
|
635
|
+
lobj = self.variables.get(left.name, left.name)
|
636
|
+
lscope = left.scope.strip("<>")
|
637
|
+
robj = self.variables.get(right.name, right.name)
|
638
|
+
rscope = right.scope.strip("<>")
|
639
|
+
if op in (TokenType.GREATER, TokenType.GREATER_EQUAL, TokenType.LESS, TokenType.LESS_EQUAL, TokenType.EQUAL):
|
640
|
+
comp_map = {
|
641
|
+
TokenType.GREATER: ">",
|
642
|
+
TokenType.GREATER_EQUAL: ">=",
|
643
|
+
TokenType.LESS: "<",
|
644
|
+
TokenType.LESS_EQUAL: "<=",
|
645
|
+
TokenType.EQUAL: "="
|
646
|
+
}
|
647
|
+
comp = comp_map[op]
|
648
|
+
return (f"score {lscope} {lobj} {comp} {rscope} {robj}", False)
|
649
|
+
if op == TokenType.NOT_EQUAL:
|
650
|
+
# Use equals with inversion
|
651
|
+
return (f"score {lscope} {lobj} = {rscope} {robj}", True)
|
652
|
+
|
653
|
+
# Fallback: treat as generic condition string
|
654
|
+
return (self._expression_to_condition(expression), False)
|
570
655
|
|
571
656
|
def _compile_expression_to_temp(self, expression: BinaryExpression, temp_var: str):
|
572
657
|
"""Compile a complex expression to a temporary variable using valid Minecraft commands."""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 15.4.
|
3
|
+
Version: 15.4.34
|
4
4
|
Summary: Compile MDL language with explicit scoping into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
|
5
5
|
Project-URL: Homepage, https://www.mcmdl.com
|
6
6
|
Project-URL: Documentation, https://www.mcmdl.com/docs
|
@@ -339,6 +339,10 @@ scripts/git-bash/test_cli-gitbash.sh
|
|
339
339
|
structures/diamond_sword.json
|
340
340
|
structures/test_structure.json
|
341
341
|
structures/workshop.json
|
342
|
+
temp_output/pack.mcmeta
|
343
|
+
temp_output/data/test/function/helper.mcfunction
|
344
|
+
temp_output/data/test/function/load.mcfunction
|
345
|
+
temp_output/data/test/function/main.mcfunction
|
342
346
|
test_project/complex_test.mdl
|
343
347
|
tests/__init__.py
|
344
348
|
tests/run_all_tests.py
|