minecraft-datapack-language 15.4.33__tar.gz → 15.4.35__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.33 → minecraft_datapack_language-15.4.35}/CONDITIONALS_IMPLEMENTATION.md +5 -5
- {minecraft_datapack_language-15.4.33/minecraft_datapack_language.egg-info → minecraft_datapack_language-15.4.35}/PKG-INFO +1 -1
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_config.yml +2 -2
- minecraft_datapack_language-15.4.35/docs/_data/version.yml +3 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/contributing.md +3 -3
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/docs-hub.md +1 -1
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/documentation.md +3 -3
- minecraft_datapack_language-15.4.33/docs/_docs/python-api.md → minecraft_datapack_language-15.4.35/docs/_docs/python-bindings.md +38 -8
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/docs.md +3 -3
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/index.md +2 -2
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/__init__.py +3 -1
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/_version.py +3 -3
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_compiler.py +24 -13
- minecraft_datapack_language-15.4.35/minecraft_datapack_language/python_api.py +207 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35/minecraft_datapack_language.egg-info}/PKG-INFO +1 -1
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/SOURCES.txt +5 -1
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/pytest.ini +1 -1
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/run_all_tests.py +5 -5
- minecraft_datapack_language-15.4.35/tests/test_codegen_naming_and_logic.py +95 -0
- minecraft_datapack_language-15.4.35/tests/test_python_bindings.py +57 -0
- minecraft_datapack_language-15.4.33/docs/_data/version.yml +0 -3
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.cursor/rules/aispec.mdc +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/actions/mdl-compile/action.yml +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/ci.yml +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/docs.yml +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/pypi.yml +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/release.yml +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/update-website-version.yml +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.gitignore +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/COMPILER_FIXES_SUMMARY.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/LICENSE +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/Makefile +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/README.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/first_spell.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/other_advancement.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/test_advancement.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/comprehensive_error_test.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/control_test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/control_test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/control_test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/if_test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/if_test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/countdown_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/countdown_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_else_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_7.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_7.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/while_test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/while_test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/dist.zip +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/.env +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/404.html +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/Gemfile +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/README.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/cli-reference.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/examples.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/getting-started.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/language-reference.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/multi-file-projects.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/vscode-extension.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_includes/head-custom.html +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_includes/navigation.html +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_layouts/default.html +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_layouts/page.html +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_plugins/test_version.rb +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_plugins/version_reader.rb +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/assets/css/style.css +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/downloads.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-64.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/examples/hello_world.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/examples/scope_examples.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/examples/simple_counter.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-64.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/item_modifiers/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/item_modifiers/enchant_tool.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/item_modifiers/test_item_modifier.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/epic_loot.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/main_loot.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/test_loot.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/mdllocal.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/ast_nodes.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/cli.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/dir_map.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_errors.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_lexer.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_linter.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_parser.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/utils.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/requires.txt +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/multi_scope_example.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/my_awesome_pack/README.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/has_mana.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/other_predicate.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/test_predicate.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/pyproject.toml +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/custom_pickaxe.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/first.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/inlet.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/main_recipe.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/outlet.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/pipe.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/second.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/test_recipe.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/wrench.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scope_demo.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scoreboard_test.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/UpdateMDL.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/bootstrap.ps1 +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/bootstrap.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/build_pkg.ps1 +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/build_pkg.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_build.ps1 +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_build.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_setup.ps1 +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_setup.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/git-bash/test_cli-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/release.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_cli.ps1 +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_cli.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_dev.ps1 +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_dev.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/update_docs.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/update_version_info.sh +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/setup.cfg +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/structures/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/structures/test_structure.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/structures/workshop.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tellraw_variables_test.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/data/test/function/helper.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/data/test/function/load.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/data/test/function/main.mcfunction +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/pack.mcmeta +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_all_registry.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_complex_scenarios.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_comprehensive_fixes.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_if_else_while.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_project/complex_test.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_simple.mdl +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/__init__.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_cli.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_compiler_fixes.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_complex_scenarios.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_comprehensive_end_to_end.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_python_api.py +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/README.md +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/language-configuration.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/package-lock.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/package.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/snippets/mdl.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/src/extension.ts +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/themes/mdl-color-theme.json +0 -0
- {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/tsconfig.json +0 -0
@@ -37,11 +37,11 @@ This document summarizes the implementation of if/else if/else functionality in
|
|
37
37
|
- `README.md` - Added conditional blocks section
|
38
38
|
- `docs/_docs/language-reference.md` - Added comprehensive conditional documentation
|
39
39
|
- `docs/_docs/examples.md` - Added conditional examples
|
40
|
-
- `docs/_docs/python-
|
40
|
+
- `docs/_docs/python-bindings.md` - Added conditional Python bindings examples
|
41
41
|
|
42
42
|
### Tests
|
43
43
|
- `test_examples/conditionals.mdl` - Comprehensive MDL test file
|
44
|
-
- `test_examples/conditionals.py` - Python
|
44
|
+
- `test_examples/conditionals.py` - Python bindings test file
|
45
45
|
- `test_regression.py` - Regression test suite
|
46
46
|
- `test_examples/run_all_tests.py` - Updated to include conditionals
|
47
47
|
|
@@ -55,12 +55,12 @@ This document summarizes the implementation of if/else if/else functionality in
|
|
55
55
|
- ✅ Conditional function calls
|
56
56
|
- ✅ Invalid syntax handling
|
57
57
|
- ✅ Regression testing (existing functionality)
|
58
|
-
- ✅ Python
|
58
|
+
- ✅ Python bindings compatibility
|
59
59
|
|
60
60
|
### Test Results
|
61
61
|
- **Regression Tests**: 7/7 passed ✅
|
62
62
|
- **Comprehensive Tests**: 17/17 passed ✅
|
63
|
-
- **Python
|
63
|
+
- **Python bindings tests**: All passed ✅
|
64
64
|
|
65
65
|
## 📖 Documentation
|
66
66
|
|
@@ -152,7 +152,7 @@ execute unless entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:
|
|
152
152
|
- ✅ Comprehensive testing completed
|
153
153
|
- ✅ Documentation updated
|
154
154
|
- ✅ Examples created
|
155
|
-
- ✅ Python
|
155
|
+
- ✅ Python bindings support
|
156
156
|
- ✅ Regression tests passing
|
157
157
|
- ✅ Backward compatibility verified
|
158
158
|
- ✅ Error handling implemented
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 15.4.
|
3
|
+
Version: 15.4.35
|
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
|
{minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_config.yml
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
title: Minecraft Datapack Language (MDL) v12
|
2
|
-
description: A powerful compiler that lets you write Minecraft datapacks in a modern JavaScript-style language (.mdl) or via
|
2
|
+
description: A powerful compiler that lets you write Minecraft datapacks in a modern JavaScript-style language (.mdl) or via clean Python bindings
|
3
3
|
url: "https://www.mcmdl.com"
|
4
4
|
github_username: aaron777collins
|
5
5
|
github_repo: MinecraftDatapackLanguage
|
@@ -68,7 +68,7 @@ nav:
|
|
68
68
|
url: /docs/multi-file-projects/
|
69
69
|
- title: CLI Reference
|
70
70
|
url: /docs/cli-reference/
|
71
|
-
- title: Python
|
71
|
+
- title: Python Bindings
|
72
72
|
url: /docs/python-api/
|
73
73
|
- title: VS Code Extension
|
74
74
|
url: /docs/vscode-extension/
|
@@ -73,9 +73,9 @@ MinecraftDatapackLanguage/
|
|
73
73
|
- **Configuration**: Add configuration options
|
74
74
|
- **Integration**: Better integration with other tools
|
75
75
|
|
76
|
-
### 3. Python
|
76
|
+
### 3. Python Bindings
|
77
77
|
|
78
|
-
- **
|
78
|
+
- **Bindings improvements**: Enhance the Python bindings
|
79
79
|
- **New features**: Add new capabilities
|
80
80
|
- **Documentation**: Improve API documentation
|
81
81
|
- **Examples**: Add more examples
|
@@ -135,7 +135,7 @@ python -m pytest
|
|
135
135
|
mdl --help
|
136
136
|
mdl build --mdl sample.mdl -o test_output
|
137
137
|
|
138
|
-
# Test the Python
|
138
|
+
# Test the Python bindings
|
139
139
|
python -c "from minecraft_datapack_language import Pack; print('API works!')"
|
140
140
|
```
|
141
141
|
|
{minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/docs-hub.md
RENAMED
@@ -58,7 +58,7 @@ Search and browse all available documentation for the Minecraft Datapack Languag
|
|
58
58
|
</div>
|
59
59
|
|
60
60
|
<div class="doc-card" data-categories="python api programming">
|
61
|
-
<h3>🐍 Python
|
61
|
+
<h3>🐍 Python Bindings</h3>
|
62
62
|
<p>Programmatic access to MDL functionality for automation and integration.</p>
|
63
63
|
<div class="doc-meta">
|
64
64
|
<span class="category">API</span>
|
@@ -17,12 +17,12 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
|
|
17
17
|
{% assign language_ref = site.nav | where: "title", "Language Reference" | first %}
|
18
18
|
{% assign multi_file = site.nav | where: "title", "Multi-file Projects" | first %}
|
19
19
|
{% assign cli_ref = site.nav | where: "title", "CLI Reference" | first %}
|
20
|
-
{% assign python_api = site.nav | where: "title", "Python
|
20
|
+
{% assign python_api = site.nav | where: "title", "Python Bindings" | first %}
|
21
21
|
|
22
22
|
- **[Language Reference]({{ language_ref.url }})** - Complete syntax and language features
|
23
23
|
- **[Multi-file Projects]({{ multi_file.url }})** - How to organize and structure larger MDL projects
|
24
24
|
- **[CLI Reference]({{ cli_ref.url }})** - Command-line interface usage and options
|
25
|
-
- **[Python
|
25
|
+
- **[Python Bindings]({{ python_api.url }})** - Programmatic access to MDL functionality
|
26
26
|
|
27
27
|
## Tools and Extensions
|
28
28
|
|
@@ -64,7 +64,7 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
|
|
64
64
|
</div>
|
65
65
|
|
66
66
|
<div class="doc-card">
|
67
|
-
<h3>🐍 Python
|
67
|
+
<h3>🐍 Python Bindings</h3>
|
68
68
|
<p>Programmatic access to MDL functionality for automation and integration.</p>
|
69
69
|
<a href="{{ python_api.url }}" class="doc-link">API Reference →</a>
|
70
70
|
</div>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
---
|
2
2
|
layout: page
|
3
|
-
title: Python
|
4
|
-
permalink: /docs/python-
|
3
|
+
title: Python Bindings
|
4
|
+
permalink: /docs/python-bindings/
|
5
5
|
---
|
6
6
|
|
7
|
-
The MDL Python
|
7
|
+
The MDL Python bindings provide a clean, programmatic way to create Minecraft datapacks. They're fully compatible with the MDL language and support all advanced features including variables, control flow, complex nesting, and the explicit scope system.
|
8
8
|
|
9
9
|
## Quick Start
|
10
10
|
|
@@ -67,6 +67,36 @@ ns.function("function_name", "command1", "command2", ...)
|
|
67
67
|
**Methods:**
|
68
68
|
- `function(name, *commands)` - Add a function with commands
|
69
69
|
|
70
|
+
### Control Flow and Expressions (Bindings)
|
71
|
+
|
72
|
+
Bindings include helpers to compose expressions and control flow identical to MDL:
|
73
|
+
|
74
|
+
```python
|
75
|
+
from minecraft_datapack_language import Pack
|
76
|
+
from minecraft_datapack_language.python_api import num, var_read, binop
|
77
|
+
|
78
|
+
p = Pack("Control Flow", "desc", 82)
|
79
|
+
ns = p.namespace("game")
|
80
|
+
|
81
|
+
def build_logic(fb):
|
82
|
+
# declare variable
|
83
|
+
fb.declare_var("counter", "<@s>", 0)
|
84
|
+
|
85
|
+
# counter<@s> = $counter<@s>$ + 1
|
86
|
+
fb.set("counter", "<@s>", binop(var_read("counter", "<@s>"), "PLUS", num(1)))
|
87
|
+
|
88
|
+
# if $counter<@s>$ > 5 { say "hi" } else { say "low" }
|
89
|
+
cond = binop(var_read("counter", "<@s>"), "GREATER", num(5))
|
90
|
+
fb.if_(cond, lambda t: t.say("hi"), lambda e: e.say("low"))
|
91
|
+
|
92
|
+
# while $counter<@s>$ < 10 { counter<@s> = $counter<@s>$ + 1 }
|
93
|
+
wcond = binop(var_read("counter", "<@s>"), "LESS", num(10))
|
94
|
+
fb.while_(wcond, lambda b: b.set("counter", "<@s>", binop(var_read("counter", "<@s>"), "PLUS", num(1))))
|
95
|
+
|
96
|
+
ns.function("main", build_logic)
|
97
|
+
p.build("dist")
|
98
|
+
```
|
99
|
+
|
70
100
|
## Basic Examples
|
71
101
|
|
72
102
|
### Hello World
|
@@ -121,7 +151,7 @@ def create_particle_pack():
|
|
121
151
|
|
122
152
|
### Variables and Control Flow
|
123
153
|
|
124
|
-
The
|
154
|
+
The bindings support all the advanced features of the MDL language including the explicit scope system:
|
125
155
|
|
126
156
|
```python
|
127
157
|
from minecraft_datapack_language import Pack
|
@@ -327,7 +357,7 @@ p.build("output_dir", wrapper="my_pack")
|
|
327
357
|
|
328
358
|
## Integration with MDL Files
|
329
359
|
|
330
|
-
You can use the Python
|
360
|
+
You can use the Python bindings alongside MDL files:
|
331
361
|
|
332
362
|
```python
|
333
363
|
from minecraft_datapack_language import Pack
|
@@ -340,7 +370,7 @@ def create_hybrid_pack():
|
|
340
370
|
|
341
371
|
ast = parse_mdl_js(mdl_content)
|
342
372
|
|
343
|
-
# Create pack via Python
|
373
|
+
# Create pack via Python bindings
|
344
374
|
p = Pack("Hybrid Pack", "Combines MDL and Python", 82)
|
345
375
|
|
346
376
|
# Add functions from MDL
|
@@ -348,7 +378,7 @@ def create_hybrid_pack():
|
|
348
378
|
ns = p.namespace(func.namespace)
|
349
379
|
ns.function(func.name, *func.commands)
|
350
380
|
|
351
|
-
# Add additional functions via Python
|
381
|
+
# Add additional functions via Python bindings
|
352
382
|
ns = p.namespace("python")
|
353
383
|
ns.function("python_func", "say Created via Python API!")
|
354
384
|
|
@@ -505,4 +535,4 @@ if __name__ == "__main__":
|
|
505
535
|
print("Complete example pack built successfully!")
|
506
536
|
```
|
507
537
|
|
508
|
-
The Python
|
538
|
+
The Python bindings provide a powerful, flexible way to create Minecraft datapacks with full support for the MDL language features including the explicit scope system.
|
@@ -16,12 +16,12 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
|
|
16
16
|
{% assign language_ref = site.nav | where: "title", "Language Reference" | first %}
|
17
17
|
{% assign multi_file = site.nav | where: "title", "Multi-file Projects" | first %}
|
18
18
|
{% assign cli_ref = site.nav | where: "title", "CLI Reference" | first %}
|
19
|
-
{% assign python_api = site.nav | where: "title", "Python
|
19
|
+
{% assign python_api = site.nav | where: "title", "Python Bindings" | first %}
|
20
20
|
|
21
21
|
- **[Language Reference]({{ language_ref.url }})** - Complete syntax and language features
|
22
22
|
- **[Multi-file Projects]({{ multi_file.url }})** - How to organize and structure larger MDL projects
|
23
23
|
- **[CLI Reference]({{ cli_ref.url }})** - Command-line interface usage and options
|
24
|
-
- **[Python
|
24
|
+
- **[Python Bindings]({{ python_api.url }})** - Programmatic access to MDL functionality
|
25
25
|
|
26
26
|
## Tools and Extensions
|
27
27
|
|
@@ -63,7 +63,7 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
|
|
63
63
|
</div>
|
64
64
|
|
65
65
|
<div class="doc-card">
|
66
|
-
<h3>🐍 Python
|
66
|
+
<h3>🐍 Python Bindings</h3>
|
67
67
|
<p>Programmatic access to MDL functionality for automation and integration.</p>
|
68
68
|
<a href="{{ python_api.url }}" class="doc-link">API Reference →</a>
|
69
69
|
</div>
|
@@ -74,13 +74,13 @@ A **modern JavaScript-style compiler** that lets you write Minecraft datapacks w
|
|
74
74
|
<a href="{{ site.baseurl }}/docs/multi-file-projects/" class="doc-link">Learn More →</a>
|
75
75
|
</div>
|
76
76
|
<div class="doc-card">
|
77
|
-
<h3>🐍 Python
|
77
|
+
<h3>🐍 Python Bindings</h3>
|
78
78
|
<p>Programmatic datapack creation</p>
|
79
79
|
<div class="doc-meta">
|
80
80
|
<span class="category">API</span>
|
81
81
|
<span class="category">Python</span>
|
82
82
|
</div>
|
83
|
-
<a href="{{ site.baseurl }}/docs/python-
|
83
|
+
<a href="{{ site.baseurl }}/docs/python-bindings/" class="doc-link">Python Bindings →</a>
|
84
84
|
</div>
|
85
85
|
</div>
|
86
86
|
|
@@ -3,6 +3,7 @@ from .mdl_lexer import MDLLexer, Token, TokenType
|
|
3
3
|
from .mdl_parser import MDLParser
|
4
4
|
from .ast_nodes import *
|
5
5
|
from .dir_map import DirMap
|
6
|
+
from .python_api import Pack
|
6
7
|
|
7
8
|
__all__ = [
|
8
9
|
"MDLLexer", "Token", "TokenType",
|
@@ -13,7 +14,8 @@ __all__ = [
|
|
13
14
|
"SayCommand", "TellrawCommand", "ExecuteCommand", "ScoreboardCommand",
|
14
15
|
"BinaryExpression", "UnaryExpression", "ParenthesizedExpression", "LiteralExpression",
|
15
16
|
"ScopeSelector",
|
16
|
-
"DirMap"
|
17
|
+
"DirMap",
|
18
|
+
"Pack"
|
17
19
|
]
|
18
20
|
|
19
21
|
# CLI entry point
|
@@ -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.35'
|
32
|
+
__version_tuple__ = version_tuple = (15, 4, 35)
|
33
33
|
|
34
|
-
__commit_id__ = commit_id = '
|
34
|
+
__commit_id__ = commit_id = 'gc1645a725'
|
@@ -152,6 +152,12 @@ class MDLCompiler:
|
|
152
152
|
if hasattr(self, 'temp_commands'):
|
153
153
|
self.temp_commands = []
|
154
154
|
|
155
|
+
# Set current function context and reset per-function counters
|
156
|
+
self._current_function_name = func.name
|
157
|
+
self.if_counter = 0
|
158
|
+
self.else_counter = 0
|
159
|
+
self.while_counter = 0
|
160
|
+
|
155
161
|
# Generate commands from function body
|
156
162
|
for statement in func.body:
|
157
163
|
cmd = self._statement_to_command(statement)
|
@@ -231,6 +237,12 @@ class MDLCompiler:
|
|
231
237
|
load_file = functions_dir / "load.mcfunction"
|
232
238
|
with open(load_file, 'w') as f:
|
233
239
|
f.write(load_content)
|
240
|
+
# Ensure minecraft load tag points to namespace:load
|
241
|
+
tags_fn_dir = self.output_dir / "data" / "minecraft" / self.dir_map.tags_function
|
242
|
+
tags_fn_dir.mkdir(parents=True, exist_ok=True)
|
243
|
+
load_tag_file = tags_fn_dir / "load.json"
|
244
|
+
with open(load_tag_file, 'w') as f:
|
245
|
+
json.dump({"values": [f"{self.current_namespace}:load"]}, f, indent=2)
|
234
246
|
|
235
247
|
# Create tick function if needed
|
236
248
|
tick_hooks = [h for h in hooks if h.hook_type == "on_tick"]
|
@@ -239,6 +251,10 @@ class MDLCompiler:
|
|
239
251
|
tick_file = functions_dir / "tick.mcfunction"
|
240
252
|
with open(tick_file, 'w') as f:
|
241
253
|
f.write(tick_content)
|
254
|
+
# Ensure minecraft tick tag points to namespace:tick
|
255
|
+
tick_tag_file = tags_fn_dir / "tick.json"
|
256
|
+
with open(tick_tag_file, 'w') as f:
|
257
|
+
json.dump({"values": [f"{self.current_namespace}:tick"]}, f, indent=2)
|
242
258
|
|
243
259
|
def _generate_load_function(self, hooks: List[HookDeclaration]) -> str:
|
244
260
|
"""Generate the content of load.mcfunction."""
|
@@ -487,10 +503,8 @@ class MDLCompiler:
|
|
487
503
|
loop_body_lines.append(cmd)
|
488
504
|
|
489
505
|
# Add the recursive call at the end to continue the loop
|
490
|
-
|
491
|
-
|
492
|
-
else:
|
493
|
-
loop_body_lines.append(f"execute if {condition} run function {self.current_namespace}:{loop_function_name}")
|
506
|
+
cond_str, _inv = self._build_condition(while_loop.condition)
|
507
|
+
loop_body_lines.append(f"execute if {cond_str} run function {self.current_namespace}:{loop_function_name}")
|
494
508
|
|
495
509
|
# Store the loop function as its own file
|
496
510
|
self._store_generated_function(loop_function_name, loop_body_lines)
|
@@ -507,24 +521,21 @@ class MDLCompiler:
|
|
507
521
|
|
508
522
|
def _generate_if_function_name(self) -> str:
|
509
523
|
"""Generate a unique name for an if function."""
|
510
|
-
if not hasattr(self, 'if_counter'):
|
511
|
-
self.if_counter = 0
|
512
524
|
self.if_counter += 1
|
513
|
-
|
525
|
+
prefix = getattr(self, '_current_function_name', 'fn')
|
526
|
+
return f"{prefix}__if_{self.if_counter}"
|
514
527
|
|
515
528
|
def _generate_else_function_name(self) -> str:
|
516
529
|
"""Generate a unique name for an else function."""
|
517
|
-
if not hasattr(self, 'else_counter'):
|
518
|
-
self.else_counter = 0
|
519
530
|
self.else_counter += 1
|
520
|
-
|
531
|
+
prefix = getattr(self, '_current_function_name', 'fn')
|
532
|
+
return f"{prefix}__else_{self.else_counter}"
|
521
533
|
|
522
534
|
def _generate_while_function_name(self) -> str:
|
523
535
|
"""Generate a unique name for a while function."""
|
524
|
-
if not hasattr(self, 'while_counter'):
|
525
|
-
self.while_counter = 0
|
526
536
|
self.while_counter += 1
|
527
|
-
|
537
|
+
prefix = getattr(self, '_current_function_name', 'fn')
|
538
|
+
return f"{prefix}__while_{self.while_counter}"
|
528
539
|
|
529
540
|
def _store_generated_function(self, name: str, lines: List[str]):
|
530
541
|
"""Store a generated function as a separate file under the same namespace."""
|
@@ -0,0 +1,207 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from dataclasses import dataclass
|
4
|
+
from typing import Callable, List, Optional, Union
|
5
|
+
|
6
|
+
from .ast_nodes import (
|
7
|
+
Program,
|
8
|
+
PackDeclaration,
|
9
|
+
NamespaceDeclaration,
|
10
|
+
TagDeclaration,
|
11
|
+
VariableDeclaration,
|
12
|
+
VariableAssignment,
|
13
|
+
VariableSubstitution,
|
14
|
+
FunctionDeclaration,
|
15
|
+
FunctionCall,
|
16
|
+
IfStatement,
|
17
|
+
WhileLoop,
|
18
|
+
RawBlock,
|
19
|
+
SayCommand,
|
20
|
+
BinaryExpression,
|
21
|
+
LiteralExpression,
|
22
|
+
)
|
23
|
+
from .mdl_compiler import MDLCompiler
|
24
|
+
|
25
|
+
|
26
|
+
# ---------- Expression helpers ----------
|
27
|
+
|
28
|
+
def num(value: Union[int, float]) -> LiteralExpression:
|
29
|
+
return LiteralExpression(value=value, type="number")
|
30
|
+
|
31
|
+
|
32
|
+
def var_read(name: str, scope: str) -> VariableSubstitution:
|
33
|
+
# scope must look like <@s>, <@a>, <@e[...]>, or <global>
|
34
|
+
return VariableSubstitution(name=name, scope=scope)
|
35
|
+
|
36
|
+
|
37
|
+
def binop(left, operator: str, right) -> BinaryExpression:
|
38
|
+
# operator one of: PLUS, MINUS, MULTIPLY, DIVIDE, GREATER, LESS, GREATER_EQUAL, LESS_EQUAL, EQUAL, NOT_EQUAL
|
39
|
+
return BinaryExpression(left=left, operator=operator, right=right)
|
40
|
+
|
41
|
+
|
42
|
+
# ---------- Python Bindings ----------
|
43
|
+
|
44
|
+
|
45
|
+
class Pack:
|
46
|
+
def __init__(self, name: str, description: str = "", pack_format: int = 82):
|
47
|
+
self._pack = PackDeclaration(name=name, description=description, pack_format=pack_format)
|
48
|
+
self._namespaces: List[Namespace] = []
|
49
|
+
self._variables: List[VariableDeclaration] = []
|
50
|
+
self._tags: List[TagDeclaration] = []
|
51
|
+
self._hooks: List = [] # HookDeclaration built by Namespace
|
52
|
+
|
53
|
+
def namespace(self, name: str) -> "Namespace":
|
54
|
+
ns = Namespace(self, name)
|
55
|
+
self._namespaces.append(ns)
|
56
|
+
return ns
|
57
|
+
|
58
|
+
# Lifecycle hooks reference functions by id "ns:name"
|
59
|
+
def on_load(self, function_id: str, scope: Optional[str] = None):
|
60
|
+
# defer to Namespace to create HookDeclaration during build
|
61
|
+
self._hooks.append(("on_load", function_id, scope))
|
62
|
+
|
63
|
+
def on_tick(self, function_id: str, scope: Optional[str] = None):
|
64
|
+
self._hooks.append(("on_tick", function_id, scope))
|
65
|
+
|
66
|
+
def tag(self, registry: str, name: str, values: Optional[List[str]] = None, replace: bool = False):
|
67
|
+
values = values or []
|
68
|
+
# We store TagDeclaration; the compiler writes tag files based on tag_type/name/file_path
|
69
|
+
# Here, we map registry + name to a tag reference name; file_path left as name for placeholder.
|
70
|
+
self._tags.append(TagDeclaration(tag_type=registry, name=name, file_path=name))
|
71
|
+
|
72
|
+
def declare_var(self, name: str, scope: str, initial_value: Union[int, float]) -> None:
|
73
|
+
self._variables.append(
|
74
|
+
VariableDeclaration(var_type="num", name=name, scope=scope, initial_value=num(initial_value))
|
75
|
+
)
|
76
|
+
|
77
|
+
def build(self, output_dir: str):
|
78
|
+
# Build Program AST
|
79
|
+
namespace_nodes: List[NamespaceDeclaration] = []
|
80
|
+
function_nodes: List[FunctionDeclaration] = []
|
81
|
+
hook_nodes: List = []
|
82
|
+
|
83
|
+
# Namespaces and functions
|
84
|
+
for ns in self._namespaces:
|
85
|
+
namespace_nodes.append(NamespaceDeclaration(name=ns.name))
|
86
|
+
function_nodes.extend(ns._functions)
|
87
|
+
hook_nodes.extend(ns._hooks)
|
88
|
+
|
89
|
+
# Hooks added via Pack-level convenience
|
90
|
+
for hook_type, function_id, scope in self._hooks:
|
91
|
+
ns_name, fn_name = function_id.split(":", 1)
|
92
|
+
from .ast_nodes import HookDeclaration
|
93
|
+
|
94
|
+
hook_nodes.append(
|
95
|
+
HookDeclaration(hook_type=hook_type, namespace=ns_name, name=fn_name, scope=scope)
|
96
|
+
)
|
97
|
+
|
98
|
+
program = Program(
|
99
|
+
pack=self._pack,
|
100
|
+
namespace=namespace_nodes[0] if namespace_nodes else None,
|
101
|
+
tags=self._tags,
|
102
|
+
variables=self._variables,
|
103
|
+
functions=function_nodes,
|
104
|
+
hooks=hook_nodes,
|
105
|
+
statements=[],
|
106
|
+
)
|
107
|
+
|
108
|
+
MDLCompiler(output_dir).compile(program, output_dir)
|
109
|
+
|
110
|
+
|
111
|
+
class Namespace:
|
112
|
+
def __init__(self, pack: Pack, name: str):
|
113
|
+
self._pack = pack
|
114
|
+
self.name = name
|
115
|
+
self._functions: List[FunctionDeclaration] = []
|
116
|
+
self._hooks: List = []
|
117
|
+
|
118
|
+
def function(self, name: str, *commands_or_builder: Union[str, Callable[["FunctionBuilder"], None]]):
|
119
|
+
builder = FunctionBuilder(self._pack, self, name)
|
120
|
+
|
121
|
+
# If a single callable is given, treat it as a builder lambda
|
122
|
+
if len(commands_or_builder) == 1 and callable(commands_or_builder[0]):
|
123
|
+
commands_or_builder[0](builder)
|
124
|
+
else:
|
125
|
+
# Interpret simple strings: say "..."; exec ns:name; raw lines fall back to RawBlock
|
126
|
+
for cmd in commands_or_builder:
|
127
|
+
if not isinstance(cmd, str):
|
128
|
+
continue
|
129
|
+
stripped = cmd.strip().rstrip(";")
|
130
|
+
if stripped.startswith("say "):
|
131
|
+
msg = stripped[len("say ") :].strip()
|
132
|
+
if msg.startswith("\"") and msg.endswith("\""):
|
133
|
+
msg = msg[1:-1]
|
134
|
+
builder.say(msg)
|
135
|
+
elif stripped.startswith("exec "):
|
136
|
+
target = stripped[len("exec ") :].strip()
|
137
|
+
# Optional scope in angle brackets e.g., util:helper<@s>
|
138
|
+
scope = None
|
139
|
+
if "<" in target and target.endswith(">"):
|
140
|
+
scope = target[target.index("<") :]
|
141
|
+
target = target[: target.index("<")]
|
142
|
+
builder.exec(target, scope)
|
143
|
+
else:
|
144
|
+
builder.raw(cmd)
|
145
|
+
|
146
|
+
func_node = FunctionDeclaration(namespace=self.name, name=name, scope=None, body=builder._body)
|
147
|
+
self._functions.append(func_node)
|
148
|
+
return func_node
|
149
|
+
|
150
|
+
# Convenience forwarding
|
151
|
+
def on_load(self, function_id: str, scope: Optional[str] = None):
|
152
|
+
from .ast_nodes import HookDeclaration
|
153
|
+
|
154
|
+
ns_name, fn_name = function_id.split(":", 1)
|
155
|
+
self._hooks.append(HookDeclaration(hook_type="on_load", namespace=ns_name, name=fn_name, scope=scope))
|
156
|
+
|
157
|
+
def on_tick(self, function_id: str, scope: Optional[str] = None):
|
158
|
+
from .ast_nodes import HookDeclaration
|
159
|
+
|
160
|
+
ns_name, fn_name = function_id.split(":", 1)
|
161
|
+
self._hooks.append(HookDeclaration(hook_type="on_tick", namespace=ns_name, name=fn_name, scope=scope))
|
162
|
+
|
163
|
+
|
164
|
+
class FunctionBuilder:
|
165
|
+
def __init__(self, pack: Pack, namespace: Namespace, function_name: str):
|
166
|
+
self._pack = pack
|
167
|
+
self._namespace = namespace
|
168
|
+
self._name = function_name
|
169
|
+
self._body: List = []
|
170
|
+
|
171
|
+
# Basics
|
172
|
+
def say(self, message: str):
|
173
|
+
self._body.append(SayCommand(message=message, variables=[]))
|
174
|
+
|
175
|
+
def raw(self, content: str):
|
176
|
+
self._body.append(RawBlock(content=content.rstrip(";")))
|
177
|
+
|
178
|
+
def exec(self, function_id: str, scope: Optional[str] = None):
|
179
|
+
ns, fn = function_id.split(":", 1)
|
180
|
+
self._body.append(FunctionCall(namespace=ns, name=fn, scope=scope))
|
181
|
+
|
182
|
+
# Variables
|
183
|
+
def declare_var(self, name: str, scope: str, initial_value: Union[int, float]):
|
184
|
+
self._pack.declare_var(name, scope, initial_value)
|
185
|
+
# Also set to initial value in this function
|
186
|
+
self.set(name, scope, num(initial_value))
|
187
|
+
|
188
|
+
def set(self, name: str, scope: str, value_expr) -> None:
|
189
|
+
self._body.append(VariableAssignment(name=name, scope=scope, value=value_expr))
|
190
|
+
|
191
|
+
# Control flow
|
192
|
+
def if_(self, condition_expr, then_builder: Callable[["FunctionBuilder"], None], else_builder: Optional[Callable[["FunctionBuilder"], None]] = None):
|
193
|
+
then_fb = FunctionBuilder(self._pack, self._namespace, self._name)
|
194
|
+
then_builder(then_fb)
|
195
|
+
else_body = None
|
196
|
+
if else_builder:
|
197
|
+
else_fb = FunctionBuilder(self._pack, self._namespace, self._name)
|
198
|
+
else_builder(else_fb)
|
199
|
+
else_body = else_fb._body
|
200
|
+
self._body.append(IfStatement(condition=condition_expr, then_body=then_fb._body, else_body=else_body))
|
201
|
+
|
202
|
+
def while_(self, condition_expr, body_builder: Callable[["FunctionBuilder"], None]):
|
203
|
+
body_fb = FunctionBuilder(self._pack, self._namespace, self._name)
|
204
|
+
body_builder(body_fb)
|
205
|
+
self._body.append(WhileLoop(condition=condition_expr, body=body_fb._body))
|
206
|
+
|
207
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 15.4.
|
3
|
+
Version: 15.4.35
|
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
|
@@ -28,6 +28,7 @@ test_simple.mdl
|
|
28
28
|
./minecraft_datapack_language/mdl_lexer.py
|
29
29
|
./minecraft_datapack_language/mdl_linter.py
|
30
30
|
./minecraft_datapack_language/mdl_parser.py
|
31
|
+
./minecraft_datapack_language/python_api.py
|
31
32
|
./minecraft_datapack_language/utils.py
|
32
33
|
.cursor/rules/aispec.mdc
|
33
34
|
.github/actions/mdl-compile/action.yml
|
@@ -248,7 +249,7 @@ docs/_docs/examples.md
|
|
248
249
|
docs/_docs/getting-started.md
|
249
250
|
docs/_docs/language-reference.md
|
250
251
|
docs/_docs/multi-file-projects.md
|
251
|
-
docs/_docs/python-
|
252
|
+
docs/_docs/python-bindings.md
|
252
253
|
docs/_docs/vscode-extension.md
|
253
254
|
docs/_includes/head-custom.html
|
254
255
|
docs/_includes/navigation.html
|
@@ -294,6 +295,7 @@ minecraft_datapack_language/mdl_errors.py
|
|
294
295
|
minecraft_datapack_language/mdl_lexer.py
|
295
296
|
minecraft_datapack_language/mdl_linter.py
|
296
297
|
minecraft_datapack_language/mdl_parser.py
|
298
|
+
minecraft_datapack_language/python_api.py
|
297
299
|
minecraft_datapack_language/utils.py
|
298
300
|
minecraft_datapack_language.egg-info/PKG-INFO
|
299
301
|
minecraft_datapack_language.egg-info/SOURCES.txt
|
@@ -347,10 +349,12 @@ test_project/complex_test.mdl
|
|
347
349
|
tests/__init__.py
|
348
350
|
tests/run_all_tests.py
|
349
351
|
tests/test_cli.py
|
352
|
+
tests/test_codegen_naming_and_logic.py
|
350
353
|
tests/test_compiler_fixes.py
|
351
354
|
tests/test_complex_scenarios.py
|
352
355
|
tests/test_comprehensive_end_to_end.py
|
353
356
|
tests/test_python_api.py
|
357
|
+
tests/test_python_bindings.py
|
354
358
|
vscode-extension/README.md
|
355
359
|
vscode-extension/language-configuration.json
|
356
360
|
vscode-extension/package-lock.json
|
{minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/run_all_tests.py
RENAMED
@@ -78,7 +78,7 @@ def main():
|
|
78
78
|
("test_comprehensive_end_to_end.py", "End-to-end comprehensive tests"),
|
79
79
|
("test_complex_scenarios.py", "Complex scenario tests"),
|
80
80
|
("test_compiler_fixes.py", "Compiler fix verification tests"),
|
81
|
-
("
|
81
|
+
("test_python_bindings.py", "Python bindings tests"),
|
82
82
|
("test_cli.py", "CLI functionality tests"),
|
83
83
|
]
|
84
84
|
|
@@ -122,13 +122,13 @@ def main():
|
|
122
122
|
results.append(("Function Execution", function_result))
|
123
123
|
|
124
124
|
# 4. Test Python API
|
125
|
-
print("\nTesting Python
|
125
|
+
print("\nTesting Python bindings...")
|
126
126
|
api_result = run_test_suite(
|
127
|
-
"Python
|
127
|
+
"Python Bindings Basic",
|
128
128
|
"python -c \"from minecraft_datapack_language import Pack; import tempfile; from pathlib import Path; p = Pack('Test', 'Test pack', 82); ns = p.namespace('test'); ns.function('hello', 'say Hello World!'); with tempfile.TemporaryDirectory() as temp_dir: p.build(temp_dir); output = Path(temp_dir) / 'data' / 'test' / 'function' / 'hello.mcfunction'; assert output.exists(); print('Python API test successful')\"",
|
129
|
-
"Test basic Python
|
129
|
+
"Test basic Python bindings functionality"
|
130
130
|
)
|
131
|
-
results.append(("Python
|
131
|
+
results.append(("Python Bindings", api_result))
|
132
132
|
|
133
133
|
# 5. Test CLI
|
134
134
|
print("\nTesting CLI...")
|