minecraft-datapack-language 15.4.40__tar.gz → 15.4.42__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.40/minecraft_datapack_language.egg-info → minecraft_datapack_language-15.4.42}/PKG-INFO +5 -5
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/README.md +4 -4
- minecraft_datapack_language-15.4.42/docs/_data/version.yml +3 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/cli-reference.md +2 -2
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/examples.md +35 -9
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/getting-started.md +3 -3
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/language-reference.md +14 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/vscode-extension.md +1 -1
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/index.md +2 -2
- minecraft_datapack_language-15.4.42/examples/hello_world.mdl +23 -0
- minecraft_datapack_language-15.4.42/examples/macros_example.mdl +20 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/examples/simple_counter.mdl +7 -7
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/_version.py +3 -3
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/ast_nodes.py +9 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_compiler.py +13 -4
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_lexer.py +36 -8
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_parser.py +36 -4
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42/minecraft_datapack_language.egg-info}/PKG-INFO +5 -5
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/SOURCES.txt +5 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/multi_scope_example.mdl +30 -23
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scope_demo.mdl +9 -9
- minecraft_datapack_language-15.4.42/temp_output/data/minecraft/tags/function/load.json +5 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/run_all_tests.py +5 -5
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_cli.py +3 -0
- minecraft_datapack_language-15.4.42/tests/test_examples.py +43 -0
- minecraft_datapack_language-15.4.42/tests/test_macros.py +58 -0
- minecraft_datapack_language-15.4.42/tmp_local_cli_out.zip +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/README.md +3 -3
- minecraft_datapack_language-15.4.40/docs/_data/version.yml +0 -3
- minecraft_datapack_language-15.4.40/examples/hello_world.mdl +0 -23
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.cursor/rules/aispec.mdc +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/actions/mdl-compile/action.yml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/ci.yml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/docs.yml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/pypi.yml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/release.yml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/update-website-version.yml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.gitignore +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/load.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/load1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/main.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/main__else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/main__if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/testfunc.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/testfunc__while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/pack.mcmeta +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/load.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/load1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/main.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/main__else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/main__if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/testfunc.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/testfunc__while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/pack.mcmeta +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/COMPILER_FIXES_SUMMARY.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/CONDITIONALS_IMPLEMENTATION.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/LICENSE +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/Makefile +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/first_spell.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/other_advancement.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/test_advancement.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/comprehensive_error_test.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/control_test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/control_test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/control_test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/if_test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/if_test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/countdown_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/countdown_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/loop_demo_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_else_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_7.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_7.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_if_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_while_break_while_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_2.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/while_test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/while_test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/dist.zip +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/.env +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/404.html +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/Gemfile +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/README.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_config.yml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/contributing.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/docs-hub.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/documentation.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/multi-file-projects.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/python-bindings.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_includes/head-custom.html +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_includes/navigation.html +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_layouts/default.html +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_layouts/page.html +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_plugins/test_version.rb +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_plugins/version_reader.rb +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/assets/css/style.css +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/docs.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/downloads.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-64.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/examples/scope_examples.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-64.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/item_modifiers/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/item_modifiers/enchant_tool.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/item_modifiers/test_item_modifier.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/epic_loot.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/main_loot.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/test_loot.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/mdllocal.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/__init__.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/cli.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/dir_map.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_errors.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_linter.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/python_api.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/utils.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/requires.txt +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/my_awesome_pack/README.md +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/has_mana.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/other_predicate.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/test_predicate.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/pyproject.toml +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/pytest.ini +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/custom_pickaxe.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/first.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/inlet.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/main_recipe.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/outlet.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/pipe.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/second.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/test_recipe.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/wrench.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scoreboard_test.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/UpdateMDL.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/bootstrap.ps1 +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/bootstrap.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/build_pkg.ps1 +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/build_pkg.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_build.ps1 +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_build.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_setup.ps1 +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_setup.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/git-bash/test_cli-gitbash.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/release.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_cli.ps1 +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_cli.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_dev.ps1 +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_dev.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/update_docs.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/update_version_info.sh +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/setup.cfg +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/structures/diamond_sword.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/structures/test_structure.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/structures/workshop.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tellraw_variables_test.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/data/test/function/helper.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/data/test/function/load.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/data/test/function/main.mcfunction +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/pack.mcmeta +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_all_registry.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_complex_scenarios.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_comprehensive_fixes.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_if_else_while.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_project/complex_test.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_simple.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/__init__.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_codegen_naming_and_logic.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_compiler_fixes.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_complex_scenarios.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_comprehensive_end_to_end.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_python_api.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_python_bindings.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_user_regression_test1.py +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tmp_test1.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tmp_test1.mdl~ +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tmp_test1_confirm.mdl +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-128.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-256.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-512.png +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/language-configuration.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/package-lock.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/package.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/snippets/mdl.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/src/extension.ts +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/themes/mdl-color-theme.json +0 -0
- {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/tsconfig.json +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 15.4.
|
3
|
+
Version: 15.4.42
|
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
|
@@ -146,17 +146,17 @@ namespace "game";
|
|
146
146
|
var num player_score<@s> = 0;
|
147
147
|
var num team_score<@a[team=red]> = 0;
|
148
148
|
|
149
|
-
function game:start
|
149
|
+
function game:start {
|
150
150
|
player_score<@s> = 100;
|
151
151
|
say "Welcome! Your score is $player_score<@s>$";
|
152
152
|
}
|
153
153
|
|
154
|
-
on_load game:start
|
154
|
+
on_load game:start;
|
155
155
|
```
|
156
156
|
|
157
157
|
### Control Structures
|
158
158
|
```mdl
|
159
|
-
function game:check_score
|
159
|
+
function game:check_score {
|
160
160
|
if $player_score<@s>$ > 10 {
|
161
161
|
say "Great score!";
|
162
162
|
player_score<@s> = $player_score<@s>$ + 5;
|
@@ -185,7 +185,7 @@ tag structure "wizard_tower" "structures/wizard_tower.json";
|
|
185
185
|
|
186
186
|
### Raw Blocks and Say Commands
|
187
187
|
```mdl
|
188
|
-
function game:special_effect
|
188
|
+
function game:special_effect {
|
189
189
|
$!raw
|
190
190
|
execute as @s run particle minecraft:explosion ~ ~ ~ 1 1 1 0 10
|
191
191
|
execute as @s run playsound minecraft:entity.player.levelup player @s ~ ~ ~ 1 1
|
@@ -125,17 +125,17 @@ namespace "game";
|
|
125
125
|
var num player_score<@s> = 0;
|
126
126
|
var num team_score<@a[team=red]> = 0;
|
127
127
|
|
128
|
-
function game:start
|
128
|
+
function game:start {
|
129
129
|
player_score<@s> = 100;
|
130
130
|
say "Welcome! Your score is $player_score<@s>$";
|
131
131
|
}
|
132
132
|
|
133
|
-
on_load game:start
|
133
|
+
on_load game:start;
|
134
134
|
```
|
135
135
|
|
136
136
|
### Control Structures
|
137
137
|
```mdl
|
138
|
-
function game:check_score
|
138
|
+
function game:check_score {
|
139
139
|
if $player_score<@s>$ > 10 {
|
140
140
|
say "Great score!";
|
141
141
|
player_score<@s> = $player_score<@s>$ + 5;
|
@@ -164,7 +164,7 @@ tag structure "wizard_tower" "structures/wizard_tower.json";
|
|
164
164
|
|
165
165
|
### Raw Blocks and Say Commands
|
166
166
|
```mdl
|
167
|
-
function game:special_effect
|
167
|
+
function game:special_effect {
|
168
168
|
$!raw
|
169
169
|
execute as @s run particle minecraft:explosion ~ ~ ~ 1 1 1 0 10
|
170
170
|
execute as @s run playsound minecraft:entity.player.levelup player @s ~ ~ ~ 1 1
|
@@ -259,7 +259,7 @@ If you prefer to create files manually, you can start with:
|
|
259
259
|
pack "hello" "My first datapack" 82;
|
260
260
|
namespace "hello";
|
261
261
|
|
262
|
-
function hello:main
|
262
|
+
function hello:main {
|
263
263
|
say "Hello, Minecraft!";
|
264
264
|
}
|
265
265
|
|
@@ -305,7 +305,7 @@ var num playerScore<@s> = 0; // Defaults to @s
|
|
305
305
|
var num globalCounter<@a> = 0; // Global scope
|
306
306
|
var num teamScore<@a[team=red]> = 0; // Team scope
|
307
307
|
|
308
|
-
function hello:main
|
308
|
+
function hello:main {
|
309
309
|
// Use explicit scope in conditions
|
310
310
|
if $playerScore<@s>$ > 10 {
|
311
311
|
say "Current player score is high!";
|
{minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/examples.md
RENAMED
@@ -14,12 +14,12 @@ A simple datapack that says hello when loaded:
|
|
14
14
|
pack "hello" "A simple hello world datapack" 82;
|
15
15
|
namespace "hello";
|
16
16
|
|
17
|
-
function hello:main
|
17
|
+
function hello:main {
|
18
18
|
say "Hello, Minecraft!";
|
19
19
|
tellraw @a {"text":"Welcome to my datapack!","color":"green"};
|
20
20
|
}
|
21
21
|
|
22
|
-
on_load hello:main
|
22
|
+
on_load hello:main;
|
23
23
|
```
|
24
24
|
|
25
25
|
## Counter with Scoped Variables
|
@@ -33,17 +33,17 @@ namespace "counter";
|
|
33
33
|
var num globalCounter<@a> = 0;
|
34
34
|
var num playerCounter<@s> = 0; // Defaults to player-specific scope
|
35
35
|
|
36
|
-
function counter:increment
|
36
|
+
function counter:increment {
|
37
37
|
globalCounter<@a> = $globalCounter<@a>$ + 1;
|
38
38
|
playerCounter<@s> = $playerCounter<@s>$ + 1;
|
39
39
|
say "Global: $globalCounter<@a>$, Player: $playerCounter<@s>$";
|
40
40
|
}
|
41
41
|
|
42
|
-
function counter:show_all
|
42
|
+
function counter:show_all {
|
43
43
|
exec counter:increment<@a>;
|
44
44
|
}
|
45
45
|
|
46
|
-
on_load counter:increment
|
46
|
+
on_load counter:increment;
|
47
47
|
```
|
48
48
|
|
49
49
|
## While Loop Example
|
@@ -56,7 +56,7 @@ namespace "loops";
|
|
56
56
|
|
57
57
|
var num counter<@a> = 0;
|
58
58
|
|
59
|
-
function loops:countdown
|
59
|
+
function loops:countdown {
|
60
60
|
counter<@a> = 5;
|
61
61
|
while $counter<@a>$ > 0 {
|
62
62
|
say "Countdown: $counter<@a>$";
|
@@ -65,7 +65,7 @@ function loops:countdown<@s> {
|
|
65
65
|
say "Blast off!";
|
66
66
|
}
|
67
67
|
|
68
|
-
on_load loops:countdown
|
68
|
+
on_load loops:countdown;
|
69
69
|
```
|
70
70
|
|
71
71
|
## Raw Commands
|
@@ -76,14 +76,40 @@ Using raw Minecraft commands:
|
|
76
76
|
pack "raw" "Raw command example" 82;
|
77
77
|
namespace "raw";
|
78
78
|
|
79
|
-
function raw:custom
|
79
|
+
function raw:custom {
|
80
80
|
// Use raw Minecraft commands
|
81
81
|
effect give @s minecraft:speed 10 1;
|
82
82
|
particle minecraft:explosion ~ ~ ~ 1 1 1 0 10;
|
83
83
|
playsound minecraft:entity.player.levelup player @s ~ ~ ~ 1 1;
|
84
84
|
}
|
85
85
|
|
86
|
-
on_load raw:custom
|
86
|
+
on_load raw:custom;
|
87
|
+
```
|
88
|
+
|
89
|
+
## Function Macros
|
90
|
+
|
91
|
+
Demonstrates macro lines and passing macro data to functions:
|
92
|
+
|
93
|
+
```mdl
|
94
|
+
pack "macros" "Function macro examples" 82;
|
95
|
+
namespace "macros";
|
96
|
+
|
97
|
+
// Target function using a macro line with $(name)
|
98
|
+
function macros:greeter {
|
99
|
+
$say "Hello $(name)"
|
100
|
+
say "Done";
|
101
|
+
}
|
102
|
+
|
103
|
+
// Callers using inline JSON and with-clause
|
104
|
+
function macros:callers {
|
105
|
+
// Inline JSON compound (prefer single quotes outside)
|
106
|
+
exec macros:greeter '{name:"Alex"}';
|
107
|
+
|
108
|
+
// Pull compound from a data source via with-clause
|
109
|
+
exec macros:greeter with storage macros:ctx player.info;
|
110
|
+
}
|
111
|
+
|
112
|
+
on_load macros:callers;
|
87
113
|
```
|
88
114
|
|
89
115
|
## Complete Game Example
|
@@ -23,12 +23,12 @@ Create your first MDL file:
|
|
23
23
|
pack "hello" "My first datapack" 82;
|
24
24
|
namespace "hello";
|
25
25
|
|
26
|
-
function hello:main
|
26
|
+
function hello:main {
|
27
27
|
say "Hello, Minecraft!";
|
28
28
|
tellraw @a {"text":"Welcome to my datapack!","color":"green"};
|
29
29
|
}
|
30
30
|
|
31
|
-
on_load hello:main
|
31
|
+
on_load hello:main;
|
32
32
|
```
|
33
33
|
|
34
34
|
Compile it:
|
@@ -79,7 +79,7 @@ if $playerScore<@s>$ > 100 {
|
|
79
79
|
Functions contain Minecraft commands:
|
80
80
|
|
81
81
|
```mdl
|
82
|
-
function hello:my_function
|
82
|
+
function hello:my_function {
|
83
83
|
say "This is my function!";
|
84
84
|
effect give @s minecraft:speed 10 1;
|
85
85
|
}
|
@@ -131,6 +131,12 @@ exec game:start_game; // Execute any function
|
|
131
131
|
exec utils:calculator; // Execute from different namespace
|
132
132
|
exec game:reset_player<@s>; // Execute function with scope
|
133
133
|
exec game:reset_player<@a>; // Execute function with different scope
|
134
|
+
|
135
|
+
// Function Macros (Minecraft snapshot): pass macro arguments
|
136
|
+
// Inline JSON compound as a single-quoted string to minimize escapes
|
137
|
+
exec game:spawn_mob '{id:"minecraft:cow",name:"Betsy"}';
|
138
|
+
// With-clause to pull a compound from a data source
|
139
|
+
exec game:spawn_mob with storage mymod:ctx path.to.compound;
|
134
140
|
```
|
135
141
|
|
136
142
|
### Control Structures
|
@@ -200,6 +206,14 @@ execute as @a[team=blue] at @s run playsound minecraft:entity.player.levelup pla
|
|
200
206
|
raw!$
|
201
207
|
```
|
202
208
|
|
209
|
+
### Macro Lines
|
210
|
+
```mdl
|
211
|
+
// Lines starting with $ are emitted as-is into the generated .mcfunction and
|
212
|
+
// can contain $(variable) placeholders that Minecraft will substitute when the
|
213
|
+
// function is called with a macro compound.
|
214
|
+
$summon minecraft:cow ~ ~ ~ {CustomName:'{"text":"$(name)"}'}
|
215
|
+
```
|
216
|
+
|
203
217
|
**Important:** Raw blocks are completely ignored by the MDL parser. They get copied directly to the output `.mcfunction` files without any processing. This means you can use any valid Minecraft command syntax inside raw blocks.
|
204
218
|
|
205
219
|
## Scope System
|
@@ -107,7 +107,7 @@ The extension highlights the following MDL elements:
|
|
107
107
|
|
108
108
|
- **Pack declarations**: `pack "Name" description "Desc" pack_format 48`
|
109
109
|
- **Namespaces**: `namespace "example"`
|
110
|
-
- **Functions**: `function namespace:name
|
110
|
+
- **Functions**: `function namespace:name`
|
111
111
|
- **Lifecycle hooks**: `on_load`, `on_tick`
|
112
112
|
- **Tags**: `tag function "minecraft:tick":`
|
113
113
|
- **Comments**: `# This is a comment`
|
@@ -134,14 +134,14 @@ namespace "example";
|
|
134
134
|
|
135
135
|
var num counter<@s> = 0;
|
136
136
|
|
137
|
-
function example:hello
|
137
|
+
function example:hello {
|
138
138
|
say "Hello, Minecraft!";
|
139
139
|
tellraw @a {"text":"Welcome to my datapack!","color":"green"};
|
140
140
|
counter<@s> = $counter<@s>$ + 1;
|
141
141
|
say "Counter: $counter<@s>$";
|
142
142
|
}
|
143
143
|
|
144
|
-
on_load example:hello
|
144
|
+
on_load example:hello;
|
145
145
|
```
|
146
146
|
|
147
147
|
### Build and Run
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// Hello World example with scope selectors
|
2
|
+
pack "hello_world" "A simple hello world datapack" 15;
|
3
|
+
namespace "hello_world";
|
4
|
+
|
5
|
+
// Global counter accessible by all players
|
6
|
+
var num globalCounter<@a> = 0;
|
7
|
+
|
8
|
+
function hello_world:main {
|
9
|
+
// Increment global counter
|
10
|
+
globalCounter<@a> = $globalCounter<@a>$ + 1;
|
11
|
+
|
12
|
+
say "Hello, Minecraft!";
|
13
|
+
say "Welcome to my datapack!";
|
14
|
+
say "Global counter: $globalCounter<@a>$";
|
15
|
+
}
|
16
|
+
|
17
|
+
function hello_world:greet_player {
|
18
|
+
// Player-specific greeting
|
19
|
+
say "Welcome, player! You are visitor number $globalCounter<@a>$";
|
20
|
+
}
|
21
|
+
|
22
|
+
on_load hello_world:main;
|
23
|
+
on_tick hello_world:greet_player<@a>;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
// MDL Macros Example - macro lines and exec macro arguments
|
2
|
+
pack "macros_example" "Function macro demo" 82;
|
3
|
+
namespace "macros_ex";
|
4
|
+
|
5
|
+
function macros_ex:greeter {
|
6
|
+
$say "Hello $(name)"
|
7
|
+
say "Greeting complete.";
|
8
|
+
}
|
9
|
+
|
10
|
+
function macros_ex:runner {
|
11
|
+
// Inline JSON compound (prefer single quotes around the JSON)
|
12
|
+
exec macros_ex:greeter '{name:"Casey"}';
|
13
|
+
|
14
|
+
// With-clause using a storage data source
|
15
|
+
exec macros_ex:greeter with storage macros_ex:ctx player.profile;
|
16
|
+
}
|
17
|
+
|
18
|
+
on_load macros_ex:runner;
|
19
|
+
|
20
|
+
|
@@ -10,25 +10,25 @@ var num playerCounter<@s> = 0;
|
|
10
10
|
|
11
11
|
function "increment_global" {
|
12
12
|
// Increment the global counter
|
13
|
-
globalCounter<@a> = globalCounter<@a
|
14
|
-
say Global counter: $globalCounter
|
13
|
+
globalCounter<@a> = $globalCounter<@a>$ + 1;
|
14
|
+
say "Global counter: $globalCounter<@a>$";
|
15
15
|
}
|
16
16
|
|
17
17
|
function "increment_player" {
|
18
18
|
// Increment the player-specific counter
|
19
|
-
playerCounter<@s> = playerCounter<@s
|
20
|
-
say Your counter: $playerCounter
|
19
|
+
playerCounter<@s> = $playerCounter<@s>$ + 1;
|
20
|
+
say "Your counter: $playerCounter<@s>$";
|
21
21
|
}
|
22
22
|
|
23
23
|
function "show_both" {
|
24
24
|
// Show both counters
|
25
|
-
say Global: $globalCounter
|
25
|
+
say "Global: $globalCounter<@a>$, Player: $playerCounter<@s>$";
|
26
26
|
}
|
27
27
|
|
28
28
|
function "reset_player" {
|
29
29
|
// Reset player counter to global value
|
30
|
-
playerCounter<@s> = globalCounter<@a
|
31
|
-
say Reset to global value: $playerCounter
|
30
|
+
playerCounter<@s> = $globalCounter<@a>$;
|
31
|
+
say "Reset to global value: $playerCounter<@s>$";
|
32
32
|
}
|
33
33
|
|
34
34
|
function "run_for_all" {
|
@@ -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.42'
|
32
|
+
__version_tuple__ = version_tuple = (15, 4, 42)
|
33
33
|
|
34
|
-
__commit_id__ = commit_id = '
|
34
|
+
__commit_id__ = commit_id = 'g00d85a082'
|
@@ -74,6 +74,9 @@ class FunctionCall(ASTNode):
|
|
74
74
|
namespace: str
|
75
75
|
name: str
|
76
76
|
scope: Optional[str] # Optional scope for the function call
|
77
|
+
# Macro invocation support (Minecraft function macros)
|
78
|
+
macro_json: Optional[str] = None # Inline compound JSON string (including braces)
|
79
|
+
with_clause: Optional[str] = None # Raw "with <data source> [path]" clause (without leading 'with')
|
77
80
|
|
78
81
|
|
79
82
|
@dataclass
|
@@ -132,6 +135,12 @@ class ScoreboardCommand(ASTNode):
|
|
132
135
|
command: str
|
133
136
|
|
134
137
|
|
138
|
+
@dataclass
|
139
|
+
class MacroLine(ASTNode):
|
140
|
+
"""A raw macro line for mcfunction starting with '$' and containing $(vars)."""
|
141
|
+
content: str
|
142
|
+
|
143
|
+
|
135
144
|
# Expression nodes
|
136
145
|
@dataclass
|
137
146
|
class BinaryExpression(ASTNode):
|
@@ -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,
|
14
|
+
FunctionCall, IfStatement, WhileLoop, HookDeclaration, RawBlock, MacroLine,
|
15
15
|
SayCommand, BinaryExpression, LiteralExpression, ParenthesizedExpression
|
16
16
|
)
|
17
17
|
from .dir_map import get_dir_map, DirMap
|
@@ -325,6 +325,8 @@ class MDLCompiler:
|
|
325
325
|
return self._say_command_to_command(statement)
|
326
326
|
elif isinstance(statement, RawBlock):
|
327
327
|
return statement.content
|
328
|
+
elif isinstance(statement, MacroLine):
|
329
|
+
return statement.content
|
328
330
|
elif isinstance(statement, IfStatement):
|
329
331
|
return self._if_statement_to_command(statement)
|
330
332
|
elif isinstance(statement, WhileLoop):
|
@@ -616,10 +618,17 @@ class MDLCompiler:
|
|
616
618
|
|
617
619
|
def _function_call_to_command(self, func_call: FunctionCall) -> str:
|
618
620
|
"""Convert function call to execute command."""
|
621
|
+
# Build base function invocation, possibly with macro args
|
622
|
+
suffix = ""
|
623
|
+
if func_call.macro_json:
|
624
|
+
suffix = f" {func_call.macro_json}"
|
625
|
+
elif func_call.with_clause:
|
626
|
+
suffix = f" with {func_call.with_clause}"
|
627
|
+
|
628
|
+
base = f"function {func_call.namespace}:{func_call.name}{suffix}"
|
619
629
|
if func_call.scope:
|
620
|
-
return f"execute as {func_call.scope.strip('<>')} run
|
621
|
-
|
622
|
-
return f"function {func_call.namespace}:{func_call.name}"
|
630
|
+
return f"execute as {func_call.scope.strip('<>')} run {base}"
|
631
|
+
return base
|
623
632
|
|
624
633
|
def _expression_to_value(self, expression: Any) -> str:
|
625
634
|
"""Convert expression to a value string."""
|
@@ -79,6 +79,7 @@ class TokenType:
|
|
79
79
|
QUOTE = "QUOTE" # " (string literal delimiter)
|
80
80
|
EXCLAMATION = "EXCLAMATION" # ! (for raw blocks)
|
81
81
|
RANGE = "RANGE" # .. (range operator)
|
82
|
+
DOT = "DOT" # . (for paths in with-clause)
|
82
83
|
|
83
84
|
# Literals
|
84
85
|
IDENTIFIER = "IDENTIFIER" # Variable names, function names, etc.
|
@@ -89,6 +90,7 @@ class TokenType:
|
|
89
90
|
EOF = "EOF"
|
90
91
|
COMMENT = "COMMENT" # Comments (ignored during parsing)
|
91
92
|
RAW_CONTENT = "RAW_CONTENT" # Raw content inside raw blocks
|
93
|
+
MACRO_LINE = "MACRO_LINE" # Entire macro line starting with '$' at line-begin
|
92
94
|
|
93
95
|
|
94
96
|
class MDLLexer:
|
@@ -167,9 +169,9 @@ class MDLLexer:
|
|
167
169
|
self._scan_multi_line_comment()
|
168
170
|
return
|
169
171
|
|
170
|
-
# Handle strings (quotes)
|
171
|
-
if char == '"':
|
172
|
-
self._scan_string()
|
172
|
+
# Handle strings (quotes) - support both ' and "
|
173
|
+
if char == '"' or char == "'":
|
174
|
+
self._scan_string(quote_char=char)
|
173
175
|
return
|
174
176
|
|
175
177
|
# Handle raw block markers
|
@@ -180,6 +182,11 @@ class MDLLexer:
|
|
180
182
|
|
181
183
|
|
182
184
|
|
185
|
+
# Handle macro line: '$' as first non-space on the line (not $!raw)
|
186
|
+
if char == '$' and self._is_line_start_nonspace():
|
187
|
+
self._scan_macro_line()
|
188
|
+
return
|
189
|
+
|
183
190
|
# Handle variable substitution
|
184
191
|
if char == '$':
|
185
192
|
self._scan_variable_substitution()
|
@@ -264,7 +271,7 @@ class MDLLexer:
|
|
264
271
|
# Unterminated comment
|
265
272
|
self._error("Unterminated multi-line comment", "Add */ to close the comment")
|
266
273
|
|
267
|
-
def _scan_string(self):
|
274
|
+
def _scan_string(self, quote_char='"'):
|
268
275
|
"""Scan a string literal (quoted text)."""
|
269
276
|
# Skip opening quote
|
270
277
|
self.current += 1
|
@@ -275,7 +282,7 @@ class MDLLexer:
|
|
275
282
|
|
276
283
|
# Scan until closing quote
|
277
284
|
while (self.current < len(self.source) and
|
278
|
-
self.source[self.current] !=
|
285
|
+
self.source[self.current] != quote_char):
|
279
286
|
if self.source[self.current] == '\n':
|
280
287
|
self._error("Unterminated string literal", "Add a closing quote")
|
281
288
|
|
@@ -295,14 +302,34 @@ class MDLLexer:
|
|
295
302
|
self.column += 1
|
296
303
|
|
297
304
|
# Generate QUOTE token for the opening quote
|
298
|
-
self.tokens.append(Token(TokenType.QUOTE,
|
305
|
+
self.tokens.append(Token(TokenType.QUOTE, quote_char, start_line, start_column))
|
299
306
|
|
300
307
|
# Generate IDENTIFIER token for the string content
|
301
308
|
string_content = self.source[self.start + 1:self.current - 1]
|
302
309
|
self.tokens.append(Token(TokenType.IDENTIFIER, string_content, start_line, start_column + 1))
|
303
310
|
|
304
311
|
# Generate QUOTE token for the closing quote
|
305
|
-
self.tokens.append(Token(TokenType.QUOTE,
|
312
|
+
self.tokens.append(Token(TokenType.QUOTE, quote_char, self.line, self.column - 1))
|
313
|
+
|
314
|
+
def _is_line_start_nonspace(self) -> bool:
|
315
|
+
"""Return True if current position is at the first non-space character in the line."""
|
316
|
+
# Find beginning of current line
|
317
|
+
idx = self.current - 1
|
318
|
+
while idx >= 0 and self.source[idx] != '\n':
|
319
|
+
if not self.source[idx].isspace():
|
320
|
+
return False
|
321
|
+
idx -= 1
|
322
|
+
return True
|
323
|
+
|
324
|
+
def _scan_macro_line(self):
|
325
|
+
"""Scan a full macro line starting with '$' as first non-space char."""
|
326
|
+
# Capture from current to end of line (excluding trailing newline)
|
327
|
+
line_start = self.current
|
328
|
+
while self.current < len(self.source) and self.source[self.current] != '\n':
|
329
|
+
self.current += 1
|
330
|
+
self.column += 1
|
331
|
+
content = self.source[line_start:self.current]
|
332
|
+
self.tokens.append(Token(TokenType.MACRO_LINE, content, self.line, 1))
|
306
333
|
|
307
334
|
def _scan_raw_block_start(self):
|
308
335
|
"""Scan the start of a raw block ($!raw)."""
|
@@ -548,7 +575,8 @@ class MDLLexer:
|
|
548
575
|
'{': TokenType.LBRACE,
|
549
576
|
'}': TokenType.RBRACE,
|
550
577
|
'[': TokenType.LBRACKET,
|
551
|
-
']': TokenType.RBRACKET
|
578
|
+
']': TokenType.RBRACKET,
|
579
|
+
'.': TokenType.DOT
|
552
580
|
}
|
553
581
|
|
554
582
|
if char in token_map:
|
@@ -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,
|
12
|
+
FunctionCall, IfStatement, WhileLoop, HookDeclaration, RawBlock, MacroLine,
|
13
13
|
SayCommand, TellrawCommand, ExecuteCommand, ScoreboardCommand,
|
14
14
|
BinaryExpression, UnaryExpression, ParenthesizedExpression, LiteralExpression,
|
15
15
|
ScopeSelector
|
@@ -257,7 +257,7 @@ class MDLParser:
|
|
257
257
|
)
|
258
258
|
|
259
259
|
def _parse_function_call(self) -> FunctionCall:
|
260
|
-
"""Parse function call: exec namespace:name<scope
|
260
|
+
"""Parse function call: exec namespace:name<scope>? [ '{json}' | with <data source> [path] ] ;"""
|
261
261
|
self._expect(TokenType.EXEC, "Expected 'exec' keyword")
|
262
262
|
|
263
263
|
# Parse namespace:name
|
@@ -269,13 +269,41 @@ class MDLParser:
|
|
269
269
|
scope = None
|
270
270
|
if self._peek().type == TokenType.LANGLE:
|
271
271
|
scope = self._parse_scope_selector()
|
272
|
-
|
272
|
+
|
273
|
+
# Optional macro arguments (inline JSON in a quoted string)
|
274
|
+
macro_json = None
|
275
|
+
with_clause = None
|
276
|
+
if self._peek().type == TokenType.QUOTE:
|
277
|
+
self._advance() # opening quote
|
278
|
+
if self._peek().type == TokenType.IDENTIFIER:
|
279
|
+
macro_json = self._peek().value
|
280
|
+
self._advance()
|
281
|
+
self._expect(TokenType.QUOTE, "Expected closing quote for macro JSON")
|
282
|
+
elif self._peek().type == TokenType.IDENTIFIER and self._peek().value == 'with':
|
283
|
+
# Capture everything after 'with' up to the semicolon as raw clause
|
284
|
+
self._advance() # consume 'with'
|
285
|
+
# Expect a data source spec like: storage <identifier> <path-with-dots>
|
286
|
+
# Accumulate tokens until semicolon, inserting spaces only between identifiers/numbers
|
287
|
+
built: List[str] = []
|
288
|
+
prev_type = None
|
289
|
+
while not self._is_at_end() and self._peek().type != TokenType.SEMICOLON:
|
290
|
+
t = self._advance()
|
291
|
+
# Insert a space between adjacent identifiers/numbers
|
292
|
+
if built and (prev_type in (TokenType.IDENTIFIER, TokenType.NUMBER, TokenType.RBRACE, TokenType.RBRACKET)
|
293
|
+
and t.type in (TokenType.IDENTIFIER, TokenType.NUMBER)):
|
294
|
+
built.append(" ")
|
295
|
+
built.append(t.value)
|
296
|
+
prev_type = t.type
|
297
|
+
with_clause = "".join(built).strip()
|
298
|
+
|
273
299
|
self._expect(TokenType.SEMICOLON, "Expected semicolon after function call")
|
274
300
|
|
275
301
|
return FunctionCall(
|
276
302
|
namespace=namespace,
|
277
303
|
name=name,
|
278
|
-
scope=scope
|
304
|
+
scope=scope,
|
305
|
+
macro_json=macro_json,
|
306
|
+
with_clause=with_clause
|
279
307
|
)
|
280
308
|
|
281
309
|
def _parse_if_statement(self) -> IfStatement:
|
@@ -498,6 +526,10 @@ class MDLParser:
|
|
498
526
|
statements.append(self._parse_while_loop())
|
499
527
|
elif self._peek().type == TokenType.EXEC:
|
500
528
|
statements.append(self._parse_function_call())
|
529
|
+
elif self._peek().type == TokenType.MACRO_LINE:
|
530
|
+
# Preserve macro line exactly as-is
|
531
|
+
statements.append(MacroLine(content=self._peek().value))
|
532
|
+
self._advance()
|
501
533
|
elif self._peek().type == TokenType.DOLLAR and self._peek(1).type == TokenType.EXCLAMATION:
|
502
534
|
statements.append(self._parse_raw_block())
|
503
535
|
elif self._peek().type == TokenType.IDENTIFIER:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 15.4.
|
3
|
+
Version: 15.4.42
|
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
|
@@ -146,17 +146,17 @@ namespace "game";
|
|
146
146
|
var num player_score<@s> = 0;
|
147
147
|
var num team_score<@a[team=red]> = 0;
|
148
148
|
|
149
|
-
function game:start
|
149
|
+
function game:start {
|
150
150
|
player_score<@s> = 100;
|
151
151
|
say "Welcome! Your score is $player_score<@s>$";
|
152
152
|
}
|
153
153
|
|
154
|
-
on_load game:start
|
154
|
+
on_load game:start;
|
155
155
|
```
|
156
156
|
|
157
157
|
### Control Structures
|
158
158
|
```mdl
|
159
|
-
function game:check_score
|
159
|
+
function game:check_score {
|
160
160
|
if $player_score<@s>$ > 10 {
|
161
161
|
say "Great score!";
|
162
162
|
player_score<@s> = $player_score<@s>$ + 5;
|
@@ -185,7 +185,7 @@ tag structure "wizard_tower" "structures/wizard_tower.json";
|
|
185
185
|
|
186
186
|
### Raw Blocks and Say Commands
|
187
187
|
```mdl
|
188
|
-
function game:special_effect
|
188
|
+
function game:special_effect {
|
189
189
|
$!raw
|
190
190
|
execute as @s run particle minecraft:explosion ~ ~ ~ 1 1 1 0 10
|
191
191
|
execute as @s run playsound minecraft:entity.player.levelup player @s ~ ~ ~ 1 1
|
@@ -18,6 +18,7 @@ test_complex_scenarios.mdl
|
|
18
18
|
test_comprehensive_fixes.mdl
|
19
19
|
test_if_else_while.mdl
|
20
20
|
test_simple.mdl
|
21
|
+
tmp_local_cli_out.zip
|
21
22
|
tmp_test1.mdl
|
22
23
|
tmp_test1.mdl~
|
23
24
|
tmp_test1_confirm.mdl
|
@@ -289,6 +290,7 @@ docs/icons/icon-256.png
|
|
289
290
|
docs/icons/icon-512.png
|
290
291
|
docs/icons/icon-64.png
|
291
292
|
examples/hello_world.mdl
|
293
|
+
examples/macros_example.mdl
|
292
294
|
examples/scope_examples.mdl
|
293
295
|
examples/simple_counter.mdl
|
294
296
|
icons/favicon-16.png
|
@@ -363,6 +365,7 @@ structures/diamond_sword.json
|
|
363
365
|
structures/test_structure.json
|
364
366
|
structures/workshop.json
|
365
367
|
temp_output/pack.mcmeta
|
368
|
+
temp_output/data/minecraft/tags/function/load.json
|
366
369
|
temp_output/data/test/function/helper.mcfunction
|
367
370
|
temp_output/data/test/function/load.mcfunction
|
368
371
|
temp_output/data/test/function/main.mcfunction
|
@@ -374,6 +377,8 @@ tests/test_codegen_naming_and_logic.py
|
|
374
377
|
tests/test_compiler_fixes.py
|
375
378
|
tests/test_complex_scenarios.py
|
376
379
|
tests/test_comprehensive_end_to_end.py
|
380
|
+
tests/test_examples.py
|
381
|
+
tests/test_macros.py
|
377
382
|
tests/test_python_api.py
|
378
383
|
tests/test_python_bindings.py
|
379
384
|
tests/test_user_regression_test1.py
|