minecraft-datapack-language 15.4.32__tar.gz → 15.4.34__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 (364) hide show
  1. minecraft_datapack_language-15.4.34/.github/workflows/ci.yml +79 -0
  2. {minecraft_datapack_language-15.4.32/minecraft_datapack_language.egg-info → minecraft_datapack_language-15.4.34}/PKG-INFO +1 -1
  3. minecraft_datapack_language-15.4.34/docs/_data/version.yml +3 -0
  4. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/language-reference.md +11 -11
  5. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/_version.py +3 -3
  6. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/cli.py +22 -7
  7. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_compiler.py +124 -39
  8. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34/minecraft_datapack_language.egg-info}/PKG-INFO +1 -1
  9. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/SOURCES.txt +4 -0
  10. minecraft_datapack_language-15.4.34/temp_output/data/test/function/helper.mcfunction +4 -0
  11. minecraft_datapack_language-15.4.34/temp_output/data/test/function/load.mcfunction +3 -0
  12. minecraft_datapack_language-15.4.34/temp_output/data/test/function/main.mcfunction +4 -0
  13. minecraft_datapack_language-15.4.34/temp_output/pack.mcmeta +6 -0
  14. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/run_all_tests.py +24 -15
  15. minecraft_datapack_language-15.4.32/.github/workflows/ci.yml +0 -338
  16. minecraft_datapack_language-15.4.32/docs/_data/version.yml +0 -3
  17. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.cursor/rules/aispec.mdc +0 -0
  18. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/actions/mdl-compile/action.yml +0 -0
  19. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/docs.yml +0 -0
  20. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/pypi.yml +0 -0
  21. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/release.yml +0 -0
  22. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.github/workflows/update-website-version.yml +0 -0
  23. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/.gitignore +0 -0
  24. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/COMPILER_FIXES_SUMMARY.md +0 -0
  25. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/CONDITIONALS_IMPLEMENTATION.md +0 -0
  26. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/LICENSE +0 -0
  27. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/Makefile +0 -0
  28. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/README.md +0 -0
  29. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/diamond_sword.json +0 -0
  30. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/first_spell.json +0 -0
  31. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/other_advancement.json +0 -0
  32. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/advancements/test_advancement.json +0 -0
  33. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/comprehensive_error_test.mdl +0 -0
  34. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
  35. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
  36. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
  37. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
  38. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
  39. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
  40. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
  41. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
  42. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
  43. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
  44. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
  45. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
  46. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
  47. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
  48. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
  49. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
  50. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
  51. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
  52. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
  53. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
  54. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
  55. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
  56. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
  57. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
  58. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
  59. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
  60. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
  61. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
  62. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  63. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  64. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
  65. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
  66. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
  67. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
  68. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
  69. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/control_test/function/main_if_0.mcfunction +0 -0
  70. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/control_test/function/main_while_1.mcfunction +0 -0
  71. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/control_test/function/main_while_body_1.mcfunction +0 -0
  72. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/if_test/function/main_else_1.mcfunction +0 -0
  73. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/if_test/function/main_if_1.mcfunction +0 -0
  74. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
  75. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
  76. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
  77. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
  78. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
  79. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
  80. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/countdown_while_1.mcfunction +0 -0
  81. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/countdown_while_body_1.mcfunction +0 -0
  82. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
  83. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
  84. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_2.mcfunction +0 -0
  85. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
  86. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
  87. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
  88. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
  89. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_else_0.mcfunction +0 -0
  90. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_else_1.mcfunction +0 -0
  91. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_else_5.mcfunction +0 -0
  92. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_if_0.mcfunction +0 -0
  93. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_if_1.mcfunction +0 -0
  94. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_if_5.mcfunction +0 -0
  95. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_0.mcfunction +0 -0
  96. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_1.mcfunction +0 -0
  97. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_2.mcfunction +0 -0
  98. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_6.mcfunction +0 -0
  99. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_7.mcfunction +0 -0
  100. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_0.mcfunction +0 -0
  101. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_1.mcfunction +0 -0
  102. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_2.mcfunction +0 -0
  103. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_6.mcfunction +0 -0
  104. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/main_while_body_7.mcfunction +0 -0
  105. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
  106. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
  107. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
  108. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_if_1.mcfunction +0 -0
  109. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_if_5.mcfunction +0 -0
  110. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_while_4.mcfunction +0 -0
  111. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/start_game_while_body_4.mcfunction +0 -0
  112. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
  113. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
  114. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
  115. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
  116. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
  117. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
  118. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
  119. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
  120. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
  121. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
  122. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
  123. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
  124. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
  125. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
  126. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
  127. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
  128. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
  129. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
  130. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
  131. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
  132. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
  133. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
  134. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
  135. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
  136. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
  137. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
  138. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
  139. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
  140. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
  141. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
  142. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
  143. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
  144. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
  145. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
  146. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
  147. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
  148. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
  149. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
  150. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
  151. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
  152. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
  153. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
  154. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
  155. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
  156. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
  157. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
  158. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
  159. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
  160. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
  161. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
  162. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
  163. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
  164. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
  165. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
  166. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
  167. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
  168. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
  169. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
  170. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
  171. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
  172. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
  173. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
  174. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
  175. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
  176. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
  177. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
  178. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
  179. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
  180. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
  181. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_else_1.mcfunction +0 -0
  182. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_else_2.mcfunction +0 -0
  183. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_else_3.mcfunction +0 -0
  184. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_if_1.mcfunction +0 -0
  185. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_if_2.mcfunction +0 -0
  186. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_if_else_if_3.mcfunction +0 -0
  187. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_main_while_0.mcfunction +0 -0
  188. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_main_while_body_0.mcfunction +0 -0
  189. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
  190. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
  191. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
  192. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
  193. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
  194. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
  195. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
  196. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
  197. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
  198. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
  199. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  200. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  201. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
  202. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
  203. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
  204. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
  205. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
  206. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
  207. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
  208. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
  209. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
  210. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
  211. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_2.mcfunction +0 -0
  212. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
  213. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
  214. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
  215. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_1.mcfunction +0 -0
  216. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_2.mcfunction +0 -0
  217. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
  218. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
  219. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
  220. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
  221. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
  222. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
  223. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/while_test/function/main_while_0.mcfunction +0 -0
  224. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/data/while_test/function/main_while_body_0.mcfunction +0 -0
  225. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/dist.zip +0 -0
  226. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/.env +0 -0
  227. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/404.html +0 -0
  228. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/Gemfile +0 -0
  229. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/README.md +0 -0
  230. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_config.yml +0 -0
  231. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/cli-reference.md +0 -0
  232. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/contributing.md +0 -0
  233. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/docs-hub.md +0 -0
  234. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/documentation.md +0 -0
  235. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/examples.md +0 -0
  236. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/getting-started.md +0 -0
  237. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/multi-file-projects.md +0 -0
  238. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/python-api.md +0 -0
  239. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_docs/vscode-extension.md +0 -0
  240. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_includes/head-custom.html +0 -0
  241. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_includes/navigation.html +0 -0
  242. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_layouts/default.html +0 -0
  243. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_layouts/page.html +0 -0
  244. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_plugins/test_version.rb +0 -0
  245. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/_plugins/version_reader.rb +0 -0
  246. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/assets/css/style.css +0 -0
  247. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/docs.md +0 -0
  248. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/downloads.md +0 -0
  249. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-16.png +0 -0
  250. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-32.png +0 -0
  251. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-48.png +0 -0
  252. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/favicon-64.png +0 -0
  253. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-1024.png +0 -0
  254. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-128.png +0 -0
  255. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-256.png +0 -0
  256. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-512.png +0 -0
  257. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/icons/icon-64.png +0 -0
  258. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/docs/index.md +0 -0
  259. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/examples/hello_world.mdl +0 -0
  260. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/examples/scope_examples.mdl +0 -0
  261. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/examples/simple_counter.mdl +0 -0
  262. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-16.png +0 -0
  263. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-32.png +0 -0
  264. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-48.png +0 -0
  265. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/favicon-64.png +0 -0
  266. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-1024.png +0 -0
  267. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-128.png +0 -0
  268. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-256.png +0 -0
  269. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-512.png +0 -0
  270. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/icons/icon-64.png +0 -0
  271. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/item_modifiers/diamond_sword.json +0 -0
  272. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/item_modifiers/enchant_tool.json +0 -0
  273. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/item_modifiers/test_item_modifier.json +0 -0
  274. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/diamond_sword.json +0 -0
  275. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/epic_loot.json +0 -0
  276. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/main_loot.json +0 -0
  277. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/loot_tables/test_loot.json +0 -0
  278. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/mdllocal.sh +0 -0
  279. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/__init__.py +0 -0
  280. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/ast_nodes.py +0 -0
  281. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/dir_map.py +0 -0
  282. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_errors.py +0 -0
  283. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_lexer.py +0 -0
  284. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_linter.py +0 -0
  285. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/mdl_parser.py +0 -0
  286. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language/utils.py +0 -0
  287. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
  288. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
  289. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/requires.txt +0 -0
  290. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
  291. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/multi_scope_example.mdl +0 -0
  292. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/my_awesome_pack/README.md +0 -0
  293. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
  294. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/diamond_sword.json +0 -0
  295. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/has_mana.json +0 -0
  296. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/other_predicate.json +0 -0
  297. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/predicates/test_predicate.json +0 -0
  298. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/pyproject.toml +0 -0
  299. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/pytest.ini +0 -0
  300. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/custom_pickaxe.json +0 -0
  301. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/diamond_sword.json +0 -0
  302. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/first.json +0 -0
  303. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/inlet.json +0 -0
  304. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/main_recipe.json +0 -0
  305. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/outlet.json +0 -0
  306. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/pipe.json +0 -0
  307. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/second.json +0 -0
  308. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/test_recipe.json +0 -0
  309. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/recipes/wrench.json +0 -0
  310. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scope_demo.mdl +0 -0
  311. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scoreboard_test.mdl +0 -0
  312. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/UpdateMDL.sh +0 -0
  313. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/bootstrap.ps1 +0 -0
  314. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/bootstrap.sh +0 -0
  315. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/build_pkg.ps1 +0 -0
  316. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/build_pkg.sh +0 -0
  317. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_build.ps1 +0 -0
  318. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_build.sh +0 -0
  319. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_setup.ps1 +0 -0
  320. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/dev_setup.sh +0 -0
  321. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
  322. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
  323. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/git-bash/test_cli-gitbash.sh +0 -0
  324. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/release.sh +0 -0
  325. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_cli.ps1 +0 -0
  326. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_cli.sh +0 -0
  327. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_dev.ps1 +0 -0
  328. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/test_dev.sh +0 -0
  329. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/update_docs.sh +0 -0
  330. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/scripts/update_version_info.sh +0 -0
  331. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/setup.cfg +0 -0
  332. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/structures/diamond_sword.json +0 -0
  333. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/structures/test_structure.json +0 -0
  334. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/structures/workshop.json +0 -0
  335. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tellraw_variables_test.mdl +0 -0
  336. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_all_registry.mdl +0 -0
  337. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_complex_scenarios.mdl +0 -0
  338. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_comprehensive_fixes.mdl +0 -0
  339. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_if_else_while.mdl +0 -0
  340. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_project/complex_test.mdl +0 -0
  341. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/test_simple.mdl +0 -0
  342. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/__init__.py +0 -0
  343. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_cli.py +0 -0
  344. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_compiler_fixes.py +0 -0
  345. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_complex_scenarios.py +0 -0
  346. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_comprehensive_end_to_end.py +0 -0
  347. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/tests/test_python_api.py +0 -0
  348. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/README.md +0 -0
  349. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-16.png +0 -0
  350. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-32.png +0 -0
  351. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-48.png +0 -0
  352. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/favicon-64.png +0 -0
  353. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-1024.png +0 -0
  354. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-128.png +0 -0
  355. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-256.png +0 -0
  356. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/icons/icon-512.png +0 -0
  357. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/language-configuration.json +0 -0
  358. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/package-lock.json +0 -0
  359. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/package.json +0 -0
  360. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/snippets/mdl.json +0 -0
  361. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/src/extension.ts +0 -0
  362. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
  363. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/themes/mdl-color-theme.json +0 -0
  364. {minecraft_datapack_language-15.4.32 → minecraft_datapack_language-15.4.34}/vscode-extension/tsconfig.json +0 -0
@@ -0,0 +1,79 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ "**" ]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ defaults:
10
+ run:
11
+ shell: bash
12
+
13
+ jobs:
14
+ build-test:
15
+ name: build & test (${{ matrix.os }} / py${{ matrix.python-version }})
16
+ runs-on: ${{ matrix.os }}
17
+ strategy:
18
+ fail-fast: false
19
+ matrix:
20
+ os: [ubuntu-latest, macos-latest, windows-latest]
21
+ python-version: ["3.10", "3.11", "3.12"]
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ with:
25
+ fetch-depth: 0
26
+
27
+ - name: Setup Python
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version: ${{ matrix.python-version }}
31
+
32
+ - name: Upgrade pip & install build deps
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ python -m pip install build
36
+
37
+ - name: Install package (editable)
38
+ run: |
39
+ python -m pip install -e .[dev]
40
+
41
+ - name: Build sdist & wheel
42
+ run: |
43
+ python -m build
44
+
45
+ - name: Run consolidated test runner
46
+ run: |
47
+ echo "Running consolidated test runner..."
48
+ python tests/run_all_tests.py
49
+
50
+ - name: Upload dist artifacts
51
+ uses: actions/upload-artifact@v4
52
+ with:
53
+ name: dist-${{ matrix.os }}-py${{ matrix.python-version }}
54
+ path: dist/*
55
+ if-no-files-found: error
56
+
57
+ comprehensive-tests:
58
+ name: comprehensive tests
59
+ runs-on: ubuntu-latest
60
+ needs: build-test
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ with:
64
+ fetch-depth: 0
65
+
66
+ - name: Setup Python
67
+ uses: actions/setup-python@v5
68
+ with:
69
+ python-version: "3.12"
70
+
71
+ - name: Install package (editable)
72
+ run: |
73
+ python -m pip install --upgrade pip
74
+ python -m pip install -e .[dev]
75
+
76
+ - name: Run consolidated test runner
77
+ run: |
78
+ echo "Running consolidated test runner..."
79
+ python tests/run_all_tests.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 15.4.32
3
+ Version: 15.4.34
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
@@ -0,0 +1,3 @@
1
+ current: "15.4.33"
2
+ tag: "v15.4.33"
3
+ updated_at: "2025-09-04T04:55:51Z"
@@ -116,8 +116,8 @@ function game:start_game {
116
116
  player_health<@s> = 20;
117
117
  }
118
118
 
119
- // Function with scope parameter
120
- function game:reset_player<@s> {
119
+ // Function declaration (no scope on definition)
120
+ function game:reset_player {
121
121
  player_score<@s> = 0;
122
122
  player_health<@s> = 20;
123
123
  }
@@ -330,7 +330,7 @@ tag advancement "first_sword" "advancements/first_sword.json";
330
330
  var num global_counter<@a> = 0;
331
331
  var num player_counter<@s> = 0;
332
332
 
333
- function "increment"<@s> {
333
+ function "increment" {
334
334
  global_counter<@a> = $global_counter<@a>$ + 1;
335
335
  player_counter<@s> = $player_counter<@s>$ + 1;
336
336
 
@@ -341,7 +341,7 @@ function "increment"<@s> {
341
341
  say "Player $player_counter<@s>$ just incremented the counter!";
342
342
  }
343
343
 
344
- function "reset_player"<@s> {
344
+ function "reset_player" {
345
345
  player_counter<@s> = 0;
346
346
  tellraw @s {"text":"Counter reset!"};
347
347
  }
@@ -364,7 +364,7 @@ var num red_score<@a[team=red]> = 0;
364
364
  var num blue_score<@a[team=blue]> = 0;
365
365
  var num player_score<@s> = 0;
366
366
 
367
- function "award_points"<@s> {
367
+ function "award_points" {
368
368
  player_score<@s> = $player_score<@s>$ + 10;
369
369
 
370
370
  if $player_score<@s>$ > 100 {
@@ -381,14 +381,14 @@ function "award_points"<@s> {
381
381
  tellraw @s {"text":"Your score: ","extra":[{"score":{"name":"@s","objective":"player_score"}}]};
382
382
  }
383
383
 
384
- function "show_leaderboard"<@s> {
384
+ function "show_leaderboard" {
385
385
  tellraw @s {"text":"=== LEADERBOARD ==="};
386
386
  tellraw @s {"text":"Red Team: ","extra":[{"score":{"name":"@s","objective":"red_score"}}]};
387
387
  tellraw @s {"text":"Blue Team: ","extra":[{"score":{"name":"@s","objective":"blue_score"}}]};
388
388
  tellraw @s {"text":"Your Score: ","extra":[{"score":{"name":"@s","objective":"player_score"}}]};
389
389
  }
390
390
 
391
- function "countdown_timer"<@s> {
391
+ function "countdown_timer" {
392
392
  var num timer<@s> = 10;
393
393
 
394
394
  while $timer<@s>$ > 0 {
@@ -418,7 +418,7 @@ var num player_exp<@s> = 0;
418
418
  var num global_high_score<@a> = 0;
419
419
  var num game_timer<@a> = 0;
420
420
 
421
- function "gain_experience"<@s> {
421
+ function "gain_experience" {
422
422
  player_exp<@s> = $player_exp<@s>$ + 10;
423
423
 
424
424
  if $player_exp<@s>$ >= 100 {
@@ -433,7 +433,7 @@ function "gain_experience"<@s> {
433
433
  }
434
434
  }
435
435
 
436
- function "update_timer"<@a> {
436
+ function "update_timer" {
437
437
  game_timer<@a> = $game_timer<@a>$ + 1;
438
438
 
439
439
  if $game_timer<@a>$ >= 1200 {
@@ -660,7 +660,7 @@ Tokenized as:
660
660
 
661
661
  #### **Function with Scope**
662
662
  ```
663
- function game:reset_player<@s> {
663
+ function game:reset_player {
664
664
  ```
665
665
  Tokenized as:
666
666
  1. `FUNCTION` (`function`)
@@ -961,7 +961,7 @@ var num _internal_counter<@s> = 0;
961
961
  #### **Function Names with Numbers**
962
962
  ```mdl
963
963
  // Valid - numbers are allowed in function names
964
- function game:level_1_complete<@s> {
964
+ function game:level_1_complete {
965
965
  player_score<@s> = player_score<@s> + 100;
966
966
  }
967
967
  ```
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '15.4.32'
32
- __version_tuple__ = version_tuple = (15, 4, 32)
31
+ __version__ = version = '15.4.34'
32
+ __version_tuple__ = version_tuple = (15, 4, 34)
33
33
 
34
- __commit_id__ = commit_id = 'g9a9b794ac'
34
+ __commit_id__ = commit_id = 'g600f6b0c4'
@@ -26,6 +26,8 @@ Examples:
26
26
  mdl new my_project # Create a new project
27
27
  """
28
28
  )
29
+ # Global options
30
+ parser.add_argument('--version', action='store_true', help='Show version and exit')
29
31
 
30
32
  subparsers = parser.add_subparsers(dest='command', help='Available commands')
31
33
 
@@ -34,6 +36,7 @@ Examples:
34
36
  build_parser.add_argument('--mdl', required=True, help='MDL file(s) or directory to build')
35
37
  build_parser.add_argument('-o', '--output', required=True, help='Output directory for the datapack')
36
38
  build_parser.add_argument('--verbose', action='store_true', help='Show detailed output')
39
+ build_parser.add_argument('--wrapper', help='Optional wrapper directory name for the datapack output')
37
40
 
38
41
  # Check command
39
42
  check_parser = subparsers.add_parser('check', help='Check MDL files for syntax errors')
@@ -45,9 +48,19 @@ Examples:
45
48
  new_parser.add_argument('project_name', help='Name of the new project')
46
49
  new_parser.add_argument('--pack-name', help='Custom name for the datapack')
47
50
  new_parser.add_argument('--pack-format', type=int, default=82, help='Pack format number (default: 82)')
51
+ new_parser.add_argument('--output', help='Directory to create the project in (defaults to current directory)')
48
52
 
49
53
  args = parser.parse_args()
50
54
 
55
+ if args.version and not args.command:
56
+ # Print version and exit
57
+ try:
58
+ from . import __version__
59
+ except Exception:
60
+ __version__ = "0.0.0"
61
+ print(__version__)
62
+ return 0
63
+
51
64
  if not args.command:
52
65
  parser.print_help()
53
66
  return 1
@@ -133,6 +146,7 @@ def build_command(args):
133
146
  print(f"Compiling to {output_dir}...")
134
147
 
135
148
  compiler = MDLCompiler()
149
+ # Note: --wrapper is currently accepted for compatibility but not required by compiler
136
150
  output_path = compiler.compile(final_ast, str(output_dir))
137
151
 
138
152
  print(f"Successfully built datapack: {output_path}")
@@ -193,9 +207,10 @@ def new_command(args):
193
207
  project_name = args.project_name
194
208
  pack_name = args.pack_name or project_name
195
209
  pack_format = args.pack_format
210
+ base_dir = Path(args.output) if getattr(args, 'output', None) else Path('.')
211
+ project_dir = base_dir / project_name
196
212
 
197
213
  # Create project directory
198
- project_dir = Path(project_name)
199
214
  if project_dir.exists():
200
215
  print(f"Error: Project directory '{project_name}' already exists")
201
216
  return 1
@@ -213,7 +228,7 @@ var num counter<@s> = 0;
213
228
  var num global_timer<@a> = 0;
214
229
 
215
230
  // Main function
216
- function {project_name}:main<@s> {{
231
+ function {project_name}:main {{
217
232
  say "Hello from {project_name}!";
218
233
 
219
234
  // Variable example
@@ -228,13 +243,13 @@ function {project_name}:main<@s> {{
228
243
  }}
229
244
  }}
230
245
 
231
- // Load function
232
- function {project_name}:load<@s> {{
233
- say "Datapack loaded successfully!";
246
+ // Init function (avoid reserved names like 'load' or 'tick')
247
+ function {project_name}:init {{
248
+ say "Datapack initialized successfully!";
234
249
  }}
235
250
 
236
251
  // Hook to run on load
237
- on_load {project_name}:load<@s>;
252
+ on_load {project_name}:init;
238
253
  '''
239
254
 
240
255
  with open(mdl_file, 'w', encoding='utf-8') as f:
@@ -281,7 +296,7 @@ For more information, visit: https://www.mcmdl.com
281
296
  with open(readme_file, 'w', encoding='utf-8') as f:
282
297
  f.write(readme_content)
283
298
 
284
- print(f"Created new MDL project: {project_name}/")
299
+ print(f"Created new MDL project: {project_dir}/")
285
300
  print(f" - {mdl_file}")
286
301
  print(f" - {readme_file}")
287
302
  print(f"\nNext steps:")
@@ -16,6 +16,7 @@ from .ast_nodes import (
16
16
  )
17
17
  from .dir_map import get_dir_map, DirMap
18
18
  from .mdl_errors import MDLCompilerError
19
+ from .mdl_lexer import TokenType
19
20
 
20
21
 
21
22
  class MDLCompiler:
@@ -164,15 +165,6 @@ class MDLCompiler:
164
165
  for temp_cmd in self.temp_commands:
165
166
  lines.append(temp_cmd)
166
167
 
167
- # Add any generated functions that were created during compilation
168
- if hasattr(self, 'generated_functions') and self.generated_functions:
169
- lines.append("")
170
- lines.append("# Generated functions:")
171
- for func_name, func_lines in self.generated_functions.items():
172
- lines.append(f"# {func_name}:")
173
- lines.extend(func_lines)
174
- lines.append("")
175
-
176
168
  return "\n".join(lines)
177
169
 
178
170
  def _compile_hooks(self, hooks: List[HookDeclaration], namespace_dir: Path):
@@ -239,6 +231,12 @@ class MDLCompiler:
239
231
  load_file = functions_dir / "load.mcfunction"
240
232
  with open(load_file, 'w') as f:
241
233
  f.write(load_content)
234
+ # Ensure minecraft load tag points to namespace:load
235
+ tags_fn_dir = self.output_dir / "data" / "minecraft" / self.dir_map.tags_function
236
+ tags_fn_dir.mkdir(parents=True, exist_ok=True)
237
+ load_tag_file = tags_fn_dir / "load.json"
238
+ with open(load_tag_file, 'w') as f:
239
+ json.dump({"values": [f"{self.current_namespace}:load"]}, f, indent=2)
242
240
 
243
241
  # Create tick function if needed
244
242
  tick_hooks = [h for h in hooks if h.hook_type == "on_tick"]
@@ -247,6 +245,10 @@ class MDLCompiler:
247
245
  tick_file = functions_dir / "tick.mcfunction"
248
246
  with open(tick_file, 'w') as f:
249
247
  f.write(tick_content)
248
+ # Ensure minecraft tick tag points to namespace:tick
249
+ tick_tag_file = tags_fn_dir / "tick.json"
250
+ with open(tick_tag_file, 'w') as f:
251
+ json.dump({"values": [f"{self.current_namespace}:tick"]}, f, indent=2)
250
252
 
251
253
  def _generate_load_function(self, hooks: List[HookDeclaration]) -> str:
252
254
  """Generate the content of load.mcfunction."""
@@ -380,19 +382,19 @@ class MDLCompiler:
380
382
 
381
383
  def _if_statement_to_command(self, if_stmt: IfStatement) -> str:
382
384
  """Convert if statement to proper Minecraft execute if commands."""
383
- condition = self._expression_to_condition(if_stmt.condition)
385
+ condition, invert_then = self._build_condition(if_stmt.condition)
384
386
  lines = []
385
387
 
386
- # Generate the if condition using execute if
387
- if self._is_scoreboard_condition(if_stmt.condition):
388
- # For scoreboard conditions, use execute if score
389
- lines.append(f"execute if score {condition} run function {self.current_namespace}:{self._generate_if_function_name()}")
388
+ # Prepare function name for the then branch
389
+ if_function_name = self._generate_if_function_name()
390
+ # Generate condition command
391
+ if invert_then:
392
+ lines.append(f"execute unless {condition} run function {self.current_namespace}:{if_function_name}")
390
393
  else:
391
- # For other conditions, use execute if
392
- lines.append(f"execute if {condition} run function {self.current_namespace}:{self._generate_if_function_name()}")
394
+ lines.append(f"execute if {condition} run function {self.current_namespace}:{if_function_name}")
393
395
 
394
- # Generate the if body function
395
- if_body_lines = [f"# Function: {self.current_namespace}:{self._generate_if_function_name()}"]
396
+ # Generate the if body function content
397
+ if_body_lines = [f"# Function: {self.current_namespace}:{if_function_name}"]
396
398
  for stmt in if_stmt.then_body:
397
399
  if isinstance(stmt, VariableAssignment):
398
400
  cmd = self._variable_assignment_to_command(stmt)
@@ -415,18 +417,26 @@ class MDLCompiler:
415
417
  # Handle else body if it exists
416
418
  if if_stmt.else_body:
417
419
  if isinstance(if_stmt.else_body, list) and len(if_stmt.else_body) == 1 and isinstance(if_stmt.else_body[0], IfStatement):
418
- # This is an else if - handle it recursively
419
- else_if_lines = self._if_statement_to_command(if_stmt.else_body[0])
420
- lines.extend(else_if_lines.split('\n'))
420
+ # Else-if: create an else function wrapper that contains the nested if
421
+ else_function_name = self._generate_else_function_name()
422
+ if invert_then:
423
+ lines.append(f"execute if {condition} run function {self.current_namespace}:{else_function_name}")
424
+ else:
425
+ lines.append(f"execute unless {condition} run function {self.current_namespace}:{else_function_name}")
426
+ else_body_lines = [f"# Function: {self.current_namespace}:{else_function_name}"]
427
+ nested_cmd = self._if_statement_to_command(if_stmt.else_body[0])
428
+ for nested_line in nested_cmd.split('\n'):
429
+ if nested_line:
430
+ else_body_lines.append(nested_line)
431
+ self._store_generated_function(else_function_name, else_body_lines)
421
432
  else:
422
- # This is a regular else
423
- if self._is_scoreboard_condition(if_stmt.condition):
424
- lines.append(f"execute unless score {condition} run function {self.current_namespace}:{self._generate_else_function_name()}")
433
+ # Regular else: compile its body into its own function
434
+ else_function_name = self._generate_else_function_name()
435
+ if invert_then:
436
+ lines.append(f"execute if {condition} run function {self.current_namespace}:{else_function_name}")
425
437
  else:
426
- lines.append(f"execute unless {condition} run function {self.current_namespace}:{self._generate_else_function_name()}")
427
-
428
- # Generate the else body function
429
- else_body_lines = [f"# Function: {self.current_namespace}:{self._generate_else_function_name()}"]
438
+ lines.append(f"execute unless {condition} run function {self.current_namespace}:{else_function_name}")
439
+ else_body_lines = [f"# Function: {self.current_namespace}:{else_function_name}"]
430
440
  for stmt in if_stmt.else_body:
431
441
  if isinstance(stmt, VariableAssignment):
432
442
  cmd = self._variable_assignment_to_command(stmt)
@@ -445,12 +455,10 @@ class MDLCompiler:
445
455
  elif isinstance(stmt, FunctionCall):
446
456
  cmd = self._function_call_to_command(stmt)
447
457
  else_body_lines.append(cmd)
448
-
449
- # Store the else function for later generation
450
- self._store_generated_function(self._generate_else_function_name(), else_body_lines)
458
+ self._store_generated_function(else_function_name, else_body_lines)
451
459
 
452
- # Store the if function for later generation
453
- self._store_generated_function(self._generate_if_function_name(), if_body_lines)
460
+ # Store the if function as its own file
461
+ self._store_generated_function(if_function_name, if_body_lines)
454
462
 
455
463
  return "\n".join(lines)
456
464
 
@@ -494,7 +502,7 @@ class MDLCompiler:
494
502
  else:
495
503
  loop_body_lines.append(f"execute if {condition} run function {self.current_namespace}:{loop_function_name}")
496
504
 
497
- # Store the loop function for later generation
505
+ # Store the loop function as its own file
498
506
  self._store_generated_function(loop_function_name, loop_body_lines)
499
507
 
500
508
  return "\n".join(lines)
@@ -529,10 +537,15 @@ class MDLCompiler:
529
537
  return f"while_{self.while_counter}"
530
538
 
531
539
  def _store_generated_function(self, name: str, lines: List[str]):
532
- """Store a generated function for later output."""
533
- if not hasattr(self, 'generated_functions'):
534
- self.generated_functions = {}
535
- self.generated_functions[name] = lines
540
+ """Store a generated function as a separate file under the same namespace."""
541
+ if self.dir_map:
542
+ functions_dir = self.output_dir / "data" / self.current_namespace / self.dir_map.function
543
+ else:
544
+ functions_dir = self.output_dir / "data" / self.current_namespace / "functions"
545
+ functions_dir.mkdir(parents=True, exist_ok=True)
546
+ func_file = functions_dir / f"{name}.mcfunction"
547
+ with open(func_file, 'w') as f:
548
+ f.write("\n".join(lines) + "\n")
536
549
 
537
550
  def _function_call_to_command(self, func_call: FunctionCall) -> str:
538
551
  """Convert function call to execute command."""
@@ -544,6 +557,15 @@ class MDLCompiler:
544
557
  def _expression_to_value(self, expression: Any) -> str:
545
558
  """Convert expression to a value string."""
546
559
  if isinstance(expression, LiteralExpression):
560
+ # Format numbers as integers if possible
561
+ if isinstance(expression.value, (int, float)):
562
+ try:
563
+ v = float(expression.value)
564
+ if v.is_integer():
565
+ return str(int(v))
566
+ return str(v)
567
+ except Exception:
568
+ return str(expression.value)
547
569
  return str(expression.value)
548
570
  elif isinstance(expression, VariableSubstitution):
549
571
  objective = self.variables.get(expression.name, expression.name)
@@ -560,13 +582,76 @@ class MDLCompiler:
560
582
  return str(expression)
561
583
 
562
584
  def _expression_to_condition(self, expression: Any) -> str:
563
- """Convert expression to a condition string."""
585
+ """Legacy: Convert expression to a naive condition string (internal use)."""
564
586
  if isinstance(expression, BinaryExpression):
565
587
  left = self._expression_to_value(expression.left)
566
588
  right = self._expression_to_value(expression.right)
567
589
  return f"{left} {expression.operator} {right}"
568
590
  else:
569
591
  return self._expression_to_value(expression)
592
+
593
+ def _build_condition(self, expression: Any) -> (str, bool):
594
+ """Build a valid Minecraft execute condition.
595
+ Returns (condition_string, invert_then) where invert_then True means the THEN branch should use 'unless'.
596
+ """
597
+ # Default: generic expression string, no inversion
598
+ invert_then = False
599
+
600
+ if isinstance(expression, BinaryExpression):
601
+ left = expression.left
602
+ right = expression.right
603
+ op = expression.operator
604
+ # Variable vs literal
605
+ if isinstance(left, VariableSubstitution) and isinstance(right, LiteralExpression) and isinstance(right.value, (int, float)):
606
+ objective = self.variables.get(left.name, left.name)
607
+ scope = left.scope.strip("<>")
608
+ # Normalize number
609
+ try:
610
+ v = float(right.value)
611
+ except Exception:
612
+ v = None
613
+ if v is not None:
614
+ n = int(v) if float(v).is_integer() else v
615
+ if op == TokenType.GREATER:
616
+ rng = f"{int(n)+1}.." if isinstance(n, int) else f"{v+1}.."
617
+ return (f"score {scope} {objective} matches {rng}", False)
618
+ if op == TokenType.GREATER_EQUAL:
619
+ rng = f"{int(n)}.."
620
+ return (f"score {scope} {objective} matches {rng}", False)
621
+ if op == TokenType.LESS:
622
+ rng = f"..{int(n)-1}"
623
+ return (f"score {scope} {objective} matches {rng}", False)
624
+ if op == TokenType.LESS_EQUAL:
625
+ rng = f"..{int(n)}"
626
+ return (f"score {scope} {objective} matches {rng}", False)
627
+ if op == TokenType.EQUAL:
628
+ rng = f"{int(n)}"
629
+ return (f"score {scope} {objective} matches {rng}", False)
630
+ if op == TokenType.NOT_EQUAL:
631
+ rng = f"{int(n)}"
632
+ return (f"score {scope} {objective} matches {rng}", True)
633
+ # Variable vs variable
634
+ if isinstance(left, VariableSubstitution) and isinstance(right, VariableSubstitution):
635
+ lobj = self.variables.get(left.name, left.name)
636
+ lscope = left.scope.strip("<>")
637
+ robj = self.variables.get(right.name, right.name)
638
+ rscope = right.scope.strip("<>")
639
+ if op in (TokenType.GREATER, TokenType.GREATER_EQUAL, TokenType.LESS, TokenType.LESS_EQUAL, TokenType.EQUAL):
640
+ comp_map = {
641
+ TokenType.GREATER: ">",
642
+ TokenType.GREATER_EQUAL: ">=",
643
+ TokenType.LESS: "<",
644
+ TokenType.LESS_EQUAL: "<=",
645
+ TokenType.EQUAL: "="
646
+ }
647
+ comp = comp_map[op]
648
+ return (f"score {lscope} {lobj} {comp} {rscope} {robj}", False)
649
+ if op == TokenType.NOT_EQUAL:
650
+ # Use equals with inversion
651
+ return (f"score {lscope} {lobj} = {rscope} {robj}", True)
652
+
653
+ # Fallback: treat as generic condition string
654
+ return (self._expression_to_condition(expression), False)
570
655
 
571
656
  def _compile_expression_to_temp(self, expression: BinaryExpression, temp_var: str):
572
657
  """Compile a complex expression to a temporary variable using valid Minecraft commands."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 15.4.32
3
+ Version: 15.4.34
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
@@ -339,6 +339,10 @@ scripts/git-bash/test_cli-gitbash.sh
339
339
  structures/diamond_sword.json
340
340
  structures/test_structure.json
341
341
  structures/workshop.json
342
+ temp_output/pack.mcmeta
343
+ temp_output/data/test/function/helper.mcfunction
344
+ temp_output/data/test/function/load.mcfunction
345
+ temp_output/data/test/function/main.mcfunction
342
346
  test_project/complex_test.mdl
343
347
  tests/__init__.py
344
348
  tests/run_all_tests.py
@@ -0,0 +1,4 @@
1
+ # Function: test:helper
2
+ # Scope: <@s>
3
+
4
+ tellraw @a {"text":"Helper function!"}
@@ -0,0 +1,3 @@
1
+ # Load function - runs when datapack loads
2
+ # Generated by MDL Compiler
3
+
@@ -0,0 +1,4 @@
1
+ # Function: test:main
2
+ # Scope: <@s>
3
+
4
+ execute as @s run function test:helper
@@ -0,0 +1,6 @@
1
+ {
2
+ "pack": {
3
+ "pack_format": 82,
4
+ "description": "Test pack"
5
+ }
6
+ }