minecraft-datapack-language 15.4.33__tar.gz → 15.4.35__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 (366) hide show
  1. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/CONDITIONALS_IMPLEMENTATION.md +5 -5
  2. {minecraft_datapack_language-15.4.33/minecraft_datapack_language.egg-info → minecraft_datapack_language-15.4.35}/PKG-INFO +1 -1
  3. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_config.yml +2 -2
  4. minecraft_datapack_language-15.4.35/docs/_data/version.yml +3 -0
  5. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/contributing.md +3 -3
  6. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/docs-hub.md +1 -1
  7. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/documentation.md +3 -3
  8. minecraft_datapack_language-15.4.33/docs/_docs/python-api.md → minecraft_datapack_language-15.4.35/docs/_docs/python-bindings.md +38 -8
  9. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/docs.md +3 -3
  10. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/index.md +2 -2
  11. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/__init__.py +3 -1
  12. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/_version.py +3 -3
  13. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_compiler.py +24 -13
  14. minecraft_datapack_language-15.4.35/minecraft_datapack_language/python_api.py +207 -0
  15. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35/minecraft_datapack_language.egg-info}/PKG-INFO +1 -1
  16. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/SOURCES.txt +5 -1
  17. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/pytest.ini +1 -1
  18. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/run_all_tests.py +5 -5
  19. minecraft_datapack_language-15.4.35/tests/test_codegen_naming_and_logic.py +95 -0
  20. minecraft_datapack_language-15.4.35/tests/test_python_bindings.py +57 -0
  21. minecraft_datapack_language-15.4.33/docs/_data/version.yml +0 -3
  22. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.cursor/rules/aispec.mdc +0 -0
  23. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/actions/mdl-compile/action.yml +0 -0
  24. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/ci.yml +0 -0
  25. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/docs.yml +0 -0
  26. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/pypi.yml +0 -0
  27. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/release.yml +0 -0
  28. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.github/workflows/update-website-version.yml +0 -0
  29. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/.gitignore +0 -0
  30. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/COMPILER_FIXES_SUMMARY.md +0 -0
  31. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/LICENSE +0 -0
  32. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/Makefile +0 -0
  33. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/README.md +0 -0
  34. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/diamond_sword.json +0 -0
  35. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/first_spell.json +0 -0
  36. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/other_advancement.json +0 -0
  37. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/advancements/test_advancement.json +0 -0
  38. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/comprehensive_error_test.mdl +0 -0
  39. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
  40. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
  41. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
  42. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
  43. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
  44. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
  45. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
  46. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
  47. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
  48. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
  49. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
  50. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
  51. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
  52. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
  53. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
  54. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
  55. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
  56. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
  57. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
  58. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
  59. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
  60. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
  61. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
  62. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
  63. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
  64. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
  65. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
  66. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
  67. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  68. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  69. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
  70. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
  71. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
  72. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
  73. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
  74. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/control_test/function/main_if_0.mcfunction +0 -0
  75. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/control_test/function/main_while_1.mcfunction +0 -0
  76. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/control_test/function/main_while_body_1.mcfunction +0 -0
  77. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/if_test/function/main_else_1.mcfunction +0 -0
  78. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/if_test/function/main_if_1.mcfunction +0 -0
  79. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
  80. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
  81. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
  82. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
  83. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
  84. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
  85. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/countdown_while_1.mcfunction +0 -0
  86. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/countdown_while_body_1.mcfunction +0 -0
  87. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
  88. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
  89. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_2.mcfunction +0 -0
  90. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
  91. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
  92. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
  93. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
  94. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_else_0.mcfunction +0 -0
  95. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_else_1.mcfunction +0 -0
  96. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_else_5.mcfunction +0 -0
  97. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_if_0.mcfunction +0 -0
  98. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_if_1.mcfunction +0 -0
  99. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_if_5.mcfunction +0 -0
  100. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_0.mcfunction +0 -0
  101. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_1.mcfunction +0 -0
  102. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_2.mcfunction +0 -0
  103. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_6.mcfunction +0 -0
  104. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_7.mcfunction +0 -0
  105. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_0.mcfunction +0 -0
  106. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_1.mcfunction +0 -0
  107. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_2.mcfunction +0 -0
  108. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_6.mcfunction +0 -0
  109. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/main_while_body_7.mcfunction +0 -0
  110. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
  111. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
  112. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
  113. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_if_1.mcfunction +0 -0
  114. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_if_5.mcfunction +0 -0
  115. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_while_4.mcfunction +0 -0
  116. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/start_game_while_body_4.mcfunction +0 -0
  117. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
  118. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
  119. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
  120. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
  121. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
  122. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
  123. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
  124. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
  125. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
  126. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
  127. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
  128. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
  129. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
  130. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
  131. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
  132. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
  133. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
  134. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
  135. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
  136. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
  137. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
  138. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
  139. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
  140. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
  141. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
  142. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
  143. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
  144. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
  145. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
  146. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
  147. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
  148. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
  149. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
  150. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
  151. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
  152. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
  153. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
  154. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
  155. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
  156. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
  157. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
  158. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
  159. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
  160. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
  161. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
  162. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
  163. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
  164. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
  165. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
  166. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
  167. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
  168. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
  169. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
  170. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
  171. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
  172. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
  173. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
  174. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
  175. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
  176. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
  177. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
  178. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
  179. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
  180. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
  181. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
  182. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
  183. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
  184. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
  185. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
  186. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_else_1.mcfunction +0 -0
  187. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_else_2.mcfunction +0 -0
  188. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_else_3.mcfunction +0 -0
  189. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_if_1.mcfunction +0 -0
  190. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_if_2.mcfunction +0 -0
  191. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_if_else_if_3.mcfunction +0 -0
  192. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_main_while_0.mcfunction +0 -0
  193. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_main_while_body_0.mcfunction +0 -0
  194. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
  195. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
  196. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
  197. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
  198. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
  199. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
  200. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
  201. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
  202. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
  203. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
  204. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  205. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  206. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
  207. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
  208. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
  209. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
  210. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
  211. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
  212. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
  213. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
  214. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
  215. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
  216. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_2.mcfunction +0 -0
  217. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
  218. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
  219. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
  220. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_1.mcfunction +0 -0
  221. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_2.mcfunction +0 -0
  222. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
  223. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
  224. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
  225. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
  226. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
  227. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
  228. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/while_test/function/main_while_0.mcfunction +0 -0
  229. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/data/while_test/function/main_while_body_0.mcfunction +0 -0
  230. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/dist.zip +0 -0
  231. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/.env +0 -0
  232. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/404.html +0 -0
  233. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/Gemfile +0 -0
  234. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/README.md +0 -0
  235. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/cli-reference.md +0 -0
  236. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/examples.md +0 -0
  237. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/getting-started.md +0 -0
  238. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/language-reference.md +0 -0
  239. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/multi-file-projects.md +0 -0
  240. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_docs/vscode-extension.md +0 -0
  241. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_includes/head-custom.html +0 -0
  242. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_includes/navigation.html +0 -0
  243. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_layouts/default.html +0 -0
  244. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_layouts/page.html +0 -0
  245. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_plugins/test_version.rb +0 -0
  246. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/_plugins/version_reader.rb +0 -0
  247. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/assets/css/style.css +0 -0
  248. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/downloads.md +0 -0
  249. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-16.png +0 -0
  250. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-32.png +0 -0
  251. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-48.png +0 -0
  252. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/favicon-64.png +0 -0
  253. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-1024.png +0 -0
  254. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-128.png +0 -0
  255. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-256.png +0 -0
  256. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-512.png +0 -0
  257. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/docs/icons/icon-64.png +0 -0
  258. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/examples/hello_world.mdl +0 -0
  259. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/examples/scope_examples.mdl +0 -0
  260. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/examples/simple_counter.mdl +0 -0
  261. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-16.png +0 -0
  262. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-32.png +0 -0
  263. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-48.png +0 -0
  264. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/favicon-64.png +0 -0
  265. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-1024.png +0 -0
  266. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-128.png +0 -0
  267. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-256.png +0 -0
  268. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-512.png +0 -0
  269. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/icons/icon-64.png +0 -0
  270. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/item_modifiers/diamond_sword.json +0 -0
  271. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/item_modifiers/enchant_tool.json +0 -0
  272. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/item_modifiers/test_item_modifier.json +0 -0
  273. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/diamond_sword.json +0 -0
  274. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/epic_loot.json +0 -0
  275. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/main_loot.json +0 -0
  276. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/loot_tables/test_loot.json +0 -0
  277. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/mdllocal.sh +0 -0
  278. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/ast_nodes.py +0 -0
  279. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/cli.py +0 -0
  280. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/dir_map.py +0 -0
  281. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_errors.py +0 -0
  282. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_lexer.py +0 -0
  283. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_linter.py +0 -0
  284. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/mdl_parser.py +0 -0
  285. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language/utils.py +0 -0
  286. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
  287. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
  288. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/requires.txt +0 -0
  289. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
  290. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/multi_scope_example.mdl +0 -0
  291. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/my_awesome_pack/README.md +0 -0
  292. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
  293. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/diamond_sword.json +0 -0
  294. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/has_mana.json +0 -0
  295. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/other_predicate.json +0 -0
  296. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/predicates/test_predicate.json +0 -0
  297. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/pyproject.toml +0 -0
  298. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/custom_pickaxe.json +0 -0
  299. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/diamond_sword.json +0 -0
  300. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/first.json +0 -0
  301. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/inlet.json +0 -0
  302. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/main_recipe.json +0 -0
  303. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/outlet.json +0 -0
  304. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/pipe.json +0 -0
  305. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/second.json +0 -0
  306. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/test_recipe.json +0 -0
  307. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/recipes/wrench.json +0 -0
  308. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scope_demo.mdl +0 -0
  309. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scoreboard_test.mdl +0 -0
  310. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/UpdateMDL.sh +0 -0
  311. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/bootstrap.ps1 +0 -0
  312. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/bootstrap.sh +0 -0
  313. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/build_pkg.ps1 +0 -0
  314. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/build_pkg.sh +0 -0
  315. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_build.ps1 +0 -0
  316. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_build.sh +0 -0
  317. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_setup.ps1 +0 -0
  318. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/dev_setup.sh +0 -0
  319. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
  320. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
  321. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/git-bash/test_cli-gitbash.sh +0 -0
  322. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/release.sh +0 -0
  323. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_cli.ps1 +0 -0
  324. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_cli.sh +0 -0
  325. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_dev.ps1 +0 -0
  326. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/test_dev.sh +0 -0
  327. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/update_docs.sh +0 -0
  328. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/scripts/update_version_info.sh +0 -0
  329. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/setup.cfg +0 -0
  330. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/structures/diamond_sword.json +0 -0
  331. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/structures/test_structure.json +0 -0
  332. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/structures/workshop.json +0 -0
  333. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tellraw_variables_test.mdl +0 -0
  334. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/data/test/function/helper.mcfunction +0 -0
  335. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/data/test/function/load.mcfunction +0 -0
  336. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/data/test/function/main.mcfunction +0 -0
  337. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/temp_output/pack.mcmeta +0 -0
  338. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_all_registry.mdl +0 -0
  339. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_complex_scenarios.mdl +0 -0
  340. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_comprehensive_fixes.mdl +0 -0
  341. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_if_else_while.mdl +0 -0
  342. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_project/complex_test.mdl +0 -0
  343. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/test_simple.mdl +0 -0
  344. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/__init__.py +0 -0
  345. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_cli.py +0 -0
  346. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_compiler_fixes.py +0 -0
  347. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_complex_scenarios.py +0 -0
  348. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_comprehensive_end_to_end.py +0 -0
  349. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/tests/test_python_api.py +0 -0
  350. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/README.md +0 -0
  351. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-16.png +0 -0
  352. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-32.png +0 -0
  353. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-48.png +0 -0
  354. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/favicon-64.png +0 -0
  355. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-1024.png +0 -0
  356. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-128.png +0 -0
  357. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-256.png +0 -0
  358. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/icons/icon-512.png +0 -0
  359. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/language-configuration.json +0 -0
  360. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/package-lock.json +0 -0
  361. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/package.json +0 -0
  362. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/snippets/mdl.json +0 -0
  363. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/src/extension.ts +0 -0
  364. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
  365. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/themes/mdl-color-theme.json +0 -0
  366. {minecraft_datapack_language-15.4.33 → minecraft_datapack_language-15.4.35}/vscode-extension/tsconfig.json +0 -0
@@ -37,11 +37,11 @@ This document summarizes the implementation of if/else if/else functionality in
37
37
  - `README.md` - Added conditional blocks section
38
38
  - `docs/_docs/language-reference.md` - Added comprehensive conditional documentation
39
39
  - `docs/_docs/examples.md` - Added conditional examples
40
- - `docs/_docs/python-api.md` - Added conditional Python API examples
40
+ - `docs/_docs/python-bindings.md` - Added conditional Python bindings examples
41
41
 
42
42
  ### Tests
43
43
  - `test_examples/conditionals.mdl` - Comprehensive MDL test file
44
- - `test_examples/conditionals.py` - Python API test file
44
+ - `test_examples/conditionals.py` - Python bindings test file
45
45
  - `test_regression.py` - Regression test suite
46
46
  - `test_examples/run_all_tests.py` - Updated to include conditionals
47
47
 
@@ -55,12 +55,12 @@ This document summarizes the implementation of if/else if/else functionality in
55
55
  - ✅ Conditional function calls
56
56
  - ✅ Invalid syntax handling
57
57
  - ✅ Regression testing (existing functionality)
58
- - ✅ Python API compatibility
58
+ - ✅ Python bindings compatibility
59
59
 
60
60
  ### Test Results
61
61
  - **Regression Tests**: 7/7 passed ✅
62
62
  - **Comprehensive Tests**: 17/17 passed ✅
63
- - **Python API Tests**: All passed ✅
63
+ - **Python bindings tests**: All passed ✅
64
64
 
65
65
  ## 📖 Documentation
66
66
 
@@ -152,7 +152,7 @@ execute unless entity @s[type=minecraft:player,nbt={SelectedItem:{id:"minecraft:
152
152
  - ✅ Comprehensive testing completed
153
153
  - ✅ Documentation updated
154
154
  - ✅ Examples created
155
- - ✅ Python API support
155
+ - ✅ Python bindings support
156
156
  - ✅ Regression tests passing
157
157
  - ✅ Backward compatibility verified
158
158
  - ✅ Error handling implemented
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 15.4.33
3
+ Version: 15.4.35
4
4
  Summary: Compile MDL language with explicit scoping into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
5
5
  Project-URL: Homepage, https://www.mcmdl.com
6
6
  Project-URL: Documentation, https://www.mcmdl.com/docs
@@ -1,5 +1,5 @@
1
1
  title: Minecraft Datapack Language (MDL) v12
2
- description: A powerful compiler that lets you write Minecraft datapacks in a modern JavaScript-style language (.mdl) or via a clean Python API
2
+ description: A powerful compiler that lets you write Minecraft datapacks in a modern JavaScript-style language (.mdl) or via clean Python bindings
3
3
  url: "https://www.mcmdl.com"
4
4
  github_username: aaron777collins
5
5
  github_repo: MinecraftDatapackLanguage
@@ -68,7 +68,7 @@ nav:
68
68
  url: /docs/multi-file-projects/
69
69
  - title: CLI Reference
70
70
  url: /docs/cli-reference/
71
- - title: Python API
71
+ - title: Python Bindings
72
72
  url: /docs/python-api/
73
73
  - title: VS Code Extension
74
74
  url: /docs/vscode-extension/
@@ -0,0 +1,3 @@
1
+ current: "15.4.34"
2
+ tag: "v15.4.34"
3
+ updated_at: "2025-09-04T04:59:52Z"
@@ -73,9 +73,9 @@ MinecraftDatapackLanguage/
73
73
  - **Configuration**: Add configuration options
74
74
  - **Integration**: Better integration with other tools
75
75
 
76
- ### 3. Python API
76
+ ### 3. Python Bindings
77
77
 
78
- - **API improvements**: Enhance the Python API
78
+ - **Bindings improvements**: Enhance the Python bindings
79
79
  - **New features**: Add new capabilities
80
80
  - **Documentation**: Improve API documentation
81
81
  - **Examples**: Add more examples
@@ -135,7 +135,7 @@ python -m pytest
135
135
  mdl --help
136
136
  mdl build --mdl sample.mdl -o test_output
137
137
 
138
- # Test the Python API
138
+ # Test the Python bindings
139
139
  python -c "from minecraft_datapack_language import Pack; print('API works!')"
140
140
  ```
141
141
 
@@ -58,7 +58,7 @@ Search and browse all available documentation for the Minecraft Datapack Languag
58
58
  </div>
59
59
 
60
60
  <div class="doc-card" data-categories="python api programming">
61
- <h3>🐍 Python API</h3>
61
+ <h3>🐍 Python Bindings</h3>
62
62
  <p>Programmatic access to MDL functionality for automation and integration.</p>
63
63
  <div class="doc-meta">
64
64
  <span class="category">API</span>
@@ -17,12 +17,12 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
17
17
  {% assign language_ref = site.nav | where: "title", "Language Reference" | first %}
18
18
  {% assign multi_file = site.nav | where: "title", "Multi-file Projects" | first %}
19
19
  {% assign cli_ref = site.nav | where: "title", "CLI Reference" | first %}
20
- {% assign python_api = site.nav | where: "title", "Python API" | first %}
20
+ {% assign python_api = site.nav | where: "title", "Python Bindings" | first %}
21
21
 
22
22
  - **[Language Reference]({{ language_ref.url }})** - Complete syntax and language features
23
23
  - **[Multi-file Projects]({{ multi_file.url }})** - How to organize and structure larger MDL projects
24
24
  - **[CLI Reference]({{ cli_ref.url }})** - Command-line interface usage and options
25
- - **[Python API]({{ python_api.url }})** - Programmatic access to MDL functionality
25
+ - **[Python Bindings]({{ python_api.url }})** - Programmatic access to MDL functionality
26
26
 
27
27
  ## Tools and Extensions
28
28
 
@@ -64,7 +64,7 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
64
64
  </div>
65
65
 
66
66
  <div class="doc-card">
67
- <h3>🐍 Python API</h3>
67
+ <h3>🐍 Python Bindings</h3>
68
68
  <p>Programmatic access to MDL functionality for automation and integration.</p>
69
69
  <a href="{{ python_api.url }}" class="doc-link">API Reference →</a>
70
70
  </div>
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  layout: page
3
- title: Python API
4
- permalink: /docs/python-api/
3
+ title: Python Bindings
4
+ permalink: /docs/python-bindings/
5
5
  ---
6
6
 
7
- The MDL Python API provides a clean, programmatic way to create Minecraft datapacks. It's fully compatible with the new JavaScript-style MDL language and supports all advanced features including variables, control flow, complex nesting, and the explicit scope system.
7
+ The MDL Python bindings provide a clean, programmatic way to create Minecraft datapacks. They're fully compatible with the MDL language and support all advanced features including variables, control flow, complex nesting, and the explicit scope system.
8
8
 
9
9
  ## Quick Start
10
10
 
@@ -67,6 +67,36 @@ ns.function("function_name", "command1", "command2", ...)
67
67
  **Methods:**
68
68
  - `function(name, *commands)` - Add a function with commands
69
69
 
70
+ ### Control Flow and Expressions (Bindings)
71
+
72
+ Bindings include helpers to compose expressions and control flow identical to MDL:
73
+
74
+ ```python
75
+ from minecraft_datapack_language import Pack
76
+ from minecraft_datapack_language.python_api import num, var_read, binop
77
+
78
+ p = Pack("Control Flow", "desc", 82)
79
+ ns = p.namespace("game")
80
+
81
+ def build_logic(fb):
82
+ # declare variable
83
+ fb.declare_var("counter", "<@s>", 0)
84
+
85
+ # counter<@s> = $counter<@s>$ + 1
86
+ fb.set("counter", "<@s>", binop(var_read("counter", "<@s>"), "PLUS", num(1)))
87
+
88
+ # if $counter<@s>$ > 5 { say "hi" } else { say "low" }
89
+ cond = binop(var_read("counter", "<@s>"), "GREATER", num(5))
90
+ fb.if_(cond, lambda t: t.say("hi"), lambda e: e.say("low"))
91
+
92
+ # while $counter<@s>$ < 10 { counter<@s> = $counter<@s>$ + 1 }
93
+ wcond = binop(var_read("counter", "<@s>"), "LESS", num(10))
94
+ fb.while_(wcond, lambda b: b.set("counter", "<@s>", binop(var_read("counter", "<@s>"), "PLUS", num(1))))
95
+
96
+ ns.function("main", build_logic)
97
+ p.build("dist")
98
+ ```
99
+
70
100
  ## Basic Examples
71
101
 
72
102
  ### Hello World
@@ -121,7 +151,7 @@ def create_particle_pack():
121
151
 
122
152
  ### Variables and Control Flow
123
153
 
124
- The Python API supports all the advanced features of the JavaScript-style MDL language including the explicit scope system:
154
+ The bindings support all the advanced features of the MDL language including the explicit scope system:
125
155
 
126
156
  ```python
127
157
  from minecraft_datapack_language import Pack
@@ -327,7 +357,7 @@ p.build("output_dir", wrapper="my_pack")
327
357
 
328
358
  ## Integration with MDL Files
329
359
 
330
- You can use the Python API alongside MDL files:
360
+ You can use the Python bindings alongside MDL files:
331
361
 
332
362
  ```python
333
363
  from minecraft_datapack_language import Pack
@@ -340,7 +370,7 @@ def create_hybrid_pack():
340
370
 
341
371
  ast = parse_mdl_js(mdl_content)
342
372
 
343
- # Create pack via Python API
373
+ # Create pack via Python bindings
344
374
  p = Pack("Hybrid Pack", "Combines MDL and Python", 82)
345
375
 
346
376
  # Add functions from MDL
@@ -348,7 +378,7 @@ def create_hybrid_pack():
348
378
  ns = p.namespace(func.namespace)
349
379
  ns.function(func.name, *func.commands)
350
380
 
351
- # Add additional functions via Python API
381
+ # Add additional functions via Python bindings
352
382
  ns = p.namespace("python")
353
383
  ns.function("python_func", "say Created via Python API!")
354
384
 
@@ -505,4 +535,4 @@ if __name__ == "__main__":
505
535
  print("Complete example pack built successfully!")
506
536
  ```
507
537
 
508
- The Python API provides a powerful, flexible way to create Minecraft datapacks with full support for the JavaScript-style MDL language features including the new explicit scope system.
538
+ The Python bindings provide a powerful, flexible way to create Minecraft datapacks with full support for the MDL language features including the explicit scope system.
@@ -16,12 +16,12 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
16
16
  {% assign language_ref = site.nav | where: "title", "Language Reference" | first %}
17
17
  {% assign multi_file = site.nav | where: "title", "Multi-file Projects" | first %}
18
18
  {% assign cli_ref = site.nav | where: "title", "CLI Reference" | first %}
19
- {% assign python_api = site.nav | where: "title", "Python API" | first %}
19
+ {% assign python_api = site.nav | where: "title", "Python Bindings" | first %}
20
20
 
21
21
  - **[Language Reference]({{ language_ref.url }})** - Complete syntax and language features
22
22
  - **[Multi-file Projects]({{ multi_file.url }})** - How to organize and structure larger MDL projects
23
23
  - **[CLI Reference]({{ cli_ref.url }})** - Command-line interface usage and options
24
- - **[Python API]({{ python_api.url }})** - Programmatic access to MDL functionality
24
+ - **[Python Bindings]({{ python_api.url }})** - Programmatic access to MDL functionality
25
25
 
26
26
  ## Tools and Extensions
27
27
 
@@ -63,7 +63,7 @@ Welcome to the complete documentation for the Minecraft Datapack Language (MDL).
63
63
  </div>
64
64
 
65
65
  <div class="doc-card">
66
- <h3>🐍 Python API</h3>
66
+ <h3>🐍 Python Bindings</h3>
67
67
  <p>Programmatic access to MDL functionality for automation and integration.</p>
68
68
  <a href="{{ python_api.url }}" class="doc-link">API Reference →</a>
69
69
  </div>
@@ -74,13 +74,13 @@ A **modern JavaScript-style compiler** that lets you write Minecraft datapacks w
74
74
  <a href="{{ site.baseurl }}/docs/multi-file-projects/" class="doc-link">Learn More →</a>
75
75
  </div>
76
76
  <div class="doc-card">
77
- <h3>🐍 Python API</h3>
77
+ <h3>🐍 Python Bindings</h3>
78
78
  <p>Programmatic datapack creation</p>
79
79
  <div class="doc-meta">
80
80
  <span class="category">API</span>
81
81
  <span class="category">Python</span>
82
82
  </div>
83
- <a href="{{ site.baseurl }}/docs/python-api/" class="doc-link">Python API →</a>
83
+ <a href="{{ site.baseurl }}/docs/python-bindings/" class="doc-link">Python Bindings →</a>
84
84
  </div>
85
85
  </div>
86
86
 
@@ -3,6 +3,7 @@ from .mdl_lexer import MDLLexer, Token, TokenType
3
3
  from .mdl_parser import MDLParser
4
4
  from .ast_nodes import *
5
5
  from .dir_map import DirMap
6
+ from .python_api import Pack
6
7
 
7
8
  __all__ = [
8
9
  "MDLLexer", "Token", "TokenType",
@@ -13,7 +14,8 @@ __all__ = [
13
14
  "SayCommand", "TellrawCommand", "ExecuteCommand", "ScoreboardCommand",
14
15
  "BinaryExpression", "UnaryExpression", "ParenthesizedExpression", "LiteralExpression",
15
16
  "ScopeSelector",
16
- "DirMap"
17
+ "DirMap",
18
+ "Pack"
17
19
  ]
18
20
 
19
21
  # CLI entry point
@@ -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.33'
32
- __version_tuple__ = version_tuple = (15, 4, 33)
31
+ __version__ = version = '15.4.35'
32
+ __version_tuple__ = version_tuple = (15, 4, 35)
33
33
 
34
- __commit_id__ = commit_id = 'gf8b0c72b5'
34
+ __commit_id__ = commit_id = 'gc1645a725'
@@ -152,6 +152,12 @@ class MDLCompiler:
152
152
  if hasattr(self, 'temp_commands'):
153
153
  self.temp_commands = []
154
154
 
155
+ # Set current function context and reset per-function counters
156
+ self._current_function_name = func.name
157
+ self.if_counter = 0
158
+ self.else_counter = 0
159
+ self.while_counter = 0
160
+
155
161
  # Generate commands from function body
156
162
  for statement in func.body:
157
163
  cmd = self._statement_to_command(statement)
@@ -231,6 +237,12 @@ class MDLCompiler:
231
237
  load_file = functions_dir / "load.mcfunction"
232
238
  with open(load_file, 'w') as f:
233
239
  f.write(load_content)
240
+ # Ensure minecraft load tag points to namespace:load
241
+ tags_fn_dir = self.output_dir / "data" / "minecraft" / self.dir_map.tags_function
242
+ tags_fn_dir.mkdir(parents=True, exist_ok=True)
243
+ load_tag_file = tags_fn_dir / "load.json"
244
+ with open(load_tag_file, 'w') as f:
245
+ json.dump({"values": [f"{self.current_namespace}:load"]}, f, indent=2)
234
246
 
235
247
  # Create tick function if needed
236
248
  tick_hooks = [h for h in hooks if h.hook_type == "on_tick"]
@@ -239,6 +251,10 @@ class MDLCompiler:
239
251
  tick_file = functions_dir / "tick.mcfunction"
240
252
  with open(tick_file, 'w') as f:
241
253
  f.write(tick_content)
254
+ # Ensure minecraft tick tag points to namespace:tick
255
+ tick_tag_file = tags_fn_dir / "tick.json"
256
+ with open(tick_tag_file, 'w') as f:
257
+ json.dump({"values": [f"{self.current_namespace}:tick"]}, f, indent=2)
242
258
 
243
259
  def _generate_load_function(self, hooks: List[HookDeclaration]) -> str:
244
260
  """Generate the content of load.mcfunction."""
@@ -487,10 +503,8 @@ class MDLCompiler:
487
503
  loop_body_lines.append(cmd)
488
504
 
489
505
  # Add the recursive call at the end to continue the loop
490
- if self._is_scoreboard_condition(while_loop.condition):
491
- loop_body_lines.append(f"execute if score {condition} run function {self.current_namespace}:{loop_function_name}")
492
- else:
493
- loop_body_lines.append(f"execute if {condition} run function {self.current_namespace}:{loop_function_name}")
506
+ cond_str, _inv = self._build_condition(while_loop.condition)
507
+ loop_body_lines.append(f"execute if {cond_str} run function {self.current_namespace}:{loop_function_name}")
494
508
 
495
509
  # Store the loop function as its own file
496
510
  self._store_generated_function(loop_function_name, loop_body_lines)
@@ -507,24 +521,21 @@ class MDLCompiler:
507
521
 
508
522
  def _generate_if_function_name(self) -> str:
509
523
  """Generate a unique name for an if function."""
510
- if not hasattr(self, 'if_counter'):
511
- self.if_counter = 0
512
524
  self.if_counter += 1
513
- return f"if_{self.if_counter}"
525
+ prefix = getattr(self, '_current_function_name', 'fn')
526
+ return f"{prefix}__if_{self.if_counter}"
514
527
 
515
528
  def _generate_else_function_name(self) -> str:
516
529
  """Generate a unique name for an else function."""
517
- if not hasattr(self, 'else_counter'):
518
- self.else_counter = 0
519
530
  self.else_counter += 1
520
- return f"else_{self.else_counter}"
531
+ prefix = getattr(self, '_current_function_name', 'fn')
532
+ return f"{prefix}__else_{self.else_counter}"
521
533
 
522
534
  def _generate_while_function_name(self) -> str:
523
535
  """Generate a unique name for a while function."""
524
- if not hasattr(self, 'while_counter'):
525
- self.while_counter = 0
526
536
  self.while_counter += 1
527
- return f"while_{self.while_counter}"
537
+ prefix = getattr(self, '_current_function_name', 'fn')
538
+ return f"{prefix}__while_{self.while_counter}"
528
539
 
529
540
  def _store_generated_function(self, name: str, lines: List[str]):
530
541
  """Store a generated function as a separate file under the same namespace."""
@@ -0,0 +1,207 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Callable, List, Optional, Union
5
+
6
+ from .ast_nodes import (
7
+ Program,
8
+ PackDeclaration,
9
+ NamespaceDeclaration,
10
+ TagDeclaration,
11
+ VariableDeclaration,
12
+ VariableAssignment,
13
+ VariableSubstitution,
14
+ FunctionDeclaration,
15
+ FunctionCall,
16
+ IfStatement,
17
+ WhileLoop,
18
+ RawBlock,
19
+ SayCommand,
20
+ BinaryExpression,
21
+ LiteralExpression,
22
+ )
23
+ from .mdl_compiler import MDLCompiler
24
+
25
+
26
+ # ---------- Expression helpers ----------
27
+
28
+ def num(value: Union[int, float]) -> LiteralExpression:
29
+ return LiteralExpression(value=value, type="number")
30
+
31
+
32
+ def var_read(name: str, scope: str) -> VariableSubstitution:
33
+ # scope must look like <@s>, <@a>, <@e[...]>, or <global>
34
+ return VariableSubstitution(name=name, scope=scope)
35
+
36
+
37
+ def binop(left, operator: str, right) -> BinaryExpression:
38
+ # operator one of: PLUS, MINUS, MULTIPLY, DIVIDE, GREATER, LESS, GREATER_EQUAL, LESS_EQUAL, EQUAL, NOT_EQUAL
39
+ return BinaryExpression(left=left, operator=operator, right=right)
40
+
41
+
42
+ # ---------- Python Bindings ----------
43
+
44
+
45
+ class Pack:
46
+ def __init__(self, name: str, description: str = "", pack_format: int = 82):
47
+ self._pack = PackDeclaration(name=name, description=description, pack_format=pack_format)
48
+ self._namespaces: List[Namespace] = []
49
+ self._variables: List[VariableDeclaration] = []
50
+ self._tags: List[TagDeclaration] = []
51
+ self._hooks: List = [] # HookDeclaration built by Namespace
52
+
53
+ def namespace(self, name: str) -> "Namespace":
54
+ ns = Namespace(self, name)
55
+ self._namespaces.append(ns)
56
+ return ns
57
+
58
+ # Lifecycle hooks reference functions by id "ns:name"
59
+ def on_load(self, function_id: str, scope: Optional[str] = None):
60
+ # defer to Namespace to create HookDeclaration during build
61
+ self._hooks.append(("on_load", function_id, scope))
62
+
63
+ def on_tick(self, function_id: str, scope: Optional[str] = None):
64
+ self._hooks.append(("on_tick", function_id, scope))
65
+
66
+ def tag(self, registry: str, name: str, values: Optional[List[str]] = None, replace: bool = False):
67
+ values = values or []
68
+ # We store TagDeclaration; the compiler writes tag files based on tag_type/name/file_path
69
+ # Here, we map registry + name to a tag reference name; file_path left as name for placeholder.
70
+ self._tags.append(TagDeclaration(tag_type=registry, name=name, file_path=name))
71
+
72
+ def declare_var(self, name: str, scope: str, initial_value: Union[int, float]) -> None:
73
+ self._variables.append(
74
+ VariableDeclaration(var_type="num", name=name, scope=scope, initial_value=num(initial_value))
75
+ )
76
+
77
+ def build(self, output_dir: str):
78
+ # Build Program AST
79
+ namespace_nodes: List[NamespaceDeclaration] = []
80
+ function_nodes: List[FunctionDeclaration] = []
81
+ hook_nodes: List = []
82
+
83
+ # Namespaces and functions
84
+ for ns in self._namespaces:
85
+ namespace_nodes.append(NamespaceDeclaration(name=ns.name))
86
+ function_nodes.extend(ns._functions)
87
+ hook_nodes.extend(ns._hooks)
88
+
89
+ # Hooks added via Pack-level convenience
90
+ for hook_type, function_id, scope in self._hooks:
91
+ ns_name, fn_name = function_id.split(":", 1)
92
+ from .ast_nodes import HookDeclaration
93
+
94
+ hook_nodes.append(
95
+ HookDeclaration(hook_type=hook_type, namespace=ns_name, name=fn_name, scope=scope)
96
+ )
97
+
98
+ program = Program(
99
+ pack=self._pack,
100
+ namespace=namespace_nodes[0] if namespace_nodes else None,
101
+ tags=self._tags,
102
+ variables=self._variables,
103
+ functions=function_nodes,
104
+ hooks=hook_nodes,
105
+ statements=[],
106
+ )
107
+
108
+ MDLCompiler(output_dir).compile(program, output_dir)
109
+
110
+
111
+ class Namespace:
112
+ def __init__(self, pack: Pack, name: str):
113
+ self._pack = pack
114
+ self.name = name
115
+ self._functions: List[FunctionDeclaration] = []
116
+ self._hooks: List = []
117
+
118
+ def function(self, name: str, *commands_or_builder: Union[str, Callable[["FunctionBuilder"], None]]):
119
+ builder = FunctionBuilder(self._pack, self, name)
120
+
121
+ # If a single callable is given, treat it as a builder lambda
122
+ if len(commands_or_builder) == 1 and callable(commands_or_builder[0]):
123
+ commands_or_builder[0](builder)
124
+ else:
125
+ # Interpret simple strings: say "..."; exec ns:name; raw lines fall back to RawBlock
126
+ for cmd in commands_or_builder:
127
+ if not isinstance(cmd, str):
128
+ continue
129
+ stripped = cmd.strip().rstrip(";")
130
+ if stripped.startswith("say "):
131
+ msg = stripped[len("say ") :].strip()
132
+ if msg.startswith("\"") and msg.endswith("\""):
133
+ msg = msg[1:-1]
134
+ builder.say(msg)
135
+ elif stripped.startswith("exec "):
136
+ target = stripped[len("exec ") :].strip()
137
+ # Optional scope in angle brackets e.g., util:helper<@s>
138
+ scope = None
139
+ if "<" in target and target.endswith(">"):
140
+ scope = target[target.index("<") :]
141
+ target = target[: target.index("<")]
142
+ builder.exec(target, scope)
143
+ else:
144
+ builder.raw(cmd)
145
+
146
+ func_node = FunctionDeclaration(namespace=self.name, name=name, scope=None, body=builder._body)
147
+ self._functions.append(func_node)
148
+ return func_node
149
+
150
+ # Convenience forwarding
151
+ def on_load(self, function_id: str, scope: Optional[str] = None):
152
+ from .ast_nodes import HookDeclaration
153
+
154
+ ns_name, fn_name = function_id.split(":", 1)
155
+ self._hooks.append(HookDeclaration(hook_type="on_load", namespace=ns_name, name=fn_name, scope=scope))
156
+
157
+ def on_tick(self, function_id: str, scope: Optional[str] = None):
158
+ from .ast_nodes import HookDeclaration
159
+
160
+ ns_name, fn_name = function_id.split(":", 1)
161
+ self._hooks.append(HookDeclaration(hook_type="on_tick", namespace=ns_name, name=fn_name, scope=scope))
162
+
163
+
164
+ class FunctionBuilder:
165
+ def __init__(self, pack: Pack, namespace: Namespace, function_name: str):
166
+ self._pack = pack
167
+ self._namespace = namespace
168
+ self._name = function_name
169
+ self._body: List = []
170
+
171
+ # Basics
172
+ def say(self, message: str):
173
+ self._body.append(SayCommand(message=message, variables=[]))
174
+
175
+ def raw(self, content: str):
176
+ self._body.append(RawBlock(content=content.rstrip(";")))
177
+
178
+ def exec(self, function_id: str, scope: Optional[str] = None):
179
+ ns, fn = function_id.split(":", 1)
180
+ self._body.append(FunctionCall(namespace=ns, name=fn, scope=scope))
181
+
182
+ # Variables
183
+ def declare_var(self, name: str, scope: str, initial_value: Union[int, float]):
184
+ self._pack.declare_var(name, scope, initial_value)
185
+ # Also set to initial value in this function
186
+ self.set(name, scope, num(initial_value))
187
+
188
+ def set(self, name: str, scope: str, value_expr) -> None:
189
+ self._body.append(VariableAssignment(name=name, scope=scope, value=value_expr))
190
+
191
+ # Control flow
192
+ def if_(self, condition_expr, then_builder: Callable[["FunctionBuilder"], None], else_builder: Optional[Callable[["FunctionBuilder"], None]] = None):
193
+ then_fb = FunctionBuilder(self._pack, self._namespace, self._name)
194
+ then_builder(then_fb)
195
+ else_body = None
196
+ if else_builder:
197
+ else_fb = FunctionBuilder(self._pack, self._namespace, self._name)
198
+ else_builder(else_fb)
199
+ else_body = else_fb._body
200
+ self._body.append(IfStatement(condition=condition_expr, then_body=then_fb._body, else_body=else_body))
201
+
202
+ def while_(self, condition_expr, body_builder: Callable[["FunctionBuilder"], None]):
203
+ body_fb = FunctionBuilder(self._pack, self._namespace, self._name)
204
+ body_builder(body_fb)
205
+ self._body.append(WhileLoop(condition=condition_expr, body=body_fb._body))
206
+
207
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 15.4.33
3
+ Version: 15.4.35
4
4
  Summary: Compile MDL language with explicit scoping into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
5
5
  Project-URL: Homepage, https://www.mcmdl.com
6
6
  Project-URL: Documentation, https://www.mcmdl.com/docs
@@ -28,6 +28,7 @@ test_simple.mdl
28
28
  ./minecraft_datapack_language/mdl_lexer.py
29
29
  ./minecraft_datapack_language/mdl_linter.py
30
30
  ./minecraft_datapack_language/mdl_parser.py
31
+ ./minecraft_datapack_language/python_api.py
31
32
  ./minecraft_datapack_language/utils.py
32
33
  .cursor/rules/aispec.mdc
33
34
  .github/actions/mdl-compile/action.yml
@@ -248,7 +249,7 @@ docs/_docs/examples.md
248
249
  docs/_docs/getting-started.md
249
250
  docs/_docs/language-reference.md
250
251
  docs/_docs/multi-file-projects.md
251
- docs/_docs/python-api.md
252
+ docs/_docs/python-bindings.md
252
253
  docs/_docs/vscode-extension.md
253
254
  docs/_includes/head-custom.html
254
255
  docs/_includes/navigation.html
@@ -294,6 +295,7 @@ minecraft_datapack_language/mdl_errors.py
294
295
  minecraft_datapack_language/mdl_lexer.py
295
296
  minecraft_datapack_language/mdl_linter.py
296
297
  minecraft_datapack_language/mdl_parser.py
298
+ minecraft_datapack_language/python_api.py
297
299
  minecraft_datapack_language/utils.py
298
300
  minecraft_datapack_language.egg-info/PKG-INFO
299
301
  minecraft_datapack_language.egg-info/SOURCES.txt
@@ -347,10 +349,12 @@ test_project/complex_test.mdl
347
349
  tests/__init__.py
348
350
  tests/run_all_tests.py
349
351
  tests/test_cli.py
352
+ tests/test_codegen_naming_and_logic.py
350
353
  tests/test_compiler_fixes.py
351
354
  tests/test_complex_scenarios.py
352
355
  tests/test_comprehensive_end_to_end.py
353
356
  tests/test_python_api.py
357
+ tests/test_python_bindings.py
354
358
  vscode-extension/README.md
355
359
  vscode-extension/language-configuration.json
356
360
  vscode-extension/package-lock.json
@@ -19,6 +19,6 @@ markers =
19
19
  compiler: Compiler-specific tests
20
20
  parser: Parser-specific tests
21
21
  lexer: Lexer-specific tests
22
- python_api: Python API tests
22
+ python_bindings: Python bindings tests
23
23
  cli: CLI tests
24
24
  slow: Slow running tests
@@ -78,7 +78,7 @@ def main():
78
78
  ("test_comprehensive_end_to_end.py", "End-to-end comprehensive tests"),
79
79
  ("test_complex_scenarios.py", "Complex scenario tests"),
80
80
  ("test_compiler_fixes.py", "Compiler fix verification tests"),
81
- ("test_python_api.py", "Python API tests"),
81
+ ("test_python_bindings.py", "Python bindings tests"),
82
82
  ("test_cli.py", "CLI functionality tests"),
83
83
  ]
84
84
 
@@ -122,13 +122,13 @@ def main():
122
122
  results.append(("Function Execution", function_result))
123
123
 
124
124
  # 4. Test Python API
125
- print("\nTesting Python API...")
125
+ print("\nTesting Python bindings...")
126
126
  api_result = run_test_suite(
127
- "Python API Basic",
127
+ "Python Bindings Basic",
128
128
  "python -c \"from minecraft_datapack_language import Pack; import tempfile; from pathlib import Path; p = Pack('Test', 'Test pack', 82); ns = p.namespace('test'); ns.function('hello', 'say Hello World!'); with tempfile.TemporaryDirectory() as temp_dir: p.build(temp_dir); output = Path(temp_dir) / 'data' / 'test' / 'function' / 'hello.mcfunction'; assert output.exists(); print('Python API test successful')\"",
129
- "Test basic Python API functionality"
129
+ "Test basic Python bindings functionality"
130
130
  )
131
- results.append(("Python API", api_result))
131
+ results.append(("Python Bindings", api_result))
132
132
 
133
133
  # 5. Test CLI
134
134
  print("\nTesting CLI...")