minecraft-datapack-language 16.0.16__tar.gz → 16.0.18__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.16/minecraft_datapack_language.egg-info → minecraft_datapack_language-16.0.18}/PKG-INFO +1 -1
- minecraft_datapack_language-16.0.18/docs/_data/version.yml +3 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/_version.py +3 -3
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/mdl_compiler.py +89 -1
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/mdl_lexer.py +8 -2
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/mdl_parser.py +32 -3
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18/minecraft_datapack_language.egg-info}/PKG-INFO +1 -1
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language.egg-info/SOURCES.txt +0 -2
- minecraft_datapack_language-16.0.16/COMPILER_FIXES_SUMMARY.md +0 -216
- minecraft_datapack_language-16.0.16/CONDITIONALS_IMPLEMENTATION.md +0 -164
- minecraft_datapack_language-16.0.16/docs/_data/version.yml +0 -3
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.cursor/rules/aispec.mdc +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.github/actions/mdl-compile/action.yml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.github/workflows/ci.yml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.github/workflows/docs.yml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.github/workflows/pypi.yml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.github/workflows/release.yml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.github/workflows/update-website-version.yml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.gitignore +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/test1/function/load.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/test1/function/load1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/test1/function/main.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/test1/function/main__else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/test1/function/main__if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/test1/function/testfunc.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/data/test1/function/testfunc__while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1/pack.mcmeta +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/test1/function/load.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/test1/function/load1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/test1/function/main.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/test1/function/main__else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/test1/function/main__if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/test1/function/testfunc.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/data/test1/function/testfunc__while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.mdl-out-test1-confirm/pack.mcmeta +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.tmp_compile_bwe.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.tmp_compile_bwe2.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.tmp_compile_bwe3.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.tmp_verify_loops.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/LICENSE +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/Makefile +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/README.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/advancements/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/advancements/first_spell.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/advancements/other_advancement.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/advancements/test_advancement.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/comprehensive_error_test.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/control_test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/control_test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/control_test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/if_test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/if_test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/countdown_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/countdown_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/loop_demo_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_else_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_7.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/main_while_body_7.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/start_game_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/start_game_if_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/start_game_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/start_game_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_if_else_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_if_else_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_if_else_else_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_if_else_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_if_else_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_if_else_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_while_break_while_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/tick_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/tick_if_2.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/while_test/function/main_while_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/data/while_test/function/main_while_body_0.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/dist.zip +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/.env +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/404.html +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/Gemfile +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/README.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_config.yml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/cli-reference.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/contributing.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/docs-hub.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/documentation.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/examples.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/getting-started.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/language-reference.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/multi-file-projects.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/python-bindings.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_docs/vscode-extension.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_includes/head-custom.html +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_includes/navigation.html +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_layouts/default.html +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_layouts/page.html +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_plugins/test_version.rb +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/_plugins/version_reader.rb +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/assets/css/style.css +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/docs.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/downloads.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/icon-128.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/icon-256.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/icon-512.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/icons/icon-64.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/docs/index.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/examples/hello_world.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/examples/macros_example.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/examples/scope_examples.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/examples/simple_counter.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/icon-128.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/icon-256.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/icon-512.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/icons/icon-64.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/item_modifiers/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/item_modifiers/enchant_tool.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/item_modifiers/test_item_modifier.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/loot_tables/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/loot_tables/epic_loot.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/loot_tables/main_loot.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/loot_tables/test_loot.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/mdllocal.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/__init__.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/ast_nodes.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/cli.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/dir_map.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/mdl_errors.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/mdl_linter.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/python_api.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language/utils.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language.egg-info/requires.txt +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/multi_scope_example.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/my_awesome_pack/README.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/predicates/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/predicates/has_mana.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/predicates/other_predicate.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/predicates/test_predicate.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/pyproject.toml +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/pytest.ini +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/custom_pickaxe.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/first.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/inlet.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/main_recipe.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/outlet.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/pipe.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/second.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/test_recipe.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/recipes/wrench.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scope_demo.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scoreboard_test.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/UpdateMDL.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/bootstrap.ps1 +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/bootstrap.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/build_pkg.ps1 +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/build_pkg.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/dev_build.ps1 +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/dev_build.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/dev_setup.ps1 +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/dev_setup.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/git-bash/test_cli-gitbash.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/release.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/test_cli.ps1 +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/test_cli.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/test_dev.ps1 +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/test_dev.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/update_docs.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/scripts/update_version_info.sh +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/setup.cfg +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/structures/diamond_sword.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/structures/test_structure.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/structures/workshop.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tellraw_variables_test.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/temp_output/data/minecraft/tags/function/load.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/temp_output/data/test/function/helper.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/temp_output/data/test/function/load.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/temp_output/data/test/function/main.mcfunction +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/temp_output/pack.mcmeta +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/test_all_registry.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/test_complex_scenarios.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/test_comprehensive_fixes.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/test_if_else_while.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/test_project/complex_test.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/test_simple.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/__init__.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/run_all_tests.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_cli.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_codegen_naming_and_logic.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_compiler_fixes.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_complex_scenarios.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_comprehensive_end_to_end.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_examples.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_macros.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_python_api.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_python_bindings.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_scheduledwhile.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tests/test_user_regression_test1.py +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tmp_local_cli_out.zip +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tmp_test1.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tmp_test1.mdl~ +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/tmp_test1_confirm.mdl +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/README.md +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/favicon-16.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/favicon-32.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/favicon-48.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/favicon-64.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/icon-1024.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/icon-128.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/icon-256.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/icons/icon-512.png +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/language-configuration.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/package-lock.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/package.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/snippets/mdl.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/src/extension.ts +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/vscode-extension/themes/mdl-color-theme.json +0 -0
- {minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/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.18
|
4
4
|
Summary: Compile MDL language with explicit scoping into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
|
5
5
|
Project-URL: Homepage, https://www.mcmdl.com
|
6
6
|
Project-URL: Documentation, https://www.mcmdl.com/docs
|
@@ -28,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.18'
|
32
|
+
__version_tuple__ = version_tuple = (16, 0, 18)
|
33
33
|
|
34
|
-
__commit_id__ = commit_id = '
|
34
|
+
__commit_id__ = commit_id = 'gaeacc3d7b'
|
@@ -824,7 +824,7 @@ class MDLCompiler:
|
|
824
824
|
Returns one of: '>', '>=', '<', '<=', '==', '!=' or None if unknown.
|
825
825
|
"""
|
826
826
|
# Direct symbol passthrough
|
827
|
-
if op_in in ('>', '>=', '<', '<=', '==', '!='):
|
827
|
+
if op_in in ('>', '>=', '<', '<=', '==', '!=', '&&', '||', '!'):
|
828
828
|
return op_in
|
829
829
|
# TokenType instances
|
830
830
|
try:
|
@@ -840,6 +840,13 @@ class MDLCompiler:
|
|
840
840
|
return '=='
|
841
841
|
if op_in == TokenType.NOT_EQUAL:
|
842
842
|
return '!='
|
843
|
+
# Logical
|
844
|
+
if getattr(TokenType, 'AND', None) and op_in == TokenType.AND:
|
845
|
+
return '&&'
|
846
|
+
if getattr(TokenType, 'OR', None) and op_in == TokenType.OR:
|
847
|
+
return '||'
|
848
|
+
if getattr(TokenType, 'NOT', None) and op_in == TokenType.NOT:
|
849
|
+
return '!'
|
843
850
|
except Exception:
|
844
851
|
pass
|
845
852
|
# String names from bindings or parser
|
@@ -857,6 +864,12 @@ class MDLCompiler:
|
|
857
864
|
return '=='
|
858
865
|
if upper == 'NOT_EQUAL' or upper == 'NE':
|
859
866
|
return '!='
|
867
|
+
if upper in ('AND', '&&'):
|
868
|
+
return '&&'
|
869
|
+
if upper in ('OR', '||'):
|
870
|
+
return '||'
|
871
|
+
if upper in ('NOT', '!'):
|
872
|
+
return '!'
|
860
873
|
return None
|
861
874
|
|
862
875
|
def _expression_to_condition(self, expression: Any) -> str:
|
@@ -887,10 +900,38 @@ class MDLCompiler:
|
|
887
900
|
e = e.expression
|
888
901
|
return e
|
889
902
|
|
903
|
+
# Handle logical operators by compiling to a boolean temp scoreboard var
|
904
|
+
unwrapped = unwrap(expression)
|
905
|
+
op_sym_unwrapped = None
|
906
|
+
# Import here to avoid top-level cycle
|
907
|
+
from .ast_nodes import UnaryExpression as _UnaryExpr
|
908
|
+
if isinstance(unwrapped, BinaryExpression) or isinstance(unwrapped, _UnaryExpr):
|
909
|
+
op_sym_unwrapped = self._normalize_operator(getattr(unwrapped, 'operator', None))
|
910
|
+
if op_sym_unwrapped in ('&&', '||', '!'):
|
911
|
+
bool_var = self._compile_boolean_expression(unwrapped)
|
912
|
+
return (f"score @s {bool_var} matches 1..", False)
|
913
|
+
|
890
914
|
if isinstance(expression, BinaryExpression):
|
891
915
|
left = unwrap(expression.left)
|
892
916
|
right = unwrap(expression.right)
|
893
917
|
op_sym = self._normalize_operator(expression.operator)
|
918
|
+
# Treat a leading logical NOT on a comparator operand as negating the entire comparison
|
919
|
+
# Example: !$a > 0 => NOT ( $a > 0 )
|
920
|
+
if op_sym in (">", ">=", "<", "<=", "==", "!="):
|
921
|
+
try:
|
922
|
+
from .ast_nodes import UnaryExpression as _UnaryExpr
|
923
|
+
except Exception:
|
924
|
+
_UnaryExpr = None
|
925
|
+
if _UnaryExpr is not None and isinstance(left, _UnaryExpr) and self._normalize_operator(getattr(left, 'operator', None)) == '!':
|
926
|
+
# Build condition for (left.operand op right) and invert
|
927
|
+
inner = BinaryExpression(left=left.operand, operator=expression.operator, right=right)
|
928
|
+
cond_str, inv = self._build_condition(inner)
|
929
|
+
return (cond_str, not inv)
|
930
|
+
if _UnaryExpr is not None and isinstance(right, _UnaryExpr) and self._normalize_operator(getattr(right, 'operator', None)) == '!':
|
931
|
+
# Build condition for (left op right.operand) and invert
|
932
|
+
inner = BinaryExpression(left=left, operator=expression.operator, right=right.operand)
|
933
|
+
cond_str, inv = self._build_condition(inner)
|
934
|
+
return (cond_str, not inv)
|
894
935
|
# Variable vs literal
|
895
936
|
if op_sym and isinstance(left, VariableSubstitution) and isinstance(right, LiteralExpression) and isinstance(right.value, (int, float)):
|
896
937
|
objective = self.variables.get(left.name, left.name)
|
@@ -967,6 +1008,53 @@ class MDLCompiler:
|
|
967
1008
|
|
968
1009
|
# Fallback: treat as generic condition string
|
969
1010
|
return (self._expression_to_condition(expression), False)
|
1011
|
+
|
1012
|
+
def _compile_boolean_expression(self, expression: Any, out_var: Optional[str] = None) -> str:
|
1013
|
+
"""Compile a logical expression into a temporary boolean scoreboard variable (1 true, 0 false).
|
1014
|
+
Returns the objective name for the boolean temp variable.
|
1015
|
+
"""
|
1016
|
+
from .ast_nodes import BinaryExpression as Bin, UnaryExpression as Un, ParenthesizedExpression as Par
|
1017
|
+
if out_var is None:
|
1018
|
+
out_var = self._generate_temp_variable_name()
|
1019
|
+
# Ensure initialized to 0
|
1020
|
+
self._store_temp_command(f"scoreboard players set @s {out_var} 0")
|
1021
|
+
|
1022
|
+
def emit_set_true_when(cond_expr: Any):
|
1023
|
+
cond_str, inv = self._build_condition(cond_expr)
|
1024
|
+
prefix = "unless" if inv else "if"
|
1025
|
+
self._store_temp_command(f"execute {prefix} {cond_str} run scoreboard players set @s {out_var} 1")
|
1026
|
+
|
1027
|
+
expr = expression
|
1028
|
+
# Parentheses
|
1029
|
+
if isinstance(expr, Par):
|
1030
|
+
return self._compile_boolean_expression(expr.expression, out_var)
|
1031
|
+
# Unary NOT
|
1032
|
+
if isinstance(expr, Un):
|
1033
|
+
op = self._normalize_operator(expr.operator)
|
1034
|
+
if op == '!':
|
1035
|
+
inner_var = self._compile_boolean_expression(expr.operand)
|
1036
|
+
# out = NOT inner
|
1037
|
+
self._store_temp_command(f"execute unless score @s {inner_var} matches 1.. run scoreboard players set @s {out_var} 1")
|
1038
|
+
return out_var
|
1039
|
+
# Binary logical
|
1040
|
+
if isinstance(expr, Bin):
|
1041
|
+
op = self._normalize_operator(expr.operator)
|
1042
|
+
if op == '&&':
|
1043
|
+
left_var = self._compile_boolean_expression(expr.left)
|
1044
|
+
right_var = self._compile_boolean_expression(expr.right)
|
1045
|
+
# Set true only when both true
|
1046
|
+
self._store_temp_command(f"execute if score @s {left_var} matches 1.. if score @s {right_var} matches 1.. run scoreboard players set @s {out_var} 1")
|
1047
|
+
return out_var
|
1048
|
+
if op == '||':
|
1049
|
+
left_var = self._compile_boolean_expression(expr.left)
|
1050
|
+
right_var = self._compile_boolean_expression(expr.right)
|
1051
|
+
# Set true when either true
|
1052
|
+
self._store_temp_command(f"execute if score @s {left_var} matches 1.. run scoreboard players set @s {out_var} 1")
|
1053
|
+
self._store_temp_command(f"execute if score @s {right_var} matches 1.. run scoreboard players set @s {out_var} 1")
|
1054
|
+
return out_var
|
1055
|
+
# Base comparator or non-logical: set true if base condition holds
|
1056
|
+
emit_set_true_when(expr)
|
1057
|
+
return out_var
|
970
1058
|
|
971
1059
|
def _compile_expression_to_temp(self, expression: BinaryExpression, temp_var: str):
|
972
1060
|
"""Compile a complex expression to a temporary variable using valid Minecraft commands."""
|
@@ -59,6 +59,9 @@ class TokenType:
|
|
59
59
|
LESS = "LESS" # <
|
60
60
|
GREATER_EQUAL = "GREATER_EQUAL" # >=
|
61
61
|
LESS_EQUAL = "LESS_EQUAL" # <=
|
62
|
+
AND = "AND" # &&
|
63
|
+
OR = "OR" # ||
|
64
|
+
NOT = "NOT" # ! (logical not)
|
62
65
|
|
63
66
|
# Delimiters
|
64
67
|
SEMICOLON = "SEMICOLON" # ;
|
@@ -552,7 +555,7 @@ class MDLLexer:
|
|
552
555
|
if self.current + 1 < len(self.source):
|
553
556
|
two_char = self.source[self.current:self.current + 2]
|
554
557
|
|
555
|
-
if two_char in ['==', '!=', '>=', '<=', '..']:
|
558
|
+
if two_char in ['==', '!=', '>=', '<=', '..', '&&', '||']:
|
556
559
|
self.current += 2
|
557
560
|
self.column += 2
|
558
561
|
|
@@ -561,7 +564,9 @@ class MDLLexer:
|
|
561
564
|
'!=': TokenType.NOT_EQUAL,
|
562
565
|
'>=': TokenType.GREATER_EQUAL,
|
563
566
|
'<=': TokenType.LESS_EQUAL,
|
564
|
-
'..': TokenType.RANGE
|
567
|
+
'..': TokenType.RANGE,
|
568
|
+
'&&': TokenType.AND,
|
569
|
+
'||': TokenType.OR
|
565
570
|
}[two_char]
|
566
571
|
|
567
572
|
self.tokens.append(Token(token_type, two_char, self.line, self.column - 2))
|
@@ -576,6 +581,7 @@ class MDLLexer:
|
|
576
581
|
'=': TokenType.ASSIGN,
|
577
582
|
'>': TokenType.GREATER,
|
578
583
|
'<': TokenType.LESS,
|
584
|
+
'!': TokenType.NOT,
|
579
585
|
';': TokenType.SEMICOLON,
|
580
586
|
',': TokenType.COMMA,
|
581
587
|
':': TokenType.COLON,
|
@@ -465,7 +465,27 @@ class MDLParser:
|
|
465
465
|
|
466
466
|
def _parse_expression(self) -> Any:
|
467
467
|
"""Parse an expression with operator precedence."""
|
468
|
-
return self.
|
468
|
+
return self._parse_or()
|
469
|
+
|
470
|
+
def _parse_or(self) -> Any:
|
471
|
+
"""Parse logical OR (||) with left associativity."""
|
472
|
+
expr = self._parse_and()
|
473
|
+
while not self._is_at_end() and self._peek().type == TokenType.OR:
|
474
|
+
operator = self._peek().type
|
475
|
+
self._advance()
|
476
|
+
right = self._parse_and()
|
477
|
+
expr = BinaryExpression(left=expr, operator=operator, right=right)
|
478
|
+
return expr
|
479
|
+
|
480
|
+
def _parse_and(self) -> Any:
|
481
|
+
"""Parse logical AND (&&) with left associativity."""
|
482
|
+
expr = self._parse_comparison()
|
483
|
+
while not self._is_at_end() and self._peek().type == TokenType.AND:
|
484
|
+
operator = self._peek().type
|
485
|
+
self._advance()
|
486
|
+
right = self._parse_comparison()
|
487
|
+
expr = BinaryExpression(left=expr, operator=operator, right=right)
|
488
|
+
return expr
|
469
489
|
|
470
490
|
def _parse_comparison(self) -> Any:
|
471
491
|
"""Parse comparison expressions (>, <, >=, <=, ==, !=)."""
|
@@ -496,15 +516,24 @@ class MDLParser:
|
|
496
516
|
|
497
517
|
def _parse_factor(self) -> Any:
|
498
518
|
"""Parse multiplication and division factors."""
|
499
|
-
expr = self.
|
519
|
+
expr = self._parse_unary()
|
500
520
|
|
501
521
|
while not self._is_at_end() and self._peek().type in [TokenType.MULTIPLY, TokenType.DIVIDE]:
|
502
522
|
operator = self._peek().type
|
503
523
|
self._advance()
|
504
|
-
right = self.
|
524
|
+
right = self._parse_unary()
|
505
525
|
expr = BinaryExpression(left=expr, operator=operator, right=right)
|
506
526
|
|
507
527
|
return expr
|
528
|
+
|
529
|
+
def _parse_unary(self) -> Any:
|
530
|
+
"""Parse unary expressions (logical NOT)."""
|
531
|
+
if not self._is_at_end() and self._peek().type in [TokenType.NOT]:
|
532
|
+
operator = self._peek().type
|
533
|
+
self._advance()
|
534
|
+
operand = self._parse_unary()
|
535
|
+
return UnaryExpression(operator=operator, operand=operand)
|
536
|
+
return self._parse_primary()
|
508
537
|
|
509
538
|
def _parse_primary(self) -> Any:
|
510
539
|
"""Parse primary expressions (literals, variables, parenthesized expressions)."""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: minecraft-datapack-language
|
3
|
-
Version: 16.0.
|
3
|
+
Version: 16.0.18
|
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
|
@@ -1,216 +0,0 @@
|
|
1
|
-
# MDL Compiler Fixes Summary
|
2
|
-
|
3
|
-
## Overview
|
4
|
-
This document summarizes all the fixes implemented to resolve the critical issues in the MDL (Minecraft Datapack Language) compiler.
|
5
|
-
|
6
|
-
## Issues Identified and Fixed
|
7
|
-
|
8
|
-
### 1. ❌ **Complex Expressions Not Working**
|
9
|
-
**Problem**: The compiler was generating invalid Minecraft syntax like `scoreboard players set @s score score @s counter + score @s health * score @s bonus`
|
10
|
-
|
11
|
-
**Root Cause**: The `_expression_to_value` method was trying to concatenate strings instead of generating valid Minecraft scoreboard commands.
|
12
|
-
|
13
|
-
**Solution Implemented**:
|
14
|
-
- Added `_compile_expression_to_temp()` method to handle complex expressions
|
15
|
-
- Added `_store_temp_command()` method to collect temporary operations
|
16
|
-
- Added `_generate_temp_variable_name()` method for unique temporary variables
|
17
|
-
- Updated `_variable_assignment_to_command()` to use temporary variables for complex expressions
|
18
|
-
|
19
|
-
**Result**: ✅ Complex expressions now generate valid Minecraft commands:
|
20
|
-
```mcfunction
|
21
|
-
# Before (invalid):
|
22
|
-
scoreboard players set @s score score @s counter + score @s health * score @s bonus
|
23
|
-
|
24
|
-
# After (valid):
|
25
|
-
scoreboard players set @s temp_2 score @s counter
|
26
|
-
scoreboard players add @s temp_2 score @s health
|
27
|
-
scoreboard players set @s temp_1 score @s temp_2
|
28
|
-
scoreboard players operation @s temp_1 *= score @s bonus
|
29
|
-
scoreboard players operation @s score = @s temp_1
|
30
|
-
```
|
31
|
-
|
32
|
-
### 2. ❌ **If/Else If/Else Not Working**
|
33
|
-
**Problem**: The compiler was only generating comments for if statements instead of actual Minecraft conditional logic.
|
34
|
-
|
35
|
-
**Root Cause**: The `_if_statement_to_command()` method was incomplete and only generated comments.
|
36
|
-
|
37
|
-
**Solution Implemented**:
|
38
|
-
- Complete rewrite of `_if_statement_to_command()` method
|
39
|
-
- Proper handling of `else if` as nested if statements
|
40
|
-
- Generation of `execute if score` and `execute unless score` commands
|
41
|
-
- Creation of separate generated functions for if/else blocks
|
42
|
-
|
43
|
-
**Result**: ✅ If/else if/else now generates proper Minecraft conditional logic:
|
44
|
-
```mcfunction
|
45
|
-
# Before (just comments):
|
46
|
-
# if $counter<@s>$ > 5
|
47
|
-
say "Counter is high!";
|
48
|
-
|
49
|
-
# After (proper conditional logic):
|
50
|
-
execute if score @s counter GREATER 5.0 run function test:if_1
|
51
|
-
execute if score @s counter GREATER 2.0 run function test:if_3
|
52
|
-
execute unless score @s counter GREATER 2.0 run function test:else_1
|
53
|
-
```
|
54
|
-
|
55
|
-
### 3. ❌ **While Loops Not Working**
|
56
|
-
**Problem**: The compiler was only generating comments for while loops instead of actual loop logic.
|
57
|
-
|
58
|
-
**Root Cause**: The `_while_loop_to_command()` method was incomplete and only generated comments.
|
59
|
-
|
60
|
-
**Solution Implemented**:
|
61
|
-
- Complete rewrite of `_while_loop_to_command()` method
|
62
|
-
- Generation of recursive function calls for loop continuation
|
63
|
-
- Proper condition checking with `execute if score`
|
64
|
-
|
65
|
-
**Result**: ✅ While loops now generate proper Minecraft loop logic:
|
66
|
-
```mcfunction
|
67
|
-
# Before (just comments):
|
68
|
-
# while $counter<@s>$ < 5
|
69
|
-
counter<@s> = $counter<@s>$ + 1;
|
70
|
-
|
71
|
-
# After (proper loop logic):
|
72
|
-
function test:while_1
|
73
|
-
# ... loop body ...
|
74
|
-
execute if score @s counter LESS 5.0 run function test:while_1
|
75
|
-
```
|
76
|
-
|
77
|
-
### 4. ❌ **Function Execution Scope Issues**
|
78
|
-
**Problem**: Function execution scope was not being properly handled.
|
79
|
-
|
80
|
-
**Root Cause**: The `_function_call_to_command()` method needed improvement.
|
81
|
-
|
82
|
-
**Solution Implemented**:
|
83
|
-
- Enhanced `_function_call_to_command()` method
|
84
|
-
- Proper handling of `exec function:name` vs `exec function:name<@s>`
|
85
|
-
- Generation of appropriate `execute as` commands
|
86
|
-
|
87
|
-
**Result**: ✅ Function execution now works correctly with proper scope handling:
|
88
|
-
```mcfunction
|
89
|
-
# Function call without scope:
|
90
|
-
function test:helper
|
91
|
-
|
92
|
-
# Function call with @s scope:
|
93
|
-
execute as @s run function test:helper
|
94
|
-
|
95
|
-
# Function call with @a scope:
|
96
|
-
execute as @a run function test:helper
|
97
|
-
```
|
98
|
-
|
99
|
-
### 5. ❌ **Generated Functions Not Being Created**
|
100
|
-
**Problem**: The compiler was generating function calls but not creating the actual generated functions.
|
101
|
-
|
102
|
-
**Root Cause**: The `_store_generated_function()` method was storing functions but they weren't being included in the output.
|
103
|
-
|
104
|
-
**Solution Implemented**:
|
105
|
-
- Enhanced `_generate_function_content()` method
|
106
|
-
- Proper inclusion of generated functions in function output
|
107
|
-
- Temporary command handling for complex expressions
|
108
|
-
|
109
|
-
**Result**: ✅ Generated functions are now properly created and included in the output.
|
110
|
-
|
111
|
-
## Technical Implementation Details
|
112
|
-
|
113
|
-
### Temporary Variable System
|
114
|
-
The compiler now uses a sophisticated temporary variable system for complex expressions:
|
115
|
-
|
116
|
-
1. **Expression Analysis**: Complex expressions are broken down into simple operations
|
117
|
-
2. **Temporary Variable Generation**: Unique temporary variables are created for intermediate results
|
118
|
-
3. **Command Generation**: Valid Minecraft scoreboard commands are generated for each operation
|
119
|
-
4. **Result Assignment**: The final result is assigned to the target variable
|
120
|
-
|
121
|
-
### Control Structure Compilation
|
122
|
-
Control structures are compiled using a function-based approach:
|
123
|
-
|
124
|
-
1. **Condition Evaluation**: Conditions are converted to scoreboard comparisons
|
125
|
-
2. **Function Generation**: Separate functions are created for each control block
|
126
|
-
3. **Execute Commands**: `execute if` and `execute unless` commands are generated
|
127
|
-
4. **Recursive Calls**: While loops use recursive function calls for iteration
|
128
|
-
|
129
|
-
### Scope Handling
|
130
|
-
Variable and function scopes are handled explicitly:
|
131
|
-
|
132
|
-
1. **Variable Scopes**: Each variable operation specifies its scope with `<>` brackets
|
133
|
-
2. **Function Scopes**: Function calls can specify execution scope
|
134
|
-
3. **Scoreboard Operations**: All operations use proper Minecraft scoreboard syntax
|
135
|
-
|
136
|
-
## Testing and Verification
|
137
|
-
|
138
|
-
### Test Files Created
|
139
|
-
1. **`test_complex_scenarios.mdl`** - Tests complex expressions and function execution
|
140
|
-
2. **`test_comprehensive_fixes.mdl`** - Comprehensive test of all fixes
|
141
|
-
3. **`test_compiler_fixes.py`** - Python test suite for programmatic verification
|
142
|
-
|
143
|
-
### Test Results
|
144
|
-
✅ **Complex Expressions**: Working correctly with valid Minecraft syntax
|
145
|
-
✅ **If/Else If/Else**: Working correctly with proper conditional logic
|
146
|
-
✅ **While Loops**: Working correctly with recursive function calls
|
147
|
-
✅ **Function Execution**: Working correctly with proper scope handling
|
148
|
-
✅ **Variable Scopes**: Working correctly across different scopes
|
149
|
-
✅ **Generated Functions**: Working correctly with proper output
|
150
|
-
|
151
|
-
### CLI Testing
|
152
|
-
The fixes have been tested using the local MDL compiler (`./mdllocal.sh`) and verified to generate valid Minecraft datapack files.
|
153
|
-
|
154
|
-
## Files Modified
|
155
|
-
|
156
|
-
### Core Compiler Files
|
157
|
-
- **`minecraft_datapack_language/mdl_compiler.py`**
|
158
|
-
- Added complex expression compilation methods
|
159
|
-
- Fixed if/else if/else compilation
|
160
|
-
- Fixed while loop compilation
|
161
|
-
- Enhanced function execution scope handling
|
162
|
-
- Added temporary variable system
|
163
|
-
- Fixed generated function output
|
164
|
-
|
165
|
-
### Test Files
|
166
|
-
- **`test_complex_scenarios.mdl`** - Test file for complex scenarios
|
167
|
-
- **`test_comprehensive_fixes.mdl`** - Comprehensive test file
|
168
|
-
- **`test_compiler_fixes.py`** - Python test suite
|
169
|
-
- **`mdllocal.sh`** - Local compiler shim for testing
|
170
|
-
|
171
|
-
### Documentation
|
172
|
-
- **`docs/_docs/language-reference.md`** - Updated to reflect working features
|
173
|
-
- **`COMPILER_FIXES_SUMMARY.md`** - This summary document
|
174
|
-
|
175
|
-
## Build and Test Commands
|
176
|
-
|
177
|
-
### Testing the Fixes
|
178
|
-
```bash
|
179
|
-
# Test with local compiler
|
180
|
-
./mdllocal.sh build --mdl test_comprehensive_fixes.mdl -o dist
|
181
|
-
|
182
|
-
# Run Python test suite
|
183
|
-
python test_compiler_fixes.py
|
184
|
-
|
185
|
-
# Run via Makefile
|
186
|
-
make test-compiler
|
187
|
-
```
|
188
|
-
|
189
|
-
### Building Examples
|
190
|
-
```bash
|
191
|
-
# Build comprehensive test
|
192
|
-
./mdllocal.sh build --mdl test_comprehensive_fixes.mdl -o dist
|
193
|
-
|
194
|
-
# Build complex scenarios test
|
195
|
-
./mdllocal.sh build --mdl test_complex_scenarios.mdl -o dist
|
196
|
-
```
|
197
|
-
|
198
|
-
## Conclusion
|
199
|
-
|
200
|
-
All critical compiler issues have been resolved:
|
201
|
-
|
202
|
-
1. ✅ **Complex expressions now compile to valid Minecraft syntax**
|
203
|
-
2. ✅ **If/else if/else statements work correctly**
|
204
|
-
3. ✅ **While loops work correctly**
|
205
|
-
4. ✅ **Function execution scope handling works correctly**
|
206
|
-
5. ✅ **Generated functions are properly created and included**
|
207
|
-
|
208
|
-
The MDL compiler now generates valid, functional Minecraft datapack files that can be used in actual Minecraft worlds. The fixes maintain backward compatibility while adding robust support for complex language constructs.
|
209
|
-
|
210
|
-
## Next Steps
|
211
|
-
|
212
|
-
1. **Integration Testing**: Test the fixes with real Minecraft datapacks
|
213
|
-
2. **Performance Optimization**: Optimize the temporary variable system for large expressions
|
214
|
-
3. **Error Handling**: Add better error messages for edge cases
|
215
|
-
4. **Documentation**: Update user documentation with working examples
|
216
|
-
5. **CI Integration**: Add the test suite to continuous integration
|
@@ -1,164 +0,0 @@
|
|
1
|
-
# Conditional Functionality Implementation Summary
|
2
|
-
|
3
|
-
## Overview
|
4
|
-
|
5
|
-
This document summarizes the implementation of if/else if/else functionality in the Minecraft Datapack Language (MDL).
|
6
|
-
|
7
|
-
## ✅ Implementation Status
|
8
|
-
|
9
|
-
### Core Functionality
|
10
|
-
- ✅ **Parser Support**: Conditional blocks are parsed as regular commands
|
11
|
-
- ✅ **Post-Processing**: Conditional blocks are converted to separate functions
|
12
|
-
- ✅ **Execute Commands**: Proper Minecraft `execute` syntax is generated
|
13
|
-
- ✅ **Complex Conditions**: Support for NBT data and complex selectors
|
14
|
-
- ✅ **Multiple else if**: Support for multiple else if blocks
|
15
|
-
- ✅ **Else blocks**: Optional else blocks are supported
|
16
|
-
|
17
|
-
### Syntax Support
|
18
|
-
- ✅ `if "condition":` - Simple if statements
|
19
|
-
- ✅ `else if "condition":` - Else if statements
|
20
|
-
- ✅ `else:` - Else blocks
|
21
|
-
- ✅ Complex conditions with NBT data
|
22
|
-
- ✅ Mixed commands with conditionals
|
23
|
-
|
24
|
-
### Generated Output
|
25
|
-
- ✅ Main function contains `execute` commands
|
26
|
-
- ✅ Conditional blocks become separate functions
|
27
|
-
- ✅ Proper function naming convention
|
28
|
-
- ✅ Correct `execute if` and `execute unless` syntax
|
29
|
-
|
30
|
-
## 📁 Files Modified
|
31
|
-
|
32
|
-
### Core Implementation
|
33
|
-
- `minecraft_datapack_language/pack.py` - Added `_process_conditionals` method
|
34
|
-
- `minecraft_datapack_language/mdl_parser_js.py` - JavaScript-style parser with modern syntax
|
35
|
-
|
36
|
-
### Documentation
|
37
|
-
- `README.md` - Added conditional blocks section
|
38
|
-
- `docs/_docs/language-reference.md` - Added comprehensive conditional documentation
|
39
|
-
- `docs/_docs/examples.md` - Added conditional examples
|
40
|
-
- `docs/_docs/python-bindings.md` - Added conditional Python bindings examples
|
41
|
-
|
42
|
-
### Tests
|
43
|
-
- `test_examples/conditionals.mdl` - Comprehensive MDL test file
|
44
|
-
- `test_examples/conditionals.py` - Python bindings test file
|
45
|
-
- `test_regression.py` - Regression test suite
|
46
|
-
- `test_examples/run_all_tests.py` - Updated to include conditionals
|
47
|
-
|
48
|
-
## 🧪 Testing
|
49
|
-
|
50
|
-
### Test Coverage
|
51
|
-
- ✅ Basic conditional syntax
|
52
|
-
- ✅ Complex conditions with NBT
|
53
|
-
- ✅ Multiple else if blocks
|
54
|
-
- ✅ Mixed commands with conditionals
|
55
|
-
- ✅ Conditional function calls
|
56
|
-
- ✅ Invalid syntax handling
|
57
|
-
- ✅ Regression testing (existing functionality)
|
58
|
-
- ✅ Python bindings compatibility
|
59
|
-
|
60
|
-
### Test Results
|
61
|
-
- **Regression Tests**: 7/7 passed ✅
|
62
|
-
- **Comprehensive Tests**: 17/17 passed ✅
|
63
|
-
- **Python bindings tests**: All passed ✅
|
64
|
-
|
65
|
-
## 📖 Documentation
|
66
|
-
|
67
|
-
### Syntax Examples
|
68
|
-
|
69
|
-
```mdl
|
70
|
-
function "weapon_effects":
|
71
|
-
if "entity @s[type=minecraft:player,nbt={SelectedItem:{id:\"minecraft:diamond_sword\"}}]":
|
72
|
-
say Diamond sword detected!
|
73
|
-
effect give @s minecraft:strength 10 1
|
74
|
-
else if "entity @s[type=minecraft:player,nbt={SelectedItem:{id:\"minecraft:golden_sword\"}}]":
|
75
|
-
say Golden sword detected!
|
76
|
-
effect give @s minecraft:speed 10 1
|
77
|
-
else if "entity @s[type=minecraft:player]":
|
78
|
-
say Player without special sword
|
79
|
-
effect give @s minecraft:haste 5 0
|
80
|
-
else:
|
81
|
-
say No player found
|
82
|
-
```
|
83
|
-
|
84
|
-
### Generated Output
|
85
|
-
|
86
|
-
The above MDL generates:
|
87
|
-
|
88
|
-
**Main function (`weapon_effects.mcfunction`):**
|
89
|
-
```mcfunction
|
90
|
-
execute if entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:diamond_sword"}}] run function test:weapon_effects_if_1
|
91
|
-
execute unless entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:diamond_sword"}}] if entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:golden_sword"}}] run function test:weapon_effects_elif_2
|
92
|
-
execute unless entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:diamond_sword"}}] unless entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:golden_sword"}}] if entity @s[type=minecraft:player] run function test:weapon_effects_elif_3
|
93
|
-
execute unless entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:diamond_sword"}}] unless entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:golden_sword"}}] unless entity @s[type=minecraft:player] run function test:weapon_effects_else
|
94
|
-
```
|
95
|
-
|
96
|
-
**Conditional functions:**
|
97
|
-
- `weapon_effects_if_1.mcfunction` - Diamond sword effects
|
98
|
-
- `weapon_effects_elif_2.mcfunction` - Golden sword effects
|
99
|
-
- `weapon_effects_elif_3.mcfunction` - Default player effects
|
100
|
-
- `weapon_effects_else.mcfunction` - No player found
|
101
|
-
|
102
|
-
## 🔧 Technical Details
|
103
|
-
|
104
|
-
### Implementation Approach
|
105
|
-
1. **Parser**: Treats conditional blocks as regular commands
|
106
|
-
2. **Post-Processing**: Converts conditional blocks to separate functions
|
107
|
-
3. **Execute Commands**: Generates proper Minecraft execute syntax
|
108
|
-
4. **Function Generation**: Creates separate functions for each conditional block
|
109
|
-
|
110
|
-
### Key Features
|
111
|
-
- **Backward Compatible**: Existing MDL files continue to work
|
112
|
-
- **Robust**: Handles complex conditions and edge cases
|
113
|
-
- **Efficient**: Minimal overhead in parsing
|
114
|
-
- **Flexible**: Supports all valid Minecraft selector syntax
|
115
|
-
|
116
|
-
### Error Handling
|
117
|
-
- Invalid conditional syntax is treated as regular commands
|
118
|
-
- Clear error messages for malformed conditions
|
119
|
-
- Graceful degradation for edge cases
|
120
|
-
|
121
|
-
## 🎯 Use Cases
|
122
|
-
|
123
|
-
### Common Patterns
|
124
|
-
1. **Weapon Effects**: Different effects based on held items
|
125
|
-
2. **Entity Detection**: Different behavior for different entity types
|
126
|
-
3. **Conditional Function Calls**: Call different functions based on conditions
|
127
|
-
4. **Complex Logic**: Multi-level conditional logic
|
128
|
-
|
129
|
-
### Examples
|
130
|
-
- Combat systems with different weapon effects
|
131
|
-
- UI systems that adapt to player state
|
132
|
-
- AI systems with different behaviors
|
133
|
-
- Game mechanics with conditional triggers
|
134
|
-
|
135
|
-
## 🚀 Future Enhancements
|
136
|
-
|
137
|
-
### Potential Improvements
|
138
|
-
- **Nested Conditionals**: Support for nested if/else blocks
|
139
|
-
- **Switch Statements**: Alternative syntax for multiple conditions
|
140
|
-
- **Conditional Macros**: Reusable conditional patterns
|
141
|
-
- **Performance Optimizations**: More efficient execute command generation
|
142
|
-
|
143
|
-
### Considerations
|
144
|
-
- **Complexity**: Keep the language simple and readable
|
145
|
-
- **Performance**: Ensure generated commands are efficient
|
146
|
-
- **Compatibility**: Maintain backward compatibility
|
147
|
-
- **Documentation**: Keep examples and documentation up to date
|
148
|
-
|
149
|
-
## 📋 Checklist
|
150
|
-
|
151
|
-
- ✅ Core functionality implemented
|
152
|
-
- ✅ Comprehensive testing completed
|
153
|
-
- ✅ Documentation updated
|
154
|
-
- ✅ Examples created
|
155
|
-
- ✅ Python bindings support
|
156
|
-
- ✅ Regression tests passing
|
157
|
-
- ✅ Backward compatibility verified
|
158
|
-
- ✅ Error handling implemented
|
159
|
-
|
160
|
-
## 🎉 Conclusion
|
161
|
-
|
162
|
-
The conditional functionality has been successfully implemented and thoroughly tested. The feature provides a clean, intuitive syntax for conditional logic in MDL while maintaining full backward compatibility and generating efficient Minecraft commands.
|
163
|
-
|
164
|
-
The implementation follows MDL's design principles of simplicity, readability, and compatibility with existing Minecraft datapack standards.
|
{minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.cursor/rules/aispec.mdc
RENAMED
File without changes
|
File without changes
|
{minecraft_datapack_language-16.0.16 → minecraft_datapack_language-16.0.18}/.github/workflows/ci.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|