minecraft-datapack-language 16.0.2__tar.gz → 16.0.4__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-16.0.2/minecraft_datapack_language.egg-info → minecraft_datapack_language-16.0.4}/PKG-INFO +1 -1
- minecraft_datapack_language-16.0.4/docs/_data/version.yml +3 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/language-reference.md +23 -2
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/_version.py +3 -3
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/ast_nodes.py +7 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/mdl_compiler.py +60 -9
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/mdl_lexer.py +2 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/mdl_parser.py +17 -1
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4/minecraft_datapack_language.egg-info}/PKG-INFO +1 -1
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language.egg-info/SOURCES.txt +1 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_python_api.py +2 -1
- minecraft_datapack_language-16.0.4/tests/test_scheduledwhile.py +54 -0
- minecraft_datapack_language-16.0.2/docs/_data/version.yml +0 -3
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.cursor/rules/aispec.mdc +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/actions/mdl-compile/action.yml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/ci.yml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/docs.yml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/pypi.yml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/release.yml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/update-website-version.yml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.gitignore +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/test1/function/load.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/test1/function/load1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/test1/function/main.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/test1/function/main__else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/test1/function/main__if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/test1/function/testfunc.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/data/test1/function/testfunc__while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/pack.mcmeta +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/test1/function/load.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/test1/function/load1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/test1/function/main.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/test1/function/main__else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/test1/function/main__if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/test1/function/testfunc.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/data/test1/function/testfunc__while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1-confirm/pack.mcmeta +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/COMPILER_FIXES_SUMMARY.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/CONDITIONALS_IMPLEMENTATION.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/LICENSE +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/Makefile +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/README.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/advancements/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/advancements/first_spell.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/advancements/other_advancement.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/advancements/test_advancement.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/comprehensive_error_test.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/control_test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/control_test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/control_test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/if_test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/if_test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/countdown_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/countdown_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/loop_demo_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_else_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_7.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/main_while_body_7.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/start_game_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/start_game_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/start_game_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/start_game_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_if_else_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_if_else_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_while_break_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/tick_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/tick_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/while_test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/data/while_test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/dist.zip +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/.env +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/404.html +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/Gemfile +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/README.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_config.yml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/cli-reference.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/contributing.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/docs-hub.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/documentation.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/examples.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/getting-started.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/multi-file-projects.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/python-bindings.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_docs/vscode-extension.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_includes/head-custom.html +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_includes/navigation.html +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_layouts/default.html +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_layouts/page.html +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_plugins/test_version.rb +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/_plugins/version_reader.rb +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/assets/css/style.css +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/docs.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/downloads.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/icon-128.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/icon-256.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/icon-512.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/icons/icon-64.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/docs/index.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/examples/hello_world.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/examples/macros_example.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/examples/scope_examples.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/examples/simple_counter.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/icon-128.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/icon-256.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/icon-512.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/icons/icon-64.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/item_modifiers/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/item_modifiers/enchant_tool.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/item_modifiers/test_item_modifier.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/loot_tables/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/loot_tables/epic_loot.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/loot_tables/main_loot.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/loot_tables/test_loot.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/mdllocal.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/__init__.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/cli.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/dir_map.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/mdl_errors.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/mdl_linter.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/python_api.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language/utils.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language.egg-info/requires.txt +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/multi_scope_example.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/my_awesome_pack/README.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/predicates/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/predicates/has_mana.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/predicates/other_predicate.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/predicates/test_predicate.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/pyproject.toml +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/pytest.ini +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/custom_pickaxe.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/first.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/inlet.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/main_recipe.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/outlet.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/pipe.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/second.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/test_recipe.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/recipes/wrench.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scope_demo.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scoreboard_test.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/UpdateMDL.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/bootstrap.ps1 +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/bootstrap.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/build_pkg.ps1 +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/build_pkg.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/dev_build.ps1 +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/dev_build.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/dev_setup.ps1 +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/dev_setup.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/git-bash/test_cli-gitbash.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/release.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/test_cli.ps1 +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/test_cli.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/test_dev.ps1 +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/test_dev.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/update_docs.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/scripts/update_version_info.sh +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/setup.cfg +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/structures/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/structures/test_structure.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/structures/workshop.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tellraw_variables_test.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/temp_output/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/temp_output/data/test/function/helper.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/temp_output/data/test/function/load.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/temp_output/data/test/function/main.mcfunction +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/temp_output/pack.mcmeta +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/test_all_registry.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/test_complex_scenarios.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/test_comprehensive_fixes.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/test_if_else_while.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/test_project/complex_test.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/test_simple.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/__init__.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/run_all_tests.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_cli.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_codegen_naming_and_logic.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_compiler_fixes.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_complex_scenarios.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_comprehensive_end_to_end.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_examples.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_macros.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_python_bindings.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_user_regression_test1.py +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tmp_local_cli_out.zip +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tmp_test1.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tmp_test1.mdl~ +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tmp_test1_confirm.mdl +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/README.md +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/icon-128.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/icon-256.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/icons/icon-512.png +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/language-configuration.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/package-lock.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/package.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/snippets/mdl.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/src/extension.ts +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/themes/mdl-color-theme.json +0 -0
- {minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/vscode-extension/tsconfig.json +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 16.0.
|
3
|
+
Version: 16.0.4
|
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
|
@@ -177,7 +177,28 @@ while $counter<@s>$ > 0 {
|
|
177
177
|
}
|
178
178
|
```
|
179
179
|
|
180
|
-
**Note:**
|
180
|
+
**Note:** The standard `while` loop uses recursive function calls internally. This is simple and fast but can hit Minecraft's function call depth limit for very long-running loops.
|
181
|
+
|
182
|
+
#### Scheduled While Loops
|
183
|
+
|
184
|
+
Use `scheduledwhile` to iterate via the scheduler instead of recursion. This avoids recursion limits by running one iteration per game tick and scheduling the next iteration only if the condition remains true.
|
185
|
+
|
186
|
+
```mdl
|
187
|
+
scheduledwhile $counter<@s>$ > 0 {
|
188
|
+
counter<@s> = $counter<@s>$ - 1;
|
189
|
+
exec game:countdown;
|
190
|
+
}
|
191
|
+
```
|
192
|
+
|
193
|
+
Compilation strategy:
|
194
|
+
- Generates a helper function containing the loop body
|
195
|
+
- At the end of the helper, emits `execute if <condition> run schedule function <helper> 1t`
|
196
|
+
- Entry point schedules the first iteration with `schedule function <helper> 1t`
|
197
|
+
- Breakout occurs naturally when the condition becomes false (no re-schedule)
|
198
|
+
|
199
|
+
When to use:
|
200
|
+
- Prefer `while` for short/medium loops
|
201
|
+
- Prefer `scheduledwhile` for long-running loops, per-tick processes, or when avoiding recursion depth limits
|
181
202
|
|
182
203
|
### Hooks
|
183
204
|
```mdl
|
@@ -521,7 +542,7 @@ This section defines exactly how MDL source code is broken down into tokens. Thi
|
|
521
542
|
|
522
543
|
#### **Keywords** (Reserved Words)
|
523
544
|
```
|
524
|
-
pack, namespace, function, var, num, if, else, while, on_load, on_tick, exec, tag
|
545
|
+
pack, namespace, function, var, num, if, else, while, scheduledwhile, on_load, on_tick, exec, tag
|
525
546
|
```
|
526
547
|
|
527
548
|
#### **Tag Types** (Resource Categories)
|
@@ -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 = '16.0.
|
32
|
-
__version_tuple__ = version_tuple = (16, 0,
|
31
|
+
__version__ = version = '16.0.4'
|
32
|
+
__version_tuple__ = version_tuple = (16, 0, 4)
|
33
33
|
|
34
|
-
__commit_id__ = commit_id = '
|
34
|
+
__commit_id__ = commit_id = 'g07ccaf26c'
|
@@ -94,6 +94,13 @@ class WhileLoop(ASTNode):
|
|
94
94
|
body: List[ASTNode]
|
95
95
|
|
96
96
|
|
97
|
+
@dataclass
|
98
|
+
class ScheduledWhileLoop(ASTNode):
|
99
|
+
"""Scheduled-while loop that iterates via Minecraft's schedule command each tick."""
|
100
|
+
condition: Any # Expression
|
101
|
+
body: List[ASTNode]
|
102
|
+
|
103
|
+
|
97
104
|
@dataclass
|
98
105
|
class HookDeclaration(ASTNode):
|
99
106
|
"""Hook declaration (on_load, on_tick)."""
|
@@ -11,7 +11,7 @@ from typing import Dict, List, Any, Optional
|
|
11
11
|
from .ast_nodes import (
|
12
12
|
Program, PackDeclaration, NamespaceDeclaration, TagDeclaration,
|
13
13
|
VariableDeclaration, VariableAssignment, VariableSubstitution, FunctionDeclaration,
|
14
|
-
FunctionCall, IfStatement, WhileLoop, HookDeclaration, RawBlock, MacroLine,
|
14
|
+
FunctionCall, IfStatement, WhileLoop, ScheduledWhileLoop, HookDeclaration, RawBlock, MacroLine,
|
15
15
|
SayCommand, BinaryExpression, LiteralExpression, ParenthesizedExpression
|
16
16
|
)
|
17
17
|
from .dir_map import get_dir_map, DirMap
|
@@ -270,15 +270,8 @@ class MDLCompiler:
|
|
270
270
|
tags_fn_dir = self.output_dir / "data" / "minecraft" / self.dir_map.tags_function
|
271
271
|
tags_fn_dir.mkdir(parents=True, exist_ok=True)
|
272
272
|
load_tag_file = tags_fn_dir / "load.json"
|
273
|
-
# Always
|
273
|
+
# Always reference namespace:load (which handles scoreboard init and calls on_load hooks internally)
|
274
274
|
values = [f"{self.current_namespace}:load"]
|
275
|
-
if has_on_load:
|
276
|
-
# Add explicit on_load hooks as additional entries
|
277
|
-
for hook in hooks:
|
278
|
-
if hook.hook_type == "on_load":
|
279
|
-
hook_ref = f"{hook.namespace}:{hook.name}"
|
280
|
-
if hook_ref not in values: # Avoid duplicates
|
281
|
-
values.append(hook_ref)
|
282
275
|
with open(load_tag_file, 'w') as f:
|
283
276
|
json.dump({"values": values}, f, indent=2)
|
284
277
|
|
@@ -352,6 +345,8 @@ class MDLCompiler:
|
|
352
345
|
return self._if_statement_to_command(statement)
|
353
346
|
elif isinstance(statement, WhileLoop):
|
354
347
|
return self._while_loop_to_command(statement)
|
348
|
+
elif isinstance(statement, ScheduledWhileLoop):
|
349
|
+
return self._scheduled_while_to_command(statement)
|
355
350
|
elif isinstance(statement, FunctionCall):
|
356
351
|
return self._function_call_to_command(statement)
|
357
352
|
else:
|
@@ -614,6 +609,62 @@ class MDLCompiler:
|
|
614
609
|
self._store_generated_function(loop_function_name, loop_body_lines)
|
615
610
|
|
616
611
|
return "\n".join(lines)
|
612
|
+
|
613
|
+
def _scheduled_while_to_command(self, while_loop: ScheduledWhileLoop) -> str:
|
614
|
+
"""Convert scheduledwhile to tick-scheduled loop to avoid recursion limits.
|
615
|
+
Strategy:
|
616
|
+
- Generate a unique loop function that contains the body, then conditionally schedules itself 1t later.
|
617
|
+
- Entry statement schedules the first tick run.
|
618
|
+
- Breakout occurs naturally by not scheduling when condition is false.
|
619
|
+
"""
|
620
|
+
loop_function_name = self._generate_while_function_name()
|
621
|
+
|
622
|
+
# Schedule first iteration for next tick
|
623
|
+
lines: List[str] = []
|
624
|
+
lines.append(f"schedule function {self.current_namespace}:{loop_function_name} 1t")
|
625
|
+
|
626
|
+
# Build the loop function body
|
627
|
+
loop_body_lines: List[str] = [f"# Function: {self.current_namespace}:{loop_function_name}"]
|
628
|
+
|
629
|
+
if not hasattr(self, '_temp_sink_stack'):
|
630
|
+
self._temp_sink_stack = []
|
631
|
+
self._temp_sink_stack.append(loop_body_lines)
|
632
|
+
for stmt in while_loop.body:
|
633
|
+
if isinstance(stmt, VariableAssignment):
|
634
|
+
cmd = self._variable_assignment_to_command(stmt)
|
635
|
+
loop_body_lines.append(cmd)
|
636
|
+
elif isinstance(stmt, VariableDeclaration):
|
637
|
+
cmd = self._variable_declaration_to_command(stmt)
|
638
|
+
loop_body_lines.append(cmd)
|
639
|
+
elif isinstance(stmt, SayCommand):
|
640
|
+
cmd = self._say_command_to_command(stmt)
|
641
|
+
loop_body_lines.append(cmd)
|
642
|
+
elif isinstance(stmt, RawBlock):
|
643
|
+
loop_body_lines.append(stmt.content)
|
644
|
+
elif isinstance(stmt, IfStatement):
|
645
|
+
cmd = self._if_statement_to_command(stmt)
|
646
|
+
loop_body_lines.append(cmd)
|
647
|
+
elif isinstance(stmt, WhileLoop):
|
648
|
+
cmd = self._while_loop_to_command(stmt)
|
649
|
+
loop_body_lines.append(cmd)
|
650
|
+
elif isinstance(stmt, ScheduledWhileLoop):
|
651
|
+
cmd = self._scheduled_while_to_command(stmt)
|
652
|
+
loop_body_lines.append(cmd)
|
653
|
+
elif isinstance(stmt, FunctionCall):
|
654
|
+
cmd = self._function_call_to_command(stmt)
|
655
|
+
loop_body_lines.append(cmd)
|
656
|
+
self._temp_sink_stack.pop()
|
657
|
+
|
658
|
+
cond_str, invert_then = self._build_condition(while_loop.condition)
|
659
|
+
if invert_then:
|
660
|
+
# Inverted means schedule unless condition (NOT desired). We want continue-when-true.
|
661
|
+
# cond_str represents equality in inverted case; continue when not(cond) → use unless.
|
662
|
+
loop_body_lines.append(f"execute unless {cond_str} run schedule function {self.current_namespace}:{loop_function_name} 1t")
|
663
|
+
else:
|
664
|
+
loop_body_lines.append(f"execute if {cond_str} run schedule function {self.current_namespace}:{loop_function_name} 1t")
|
665
|
+
|
666
|
+
self._store_generated_function(loop_function_name, loop_body_lines)
|
667
|
+
return "\n".join(lines)
|
617
668
|
|
618
669
|
def _is_scoreboard_condition(self, expression: Any) -> bool:
|
619
670
|
"""Check if an expression is a scoreboard comparison."""
|
@@ -33,6 +33,7 @@ class TokenType:
|
|
33
33
|
IF = "IF"
|
34
34
|
ELSE = "ELSE"
|
35
35
|
WHILE = "WHILE"
|
36
|
+
SCHEDULED_WHILE = "SCHEDULED_WHILE"
|
36
37
|
ON_LOAD = "ON_LOAD"
|
37
38
|
ON_TICK = "ON_TICK"
|
38
39
|
EXEC = "EXEC"
|
@@ -599,6 +600,7 @@ class MDLLexer:
|
|
599
600
|
'if': TokenType.IF,
|
600
601
|
'else': TokenType.ELSE,
|
601
602
|
'while': TokenType.WHILE,
|
603
|
+
'scheduledwhile': TokenType.SCHEDULED_WHILE,
|
602
604
|
'on_load': TokenType.ON_LOAD,
|
603
605
|
'on_tick': TokenType.ON_TICK,
|
604
606
|
'exec': TokenType.EXEC,
|
@@ -9,7 +9,7 @@ from .mdl_errors import MDLParserError
|
|
9
9
|
from .ast_nodes import (
|
10
10
|
ASTNode, Program, PackDeclaration, NamespaceDeclaration, TagDeclaration,
|
11
11
|
VariableDeclaration, VariableAssignment, VariableSubstitution, FunctionDeclaration,
|
12
|
-
FunctionCall, IfStatement, WhileLoop, HookDeclaration, RawBlock, MacroLine,
|
12
|
+
FunctionCall, IfStatement, WhileLoop, ScheduledWhileLoop, HookDeclaration, RawBlock, MacroLine,
|
13
13
|
SayCommand, TellrawCommand, ExecuteCommand, ScoreboardCommand,
|
14
14
|
BinaryExpression, UnaryExpression, ParenthesizedExpression, LiteralExpression,
|
15
15
|
ScopeSelector
|
@@ -87,6 +87,8 @@ class MDLParser:
|
|
87
87
|
statements.append(self._parse_if_statement())
|
88
88
|
elif self._peek().type == TokenType.WHILE:
|
89
89
|
statements.append(self._parse_while_loop())
|
90
|
+
elif self._peek().type == TokenType.SCHEDULED_WHILE:
|
91
|
+
statements.append(self._parse_scheduled_while_loop())
|
90
92
|
elif self._peek().type == TokenType.DOLLAR and self._peek(1).type == TokenType.EXCLAMATION:
|
91
93
|
statements.append(self._parse_raw_block())
|
92
94
|
elif self._peek().type == TokenType.IDENTIFIER:
|
@@ -348,6 +350,18 @@ class MDLParser:
|
|
348
350
|
self._expect(TokenType.RBRACE, "Expected '}' to end while body")
|
349
351
|
|
350
352
|
return WhileLoop(condition=condition, body=body)
|
353
|
+
|
354
|
+
def _parse_scheduled_while_loop(self) -> ScheduledWhileLoop:
|
355
|
+
"""Parse scheduledwhile loop: scheduledwhile condition { body }"""
|
356
|
+
self._expect(TokenType.SCHEDULED_WHILE, "Expected 'scheduledwhile' keyword")
|
357
|
+
|
358
|
+
condition = self._parse_expression()
|
359
|
+
|
360
|
+
self._expect(TokenType.LBRACE, "Expected '{' to start while body")
|
361
|
+
body = self._parse_block()
|
362
|
+
self._expect(TokenType.RBRACE, "Expected '}' to end while body")
|
363
|
+
|
364
|
+
return ScheduledWhileLoop(condition=condition, body=body)
|
351
365
|
|
352
366
|
def _parse_hook_declaration(self) -> HookDeclaration:
|
353
367
|
"""Parse hook declaration: on_load/on_tick namespace:name<scope>;"""
|
@@ -524,6 +538,8 @@ class MDLParser:
|
|
524
538
|
statements.append(self._parse_if_statement())
|
525
539
|
elif self._peek().type == TokenType.WHILE:
|
526
540
|
statements.append(self._parse_while_loop())
|
541
|
+
elif self._peek().type == TokenType.SCHEDULED_WHILE:
|
542
|
+
statements.append(self._parse_scheduled_while_loop())
|
527
543
|
elif self._peek().type == TokenType.EXEC:
|
528
544
|
statements.append(self._parse_function_call())
|
529
545
|
elif self._peek().type == TokenType.MACRO_LINE:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 16.0.
|
3
|
+
Version: 16.0.4
|
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
|
@@ -381,6 +381,7 @@ tests/test_examples.py
|
|
381
381
|
tests/test_macros.py
|
382
382
|
tests/test_python_api.py
|
383
383
|
tests/test_python_bindings.py
|
384
|
+
tests/test_scheduledwhile.py
|
384
385
|
tests/test_user_regression_test1.py
|
385
386
|
vscode-extension/README.md
|
386
387
|
vscode-extension/language-configuration.json
|
{minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/tests/test_python_api.py
RENAMED
@@ -249,7 +249,8 @@ class TestPythonAPITags:
|
|
249
249
|
else:
|
250
250
|
tick_content = {"values": []}
|
251
251
|
|
252
|
-
|
252
|
+
# load.json always references namespace:load; hooks are invoked from load.mcfunction
|
253
|
+
assert "test:load" in load_content["values"]
|
253
254
|
# Only assert tick if present
|
254
255
|
if tick_content["values"]:
|
255
256
|
assert "test:tick" in tick_content["values"]
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import tempfile
|
2
|
+
from pathlib import Path
|
3
|
+
|
4
|
+
from minecraft_datapack_language.mdl_parser import MDLParser
|
5
|
+
from minecraft_datapack_language.mdl_compiler import MDLCompiler
|
6
|
+
|
7
|
+
|
8
|
+
def compile_source(source: str):
|
9
|
+
parser = MDLParser()
|
10
|
+
ast = parser.parse(source)
|
11
|
+
tmpdir = tempfile.TemporaryDirectory()
|
12
|
+
out = Path(tmpdir.name)
|
13
|
+
MDLCompiler().compile(ast, str(out))
|
14
|
+
return out, tmpdir
|
15
|
+
|
16
|
+
|
17
|
+
def test_scheduledwhile_generates_schedule_and_helper():
|
18
|
+
src = (
|
19
|
+
'pack "ns" "desc" 82;\n'
|
20
|
+
'namespace "ns";\n'
|
21
|
+
'var num c<@s> = 0;\n'
|
22
|
+
'function ns:loop { scheduledwhile $c<@s>$ < 3 { c<@s> = $c<@s>$ + 1; } }\n'
|
23
|
+
)
|
24
|
+
out, tmp = compile_source(src)
|
25
|
+
func_dir = out / 'data' / 'ns' / 'function'
|
26
|
+
|
27
|
+
# Main function schedules the helper for next tick
|
28
|
+
loop_main = (func_dir / 'loop.mcfunction').read_text()
|
29
|
+
assert 'schedule function ns:loop__while_' in loop_main
|
30
|
+
|
31
|
+
# Helper exists and conditionally reschedules itself
|
32
|
+
helper_files = sorted(p for p in func_dir.glob('loop__while_*.mcfunction'))
|
33
|
+
assert helper_files, 'Expected generated scheduled helper function file'
|
34
|
+
helper = helper_files[0].read_text()
|
35
|
+
assert 'execute if score @s c <' in helper or 'execute if score @s c matches ..2' in helper
|
36
|
+
assert 'schedule function ns:loop__while_' in helper
|
37
|
+
|
38
|
+
|
39
|
+
def test_scheduledwhile_breaks_out_without_reschedule_when_false():
|
40
|
+
src = (
|
41
|
+
'pack "ns" "desc" 82;\n'
|
42
|
+
'namespace "ns";\n'
|
43
|
+
'var num c<@s> = 5;\n'
|
44
|
+
'function ns:loop { scheduledwhile $c<@s>$ > 10 { c<@s> = $c<@s>$ + 1; } }\n'
|
45
|
+
)
|
46
|
+
out, tmp = compile_source(src)
|
47
|
+
func_dir = out / 'data' / 'ns' / 'function'
|
48
|
+
helper_files = sorted(p for p in func_dir.glob('loop__while_*.mcfunction'))
|
49
|
+
assert helper_files, 'Expected generated scheduled helper function file'
|
50
|
+
helper = helper_files[0].read_text()
|
51
|
+
# For > 10, continue condition is false initially; helper should still only schedule if condition true
|
52
|
+
# Verify presence of conditional schedule, not unconditional schedule
|
53
|
+
assert 'execute if ' in helper and 'schedule function ns:loop__while_' in helper
|
54
|
+
|
{minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.cursor/rules/aispec.mdc
RENAMED
File without changes
|
File without changes
|
{minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/ci.yml
RENAMED
File without changes
|
{minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/docs.yml
RENAMED
File without changes
|
{minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.github/workflows/pypi.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/.mdl-out-test1/pack.mcmeta
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{minecraft_datapack_language-16.0.2 → minecraft_datapack_language-16.0.4}/COMPILER_FIXES_SUMMARY.md
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|