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.
Files changed (394) hide show
  1. {minecraft_datapack_language-15.4.40/minecraft_datapack_language.egg-info → minecraft_datapack_language-15.4.42}/PKG-INFO +5 -5
  2. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/README.md +4 -4
  3. minecraft_datapack_language-15.4.42/docs/_data/version.yml +3 -0
  4. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/cli-reference.md +2 -2
  5. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/examples.md +35 -9
  6. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/getting-started.md +3 -3
  7. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/language-reference.md +14 -0
  8. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/vscode-extension.md +1 -1
  9. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/index.md +2 -2
  10. minecraft_datapack_language-15.4.42/examples/hello_world.mdl +23 -0
  11. minecraft_datapack_language-15.4.42/examples/macros_example.mdl +20 -0
  12. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/examples/simple_counter.mdl +7 -7
  13. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/_version.py +3 -3
  14. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/ast_nodes.py +9 -0
  15. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_compiler.py +13 -4
  16. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_lexer.py +36 -8
  17. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_parser.py +36 -4
  18. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42/minecraft_datapack_language.egg-info}/PKG-INFO +5 -5
  19. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/SOURCES.txt +5 -0
  20. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/multi_scope_example.mdl +30 -23
  21. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scope_demo.mdl +9 -9
  22. minecraft_datapack_language-15.4.42/temp_output/data/minecraft/tags/function/load.json +5 -0
  23. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/run_all_tests.py +5 -5
  24. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_cli.py +3 -0
  25. minecraft_datapack_language-15.4.42/tests/test_examples.py +43 -0
  26. minecraft_datapack_language-15.4.42/tests/test_macros.py +58 -0
  27. minecraft_datapack_language-15.4.42/tmp_local_cli_out.zip +0 -0
  28. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/README.md +3 -3
  29. minecraft_datapack_language-15.4.40/docs/_data/version.yml +0 -3
  30. minecraft_datapack_language-15.4.40/examples/hello_world.mdl +0 -23
  31. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.cursor/rules/aispec.mdc +0 -0
  32. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/actions/mdl-compile/action.yml +0 -0
  33. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/ci.yml +0 -0
  34. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/docs.yml +0 -0
  35. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/pypi.yml +0 -0
  36. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/release.yml +0 -0
  37. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.github/workflows/update-website-version.yml +0 -0
  38. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.gitignore +0 -0
  39. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/minecraft/tags/function/load.json +0 -0
  40. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/load.mcfunction +0 -0
  41. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/load1.mcfunction +0 -0
  42. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/main.mcfunction +0 -0
  43. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/main__else_1.mcfunction +0 -0
  44. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/main__if_1.mcfunction +0 -0
  45. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/testfunc.mcfunction +0 -0
  46. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/data/test1/function/testfunc__while_1.mcfunction +0 -0
  47. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1/pack.mcmeta +0 -0
  48. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/minecraft/tags/function/load.json +0 -0
  49. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/load.mcfunction +0 -0
  50. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/load1.mcfunction +0 -0
  51. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/main.mcfunction +0 -0
  52. {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
  53. {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
  54. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/data/test1/function/testfunc.mcfunction +0 -0
  55. {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
  56. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/.mdl-out-test1-confirm/pack.mcmeta +0 -0
  57. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/COMPILER_FIXES_SUMMARY.md +0 -0
  58. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/CONDITIONALS_IMPLEMENTATION.md +0 -0
  59. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/LICENSE +0 -0
  60. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/Makefile +0 -0
  61. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/diamond_sword.json +0 -0
  62. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/first_spell.json +0 -0
  63. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/other_advancement.json +0 -0
  64. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/advancements/test_advancement.json +0 -0
  65. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/comprehensive_error_test.mdl +0 -0
  66. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
  67. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {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
  86. {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
  87. {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
  88. {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
  89. {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
  90. {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
  91. {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
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {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
  98. {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
  99. {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
  100. {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
  101. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/control_test/function/main_if_0.mcfunction +0 -0
  102. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/control_test/function/main_while_1.mcfunction +0 -0
  103. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/control_test/function/main_while_body_1.mcfunction +0 -0
  104. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/if_test/function/main_else_1.mcfunction +0 -0
  105. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/if_test/function/main_if_1.mcfunction +0 -0
  106. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
  107. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
  108. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
  109. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
  110. {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
  111. {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
  112. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/countdown_while_1.mcfunction +0 -0
  113. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/countdown_while_body_1.mcfunction +0 -0
  114. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
  115. {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
  116. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/loop_demo_while_2.mcfunction +0 -0
  117. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
  118. {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
  119. {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
  120. {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
  121. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_else_0.mcfunction +0 -0
  122. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_else_1.mcfunction +0 -0
  123. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_else_5.mcfunction +0 -0
  124. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_if_0.mcfunction +0 -0
  125. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_if_1.mcfunction +0 -0
  126. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_if_5.mcfunction +0 -0
  127. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_0.mcfunction +0 -0
  128. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_1.mcfunction +0 -0
  129. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_2.mcfunction +0 -0
  130. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_6.mcfunction +0 -0
  131. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_7.mcfunction +0 -0
  132. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_0.mcfunction +0 -0
  133. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_1.mcfunction +0 -0
  134. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_2.mcfunction +0 -0
  135. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_6.mcfunction +0 -0
  136. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/main_while_body_7.mcfunction +0 -0
  137. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
  138. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
  139. {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
  140. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_if_1.mcfunction +0 -0
  141. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_if_5.mcfunction +0 -0
  142. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_while_4.mcfunction +0 -0
  143. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/start_game_while_body_4.mcfunction +0 -0
  144. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
  145. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
  146. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
  147. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
  148. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
  149. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
  150. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
  151. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
  152. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
  153. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
  154. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
  155. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
  156. {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
  157. {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
  158. {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
  159. {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
  160. {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
  161. {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
  162. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
  163. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
  164. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
  165. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
  166. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
  167. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
  168. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
  169. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
  170. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
  171. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
  172. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
  173. {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
  174. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
  175. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
  176. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
  177. {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
  178. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
  179. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
  180. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
  181. {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
  182. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
  183. {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
  184. {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
  185. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
  186. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
  187. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
  188. {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
  189. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
  190. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
  191. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
  192. {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
  193. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
  194. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
  195. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
  196. {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
  197. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
  198. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
  199. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
  200. {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
  201. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
  202. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
  203. {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
  204. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
  205. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
  206. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
  207. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
  208. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
  209. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
  210. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
  211. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
  212. {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
  213. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_else_1.mcfunction +0 -0
  214. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_else_2.mcfunction +0 -0
  215. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_else_3.mcfunction +0 -0
  216. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_if_1.mcfunction +0 -0
  217. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_if_2.mcfunction +0 -0
  218. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_if_else_if_3.mcfunction +0 -0
  219. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_main_while_0.mcfunction +0 -0
  220. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_main_while_body_0.mcfunction +0 -0
  221. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
  222. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
  223. {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
  224. {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
  225. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
  226. {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
  227. {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
  228. {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
  229. {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
  230. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
  231. {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
  232. {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
  233. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
  234. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
  235. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
  236. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
  237. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
  238. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
  239. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
  240. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
  241. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
  242. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
  243. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_while_break_while_2.mcfunction +0 -0
  244. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
  245. {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
  246. {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
  247. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_1.mcfunction +0 -0
  248. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_2.mcfunction +0 -0
  249. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
  250. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
  251. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
  252. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
  253. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
  254. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
  255. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/while_test/function/main_while_0.mcfunction +0 -0
  256. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/data/while_test/function/main_while_body_0.mcfunction +0 -0
  257. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/dist.zip +0 -0
  258. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/.env +0 -0
  259. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/404.html +0 -0
  260. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/Gemfile +0 -0
  261. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/README.md +0 -0
  262. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_config.yml +0 -0
  263. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/contributing.md +0 -0
  264. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/docs-hub.md +0 -0
  265. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/documentation.md +0 -0
  266. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/multi-file-projects.md +0 -0
  267. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_docs/python-bindings.md +0 -0
  268. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_includes/head-custom.html +0 -0
  269. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_includes/navigation.html +0 -0
  270. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_layouts/default.html +0 -0
  271. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_layouts/page.html +0 -0
  272. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_plugins/test_version.rb +0 -0
  273. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/_plugins/version_reader.rb +0 -0
  274. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/assets/css/style.css +0 -0
  275. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/docs.md +0 -0
  276. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/downloads.md +0 -0
  277. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-16.png +0 -0
  278. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-32.png +0 -0
  279. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-48.png +0 -0
  280. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/favicon-64.png +0 -0
  281. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-1024.png +0 -0
  282. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-128.png +0 -0
  283. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-256.png +0 -0
  284. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-512.png +0 -0
  285. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/docs/icons/icon-64.png +0 -0
  286. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/examples/scope_examples.mdl +0 -0
  287. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-16.png +0 -0
  288. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-32.png +0 -0
  289. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-48.png +0 -0
  290. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/favicon-64.png +0 -0
  291. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-1024.png +0 -0
  292. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-128.png +0 -0
  293. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-256.png +0 -0
  294. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-512.png +0 -0
  295. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/icons/icon-64.png +0 -0
  296. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/item_modifiers/diamond_sword.json +0 -0
  297. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/item_modifiers/enchant_tool.json +0 -0
  298. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/item_modifiers/test_item_modifier.json +0 -0
  299. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/diamond_sword.json +0 -0
  300. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/epic_loot.json +0 -0
  301. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/main_loot.json +0 -0
  302. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/loot_tables/test_loot.json +0 -0
  303. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/mdllocal.sh +0 -0
  304. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/__init__.py +0 -0
  305. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/cli.py +0 -0
  306. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/dir_map.py +0 -0
  307. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_errors.py +0 -0
  308. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/mdl_linter.py +0 -0
  309. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/python_api.py +0 -0
  310. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language/utils.py +0 -0
  311. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
  312. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
  313. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/requires.txt +0 -0
  314. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
  315. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/my_awesome_pack/README.md +0 -0
  316. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
  317. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/diamond_sword.json +0 -0
  318. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/has_mana.json +0 -0
  319. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/other_predicate.json +0 -0
  320. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/predicates/test_predicate.json +0 -0
  321. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/pyproject.toml +0 -0
  322. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/pytest.ini +0 -0
  323. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/custom_pickaxe.json +0 -0
  324. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/diamond_sword.json +0 -0
  325. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/first.json +0 -0
  326. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/inlet.json +0 -0
  327. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/main_recipe.json +0 -0
  328. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/outlet.json +0 -0
  329. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/pipe.json +0 -0
  330. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/second.json +0 -0
  331. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/test_recipe.json +0 -0
  332. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/recipes/wrench.json +0 -0
  333. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scoreboard_test.mdl +0 -0
  334. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/UpdateMDL.sh +0 -0
  335. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/bootstrap.ps1 +0 -0
  336. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/bootstrap.sh +0 -0
  337. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/build_pkg.ps1 +0 -0
  338. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/build_pkg.sh +0 -0
  339. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_build.ps1 +0 -0
  340. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_build.sh +0 -0
  341. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_setup.ps1 +0 -0
  342. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/dev_setup.sh +0 -0
  343. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
  344. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
  345. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/git-bash/test_cli-gitbash.sh +0 -0
  346. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/release.sh +0 -0
  347. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_cli.ps1 +0 -0
  348. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_cli.sh +0 -0
  349. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_dev.ps1 +0 -0
  350. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/test_dev.sh +0 -0
  351. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/update_docs.sh +0 -0
  352. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/scripts/update_version_info.sh +0 -0
  353. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/setup.cfg +0 -0
  354. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/structures/diamond_sword.json +0 -0
  355. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/structures/test_structure.json +0 -0
  356. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/structures/workshop.json +0 -0
  357. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tellraw_variables_test.mdl +0 -0
  358. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/data/test/function/helper.mcfunction +0 -0
  359. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/data/test/function/load.mcfunction +0 -0
  360. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/data/test/function/main.mcfunction +0 -0
  361. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/temp_output/pack.mcmeta +0 -0
  362. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_all_registry.mdl +0 -0
  363. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_complex_scenarios.mdl +0 -0
  364. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_comprehensive_fixes.mdl +0 -0
  365. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_if_else_while.mdl +0 -0
  366. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_project/complex_test.mdl +0 -0
  367. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/test_simple.mdl +0 -0
  368. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/__init__.py +0 -0
  369. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_codegen_naming_and_logic.py +0 -0
  370. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_compiler_fixes.py +0 -0
  371. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_complex_scenarios.py +0 -0
  372. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_comprehensive_end_to_end.py +0 -0
  373. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_python_api.py +0 -0
  374. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_python_bindings.py +0 -0
  375. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tests/test_user_regression_test1.py +0 -0
  376. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tmp_test1.mdl +0 -0
  377. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tmp_test1.mdl~ +0 -0
  378. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/tmp_test1_confirm.mdl +0 -0
  379. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-16.png +0 -0
  380. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-32.png +0 -0
  381. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-48.png +0 -0
  382. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/favicon-64.png +0 -0
  383. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-1024.png +0 -0
  384. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-128.png +0 -0
  385. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-256.png +0 -0
  386. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/icons/icon-512.png +0 -0
  387. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/language-configuration.json +0 -0
  388. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/package-lock.json +0 -0
  389. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/package.json +0 -0
  390. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/snippets/mdl.json +0 -0
  391. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/src/extension.ts +0 -0
  392. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
  393. {minecraft_datapack_language-15.4.40 → minecraft_datapack_language-15.4.42}/vscode-extension/themes/mdl-color-theme.json +0 -0
  394. {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.40
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<@s> {
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<@s>;
154
+ on_load game:start;
155
155
  ```
156
156
 
157
157
  ### Control Structures
158
158
  ```mdl
159
- function game:check_score<@s> {
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<@s> {
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<@s> {
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<@s>;
133
+ on_load game:start;
134
134
  ```
135
135
 
136
136
  ### Control Structures
137
137
  ```mdl
138
- function game:check_score<@s> {
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<@s> {
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
@@ -0,0 +1,3 @@
1
+ current: "15.4.41"
2
+ tag: "v15.4.41"
3
+ updated_at: "2025-09-06T17:22:18Z"
@@ -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<@s> {
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<@s> {
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!";
@@ -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<@s> {
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<@s>;
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<@s> {
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<@s> {
42
+ function counter:show_all {
43
43
  exec counter:increment<@a>;
44
44
  }
45
45
 
46
- on_load counter:increment<@s>;
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<@s> {
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<@s>;
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<@s> {
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<@s>;
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<@s> {
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<@s>;
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<@s> {
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<@s>`
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<@s> {
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<@s>;
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> + 1;
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> + 1;
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$, Player: $playerCounter$;
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.40'
32
- __version_tuple__ = version_tuple = (15, 4, 40)
31
+ __version__ = version = '15.4.42'
32
+ __version_tuple__ = version_tuple = (15, 4, 42)
33
33
 
34
- __commit_id__ = commit_id = 'g80af4f85c'
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 function {func_call.namespace}:{func_call.name}"
621
- else:
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, '"', start_line, start_column))
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, '"', self.line, self.column - 1))
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.40
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<@s> {
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<@s>;
154
+ on_load game:start;
155
155
  ```
156
156
 
157
157
  ### Control Structures
158
158
  ```mdl
159
- function game:check_score<@s> {
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<@s> {
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