minecraft-datapack-language 17.0.9__tar.gz → 17.0.10__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 (405) hide show
  1. minecraft_datapack_language-17.0.10/MANIFEST.in +3 -0
  2. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/PKG-INFO +1 -1
  3. minecraft_datapack_language-17.0.10/docs/_data/version.yml +3 -0
  4. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/_version.py +3 -3
  5. minecraft_datapack_language-17.0.10/minecraft_datapack_language/cli.py +631 -0
  6. minecraft_datapack_language-17.0.10/minecraft_datapack_language/completions/mdl.bash +35 -0
  7. minecraft_datapack_language-17.0.10/minecraft_datapack_language/completions/mdl.fish +31 -0
  8. minecraft_datapack_language-17.0.10/minecraft_datapack_language/completions/mdl.ps1 +27 -0
  9. minecraft_datapack_language-17.0.10/minecraft_datapack_language/completions/mdl.zsh +28 -0
  10. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language.egg-info/PKG-INFO +1 -1
  11. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language.egg-info/SOURCES.txt +9 -0
  12. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/pyproject.toml +7 -0
  13. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/release.sh +7 -0
  14. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_cli.py +34 -0
  15. minecraft_datapack_language-17.0.9/docs/_data/version.yml +0 -3
  16. minecraft_datapack_language-17.0.9/minecraft_datapack_language/cli.py +0 -310
  17. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.cursor/rules/aispec.mdc +0 -0
  18. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.github/actions/mdl-compile/action.yml +0 -0
  19. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.github/workflows/ci.yml +0 -0
  20. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.github/workflows/docs.yml +0 -0
  21. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.github/workflows/pypi.yml +0 -0
  22. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.github/workflows/release.yml +0 -0
  23. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.github/workflows/update-website-version.yml +0 -0
  24. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.gitignore +0 -0
  25. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/minecraft/tags/function/load.json +0 -0
  26. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/test1/function/load.mcfunction +0 -0
  27. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/test1/function/load1.mcfunction +0 -0
  28. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/test1/function/main.mcfunction +0 -0
  29. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/test1/function/main__else_1.mcfunction +0 -0
  30. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/test1/function/main__if_1.mcfunction +0 -0
  31. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/test1/function/testfunc.mcfunction +0 -0
  32. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/data/test1/function/testfunc__while_1.mcfunction +0 -0
  33. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1/pack.mcmeta +0 -0
  34. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/minecraft/tags/function/load.json +0 -0
  35. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/test1/function/load.mcfunction +0 -0
  36. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/test1/function/load1.mcfunction +0 -0
  37. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/test1/function/main.mcfunction +0 -0
  38. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/test1/function/main__else_1.mcfunction +0 -0
  39. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/test1/function/main__if_1.mcfunction +0 -0
  40. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/test1/function/testfunc.mcfunction +0 -0
  41. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/data/test1/function/testfunc__while_1.mcfunction +0 -0
  42. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.mdl-out-test1-confirm/pack.mcmeta +0 -0
  43. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.tmp_compile_bwe.py +0 -0
  44. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.tmp_compile_bwe2.py +0 -0
  45. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.tmp_compile_bwe3.py +0 -0
  46. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/.tmp_verify_loops.py +0 -0
  47. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/LICENSE +0 -0
  48. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/Makefile +0 -0
  49. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/README.md +0 -0
  50. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/advancements/diamond_sword.json +0 -0
  51. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/advancements/first_spell.json +0 -0
  52. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/advancements/other_advancement.json +0 -0
  53. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/advancements/test_advancement.json +0 -0
  54. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/comprehensive_error_test.mdl +0 -0
  55. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
  56. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
  57. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
  58. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
  59. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
  60. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
  61. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
  62. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
  63. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
  64. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
  65. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
  66. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
  67. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
  68. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
  69. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
  70. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
  71. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
  72. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
  73. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
  74. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
  75. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
  76. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
  77. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
  78. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
  79. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
  80. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
  81. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
  82. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
  83. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  84. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  85. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
  86. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
  87. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
  88. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
  89. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
  90. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/control_test/function/main_if_0.mcfunction +0 -0
  91. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/control_test/function/main_while_1.mcfunction +0 -0
  92. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/control_test/function/main_while_body_1.mcfunction +0 -0
  93. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/if_test/function/main_else_1.mcfunction +0 -0
  94. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/if_test/function/main_if_1.mcfunction +0 -0
  95. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
  96. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
  97. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
  98. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
  99. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
  100. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
  101. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/countdown_while_1.mcfunction +0 -0
  102. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/countdown_while_body_1.mcfunction +0 -0
  103. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
  104. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
  105. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/loop_demo_while_2.mcfunction +0 -0
  106. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
  107. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
  108. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
  109. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
  110. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_else_0.mcfunction +0 -0
  111. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_else_1.mcfunction +0 -0
  112. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_else_5.mcfunction +0 -0
  113. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_if_0.mcfunction +0 -0
  114. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_if_1.mcfunction +0 -0
  115. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_if_5.mcfunction +0 -0
  116. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_0.mcfunction +0 -0
  117. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_1.mcfunction +0 -0
  118. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_2.mcfunction +0 -0
  119. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_6.mcfunction +0 -0
  120. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_7.mcfunction +0 -0
  121. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_body_0.mcfunction +0 -0
  122. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_body_1.mcfunction +0 -0
  123. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_body_2.mcfunction +0 -0
  124. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_body_6.mcfunction +0 -0
  125. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/main_while_body_7.mcfunction +0 -0
  126. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
  127. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
  128. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
  129. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/start_game_if_1.mcfunction +0 -0
  130. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/start_game_if_5.mcfunction +0 -0
  131. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/start_game_while_4.mcfunction +0 -0
  132. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/start_game_while_body_4.mcfunction +0 -0
  133. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
  134. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
  135. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
  136. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
  137. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
  138. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
  139. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
  140. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
  141. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
  142. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
  143. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
  144. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
  145. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
  146. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
  147. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
  148. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
  149. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
  150. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
  151. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
  152. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
  153. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
  154. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
  155. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
  156. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
  157. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
  158. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
  159. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
  160. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
  161. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
  162. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
  163. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
  164. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
  165. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
  166. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
  167. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
  168. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
  169. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
  170. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
  171. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
  172. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
  173. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
  174. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
  175. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
  176. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
  177. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
  178. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
  179. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
  180. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
  181. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
  182. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
  183. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
  184. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
  185. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
  186. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
  187. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
  188. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
  189. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
  190. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
  191. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
  192. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
  193. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
  194. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
  195. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
  196. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
  197. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
  198. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
  199. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
  200. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
  201. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
  202. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_if_else_else_1.mcfunction +0 -0
  203. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_if_else_else_2.mcfunction +0 -0
  204. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_if_else_else_3.mcfunction +0 -0
  205. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_if_else_if_1.mcfunction +0 -0
  206. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_if_else_if_2.mcfunction +0 -0
  207. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_if_else_if_3.mcfunction +0 -0
  208. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_main_while_0.mcfunction +0 -0
  209. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_main_while_body_0.mcfunction +0 -0
  210. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
  211. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
  212. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
  213. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
  214. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
  215. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
  216. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
  217. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
  218. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
  219. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
  220. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  221. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  222. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
  223. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
  224. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
  225. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
  226. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
  227. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
  228. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
  229. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
  230. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
  231. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
  232. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_while_break_while_2.mcfunction +0 -0
  233. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
  234. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
  235. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
  236. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/tick_if_1.mcfunction +0 -0
  237. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/tick_if_2.mcfunction +0 -0
  238. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
  239. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
  240. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
  241. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
  242. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
  243. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
  244. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/while_test/function/main_while_0.mcfunction +0 -0
  245. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/data/while_test/function/main_while_body_0.mcfunction +0 -0
  246. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/dist.zip +0 -0
  247. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/.env +0 -0
  248. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/404.html +0 -0
  249. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/Gemfile +0 -0
  250. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/README.md +0 -0
  251. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_config.yml +0 -0
  252. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/cli-reference.md +0 -0
  253. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/contributing.md +0 -0
  254. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/docs-hub.md +0 -0
  255. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/documentation.md +0 -0
  256. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/examples.md +0 -0
  257. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/getting-started.md +0 -0
  258. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/language-reference.md +0 -0
  259. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/multi-file-projects.md +0 -0
  260. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/python-bindings.md +0 -0
  261. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_docs/vscode-extension.md +0 -0
  262. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_includes/head-custom.html +0 -0
  263. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_includes/navigation.html +0 -0
  264. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_layouts/default.html +0 -0
  265. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_layouts/page.html +0 -0
  266. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_plugins/test_version.rb +0 -0
  267. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/_plugins/version_reader.rb +0 -0
  268. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/assets/css/style.css +0 -0
  269. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/docs.md +0 -0
  270. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/downloads.md +0 -0
  271. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/favicon-16.png +0 -0
  272. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/favicon-32.png +0 -0
  273. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/favicon-48.png +0 -0
  274. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/favicon-64.png +0 -0
  275. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/icon-1024.png +0 -0
  276. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/icon-128.png +0 -0
  277. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/icon-256.png +0 -0
  278. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/icon-512.png +0 -0
  279. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/icons/icon-64.png +0 -0
  280. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/docs/index.md +0 -0
  281. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/examples/hello_world.mdl +0 -0
  282. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/examples/macros_example.mdl +0 -0
  283. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/examples/scope_examples.mdl +0 -0
  284. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/examples/simple_counter.mdl +0 -0
  285. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/favicon-16.png +0 -0
  286. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/favicon-32.png +0 -0
  287. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/favicon-48.png +0 -0
  288. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/favicon-64.png +0 -0
  289. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/icon-1024.png +0 -0
  290. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/icon-128.png +0 -0
  291. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/icon-256.png +0 -0
  292. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/icon-512.png +0 -0
  293. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/icons/icon-64.png +0 -0
  294. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/item_modifiers/diamond_sword.json +0 -0
  295. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/item_modifiers/enchant_tool.json +0 -0
  296. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/item_modifiers/test_item_modifier.json +0 -0
  297. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/loot_tables/diamond_sword.json +0 -0
  298. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/loot_tables/epic_loot.json +0 -0
  299. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/loot_tables/main_loot.json +0 -0
  300. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/loot_tables/test_loot.json +0 -0
  301. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/mdllocal.sh +0 -0
  302. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/__init__.py +0 -0
  303. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/ast_nodes.py +0 -0
  304. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/dir_map.py +0 -0
  305. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/mdl_compiler.py +0 -0
  306. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/mdl_errors.py +0 -0
  307. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/mdl_lexer.py +0 -0
  308. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/mdl_linter.py +0 -0
  309. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/mdl_parser.py +0 -0
  310. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/python_api.py +0 -0
  311. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language/utils.py +0 -0
  312. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
  313. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
  314. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language.egg-info/requires.txt +0 -0
  315. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
  316. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/multi_scope_example.mdl +0 -0
  317. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/my_awesome_pack/README.md +0 -0
  318. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
  319. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/predicates/diamond_sword.json +0 -0
  320. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/predicates/has_mana.json +0 -0
  321. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/predicates/other_predicate.json +0 -0
  322. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/predicates/test_predicate.json +0 -0
  323. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/pytest.ini +0 -0
  324. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/custom_pickaxe.json +0 -0
  325. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/diamond_sword.json +0 -0
  326. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/first.json +0 -0
  327. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/inlet.json +0 -0
  328. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/main_recipe.json +0 -0
  329. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/outlet.json +0 -0
  330. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/pipe.json +0 -0
  331. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/second.json +0 -0
  332. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/test_recipe.json +0 -0
  333. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/recipes/wrench.json +0 -0
  334. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scope_demo.mdl +0 -0
  335. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scoreboard_test.mdl +0 -0
  336. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/UpdateMDL.sh +0 -0
  337. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/bootstrap.ps1 +0 -0
  338. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/bootstrap.sh +0 -0
  339. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/build_pkg.ps1 +0 -0
  340. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/build_pkg.sh +0 -0
  341. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/dev_build.ps1 +0 -0
  342. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/dev_build.sh +0 -0
  343. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/dev_setup.ps1 +0 -0
  344. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/dev_setup.sh +0 -0
  345. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
  346. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
  347. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/git-bash/test_cli-gitbash.sh +0 -0
  348. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/test_cli.ps1 +0 -0
  349. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/test_cli.sh +0 -0
  350. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/test_dev.ps1 +0 -0
  351. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/test_dev.sh +0 -0
  352. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/update_docs.sh +0 -0
  353. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/scripts/update_version_info.sh +0 -0
  354. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/setup.cfg +0 -0
  355. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/structures/diamond_sword.json +0 -0
  356. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/structures/test_structure.json +0 -0
  357. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/structures/workshop.json +0 -0
  358. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tellraw_variables_test.mdl +0 -0
  359. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/temp_output/data/minecraft/tags/function/load.json +0 -0
  360. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/temp_output/data/test/function/helper.mcfunction +0 -0
  361. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/temp_output/data/test/function/load.mcfunction +0 -0
  362. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/temp_output/data/test/function/main.mcfunction +0 -0
  363. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/temp_output/pack.mcmeta +0 -0
  364. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/test_all_registry.mdl +0 -0
  365. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/test_complex_scenarios.mdl +0 -0
  366. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/test_comprehensive_fixes.mdl +0 -0
  367. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/test_if_else_while.mdl +0 -0
  368. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/test_project/complex_test.mdl +0 -0
  369. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/test_simple.mdl +0 -0
  370. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/__init__.py +0 -0
  371. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/run_all_tests.py +0 -0
  372. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_arithmetic_codegen.py +0 -0
  373. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_codegen_naming_and_logic.py +0 -0
  374. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_compiler_fixes.py +0 -0
  375. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_complex_logic_and_arithmetic.py +0 -0
  376. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_complex_scenarios.py +0 -0
  377. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_comprehensive_end_to_end.py +0 -0
  378. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_examples.py +0 -0
  379. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_global_scope.py +0 -0
  380. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_macros.py +0 -0
  381. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_python_api.py +0 -0
  382. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_python_bindings.py +0 -0
  383. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_scheduledwhile.py +0 -0
  384. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tests/test_user_regression_test1.py +0 -0
  385. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tmp_local_cli_out.zip +0 -0
  386. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tmp_test1.mdl +0 -0
  387. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tmp_test1.mdl~ +0 -0
  388. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/tmp_test1_confirm.mdl +0 -0
  389. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/README.md +0 -0
  390. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/favicon-16.png +0 -0
  391. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/favicon-32.png +0 -0
  392. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/favicon-48.png +0 -0
  393. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/favicon-64.png +0 -0
  394. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/icon-1024.png +0 -0
  395. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/icon-128.png +0 -0
  396. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/icon-256.png +0 -0
  397. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/icons/icon-512.png +0 -0
  398. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/language-configuration.json +0 -0
  399. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/package-lock.json +0 -0
  400. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/package.json +0 -0
  401. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/snippets/mdl.json +0 -0
  402. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/src/extension.ts +0 -0
  403. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
  404. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/themes/mdl-color-theme.json +0 -0
  405. {minecraft_datapack_language-17.0.9 → minecraft_datapack_language-17.0.10}/vscode-extension/tsconfig.json +0 -0
@@ -0,0 +1,3 @@
1
+ recursive-include minecraft_datapack_language/_embedded/docs *
2
+ recursive-include minecraft_datapack_language/completions *
3
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 17.0.9
3
+ Version: 17.0.10
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: "17.0.9"
2
+ tag: "v17.0.9"
3
+ updated_at: "2025-09-10T08:38:33Z"
@@ -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 = '17.0.9'
32
- __version_tuple__ = version_tuple = (17, 0, 9)
31
+ __version__ = version = '17.0.10'
32
+ __version_tuple__ = version_tuple = (17, 0, 10)
33
33
 
34
- __commit_id__ = commit_id = 'gec18b145d'
34
+ __commit_id__ = commit_id = 'g1fc979b55'
@@ -0,0 +1,631 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ MDL CLI - Command Line Interface for Minecraft Datapack Language
4
+ """
5
+
6
+ import argparse
7
+ import sys
8
+ import os
9
+ from pathlib import Path
10
+ import shutil
11
+ from typing import Optional
12
+ try:
13
+ # Python 3.9+
14
+ from importlib.resources import files as importlib_resources_files
15
+ except Exception: # pragma: no cover
16
+ import importlib_resources # type: ignore
17
+ importlib_resources_files = importlib_resources.files # type: ignore
18
+ from .mdl_lexer import MDLLexer
19
+ from .mdl_parser import MDLParser
20
+ from .mdl_compiler import MDLCompiler
21
+ from .mdl_errors import MDLLexerError, MDLParserError, MDLCompilerError
22
+
23
+
24
+ def main():
25
+ """Main CLI entry point."""
26
+ parser = argparse.ArgumentParser(
27
+ description="MDL (Minecraft Datapack Language) - Compile MDL files to Minecraft datapacks",
28
+ formatter_class=argparse.RawDescriptionHelpFormatter,
29
+ epilog="""
30
+ Examples:
31
+ mdl build # Build all MDL files in current directory (to ./dist)
32
+ mdl build --mdl main.mdl # Build a single MDL file (to ./dist)
33
+ mdl build -o out # Build current directory to custom output
34
+ mdl check # Check all .mdl files in current directory
35
+ mdl check main.mdl # Check a single file
36
+ mdl new my_project # Create a new project
37
+ """
38
+ )
39
+ # Global options
40
+ parser.add_argument('--version', action='store_true', help='Show version and exit')
41
+
42
+ subparsers = parser.add_subparsers(dest='command', help='Available commands')
43
+
44
+ # Build command
45
+ build_parser = subparsers.add_parser('build', help='Build MDL files into a datapack')
46
+ build_parser.add_argument('--mdl', default='.', help='MDL file(s) or directory to build (default: .)')
47
+ build_parser.add_argument('-o', '--output', default='dist', help='Output directory for the datapack (default: dist)')
48
+ build_parser.add_argument('--verbose', action='store_true', help='Show detailed output')
49
+ build_parser.add_argument('--wrapper', help='Optional wrapper directory name for the datapack output')
50
+ build_parser.add_argument('--no-zip', action='store_true', help='Do not create a zip archive (zip is created by default)')
51
+
52
+ # Check command
53
+ check_parser = subparsers.add_parser('check', help='Check MDL files for syntax errors')
54
+ check_parser.add_argument('files', nargs='*', help='MDL files or directories to check (default: current directory)')
55
+ check_parser.add_argument('--verbose', action='store_true', help='Show detailed output')
56
+
57
+ # New command
58
+ new_parser = subparsers.add_parser('new', help='Create a new MDL project')
59
+ new_parser.add_argument('project_name', help='Name of the new project')
60
+ new_parser.add_argument('--pack-name', help='Custom name for the datapack')
61
+ new_parser.add_argument('--pack-format', type=int, default=82, help='Pack format number (default: 82)')
62
+ new_parser.add_argument('--output', help='Directory to create the project in (defaults to current directory)')
63
+ new_parser.add_argument('--exclude-local-docs', action='store_true', help='Do not copy packaged docs into the project')
64
+
65
+ # Completion command
66
+ completion_parser = subparsers.add_parser('completion', help='Shell completion utilities')
67
+ completion_sub = completion_parser.add_subparsers(dest='completion_cmd', help='Completion subcommands')
68
+ comp_print = completion_sub.add_parser('print', help='Print completion script for a shell')
69
+ comp_print.add_argument('shell', nargs='?', choices=['bash', 'zsh', 'fish', 'powershell'], help='Target shell (default: auto-detect)')
70
+ comp_install = completion_sub.add_parser('install', help='Install completion for current user shell')
71
+ comp_install.add_argument('shell', nargs='?', choices=['bash', 'zsh', 'fish', 'powershell'], help='Target shell (default: auto-detect)')
72
+ comp_uninstall = completion_sub.add_parser('uninstall', help='Uninstall completion from current user shell')
73
+ comp_uninstall.add_argument('shell', nargs='?', choices=['bash', 'zsh', 'fish', 'powershell'], help='Target shell (default: auto-detect)')
74
+ completion_sub.add_parser('doctor', help='Diagnose completion install status')
75
+
76
+ # Docs command
77
+ docs_parser = subparsers.add_parser('docs', help='Docs utilities')
78
+ docs_sub = docs_parser.add_subparsers(dest='docs_cmd', help='Docs subcommands')
79
+ docs_serve = docs_sub.add_parser('serve', help='Serve project docs locally')
80
+ docs_serve.add_argument('--port', type=int, default=8000, help='Port to serve on (default: 8000)')
81
+ docs_serve.add_argument('--dir', default='docs', help='Docs directory to serve (default: docs)')
82
+
83
+ args = parser.parse_args()
84
+
85
+ if args.version and not args.command:
86
+ # Print version and exit
87
+ try:
88
+ from . import __version__
89
+ except Exception:
90
+ __version__ = "0.0.0"
91
+ print(__version__)
92
+ return 0
93
+
94
+ if not args.command:
95
+ parser.print_help()
96
+ return 1
97
+
98
+ try:
99
+ if args.command == 'build':
100
+ return build_command(args)
101
+ elif args.command == 'check':
102
+ return check_command(args)
103
+ elif args.command == 'new':
104
+ return new_command(args)
105
+ elif args.command == 'completion':
106
+ return completion_command(args)
107
+ elif args.command == 'docs':
108
+ return docs_command(args)
109
+ else:
110
+ print(f"Unknown command: {args.command}")
111
+ return 1
112
+ except Exception as e:
113
+ print(f"Error: {e}")
114
+ if args.verbose:
115
+ import traceback
116
+ traceback.print_exc()
117
+ return 1
118
+
119
+
120
+ def build_command(args):
121
+ """Build MDL files into a datapack."""
122
+ mdl_path = Path(args.mdl)
123
+ output_dir = Path(args.output)
124
+
125
+ if not mdl_path.exists():
126
+ print(f"Error: MDL path '{mdl_path}' does not exist")
127
+ return 1
128
+
129
+ # Determine what to build
130
+ if mdl_path.is_file():
131
+ mdl_files = [mdl_path]
132
+ elif mdl_path.is_dir():
133
+ mdl_files = list(mdl_path.glob("**/*.mdl"))
134
+ if not mdl_files:
135
+ print(f"Error: No .mdl files found in directory '{mdl_path}'")
136
+ return 1
137
+ else:
138
+ print(f"Error: Invalid MDL path '{mdl_path}'")
139
+ return 1
140
+
141
+ if args.verbose:
142
+ print(f"Building {len(mdl_files)} MDL file(s)...")
143
+ for f in mdl_files:
144
+ print(f" {f}")
145
+
146
+ # Parse and compile each file
147
+ all_asts = []
148
+ for mdl_file in mdl_files:
149
+ try:
150
+ with open(mdl_file, 'r', encoding='utf-8') as f:
151
+ source = f.read()
152
+
153
+ if args.verbose:
154
+ print(f"Parsing {mdl_file}...")
155
+
156
+ parser = MDLParser(str(mdl_file))
157
+ ast = parser.parse(source)
158
+ all_asts.append(ast)
159
+ # Indicate per-file success
160
+ print(f"[OK] {mdl_file}")
161
+
162
+ except (MDLLexerError, MDLParserError) as e:
163
+ print(f"Error in {mdl_file}: {e}")
164
+ return 1
165
+
166
+ # Merge all ASTs if multiple files
167
+ if len(all_asts) == 1:
168
+ final_ast = all_asts[0]
169
+ else:
170
+ # Merge multiple ASTs
171
+ final_ast = all_asts[0]
172
+ for ast in all_asts[1:]:
173
+ final_ast.variables.extend(ast.variables)
174
+ final_ast.functions.extend(ast.functions)
175
+ final_ast.tags.extend(ast.tags)
176
+ final_ast.hooks.extend(ast.hooks)
177
+ final_ast.statements.extend(ast.statements)
178
+
179
+ # Compile
180
+ try:
181
+ if args.verbose:
182
+ print(f"Compiling to {output_dir}...")
183
+
184
+ # Support optional wrapper directory
185
+ if getattr(args, 'wrapper', None):
186
+ output_dir = output_dir / args.wrapper
187
+ compiler = MDLCompiler()
188
+ output_path = compiler.compile(final_ast, str(output_dir))
189
+
190
+ # Zip the datapack by default unless disabled
191
+ if not getattr(args, 'no_zip', False):
192
+ base_name = str(Path(output_path))
193
+ # Create archive next to the output directory (base_name.zip)
194
+ archive_path = shutil.make_archive(base_name, 'zip', root_dir=str(Path(output_path)))
195
+ if args.verbose:
196
+ print(f"Created archive: {archive_path}")
197
+
198
+ print(f"Successfully built datapack: {output_path}")
199
+ return 0
200
+
201
+ except MDLCompilerError as e:
202
+ print(f"Compilation error: {e}")
203
+ return 1
204
+
205
+
206
+ def check_command(args):
207
+ """Check MDL files for syntax errors."""
208
+ all_errors = []
209
+
210
+ # If no files provided, default to scanning current directory
211
+ input_paths = args.files if getattr(args, 'files', None) else ['.']
212
+
213
+ # Collect .mdl files from provided files/directories
214
+ mdl_files = []
215
+ for input_path in input_paths:
216
+ path_obj = Path(input_path)
217
+ if path_obj.is_dir():
218
+ mdl_files.extend(path_obj.glob('**/*.mdl'))
219
+ elif path_obj.is_file():
220
+ if path_obj.suffix.lower() == '.mdl':
221
+ mdl_files.append(path_obj)
222
+ else:
223
+ print(f"Error: Path '{path_obj}' does not exist")
224
+
225
+ if not mdl_files:
226
+ print("Error: No .mdl files found to check")
227
+ return 1
228
+
229
+ for file_path in mdl_files:
230
+ try:
231
+ with open(file_path, 'r', encoding='utf-8') as f:
232
+ source = f.read()
233
+
234
+ if args.verbose:
235
+ print(f"Checking {file_path}...")
236
+
237
+ # Lex and parse to check for errors
238
+ lexer = MDLLexer(str(file_path))
239
+ tokens = list(lexer.lex(source))
240
+
241
+ parser = MDLParser(str(file_path))
242
+ ast = parser.parse(source)
243
+
244
+ if args.verbose:
245
+ print(f" ✓ {file_path} - {len(ast.functions)} functions, {len(ast.variables)} variables")
246
+ # Indicate per-file success
247
+ print(f"[OK] {file_path}")
248
+
249
+ except MDLLexerError as e:
250
+ print(f"Lexer error in {file_path}: {e}")
251
+ all_errors.append(e)
252
+ except MDLParserError as e:
253
+ print(f"Parser error in {file_path}: {e}")
254
+ all_errors.append(e)
255
+ except Exception as e:
256
+ print(f"Unexpected error in {file_path}: {e}")
257
+ all_errors.append(e)
258
+
259
+ if all_errors:
260
+ print(f"\nFound {len(all_errors)} error(s)")
261
+ return 1
262
+ else:
263
+ print("All files passed syntax check!")
264
+ return 0
265
+
266
+
267
+ def new_command(args):
268
+ """Create a new MDL project."""
269
+ project_name = args.project_name
270
+ pack_name = args.pack_name or project_name
271
+ pack_format = args.pack_format
272
+ base_dir = Path(args.output) if getattr(args, 'output', None) else Path('.')
273
+ project_dir = base_dir / project_name
274
+
275
+ # Create project directory
276
+ if project_dir.exists():
277
+ print(f"Error: Project directory '{project_name}' already exists")
278
+ return 1
279
+
280
+ project_dir.mkdir(parents=True)
281
+
282
+ # Create main MDL file
283
+ mdl_file = project_dir / f"{project_name}.mdl"
284
+
285
+ template_content = f'''pack "{pack_name}" "Generated by MDL CLI" {pack_format};
286
+ namespace "{project_name}";
287
+
288
+ function {project_name}:main {{
289
+ say "Hello from {project_name}!";
290
+ }}
291
+
292
+ function {project_name}:init {{
293
+ say "Datapack initialized!";
294
+ }}
295
+
296
+ on_load {project_name}:init;
297
+ '''
298
+
299
+ with open(mdl_file, 'w', encoding='utf-8') as f:
300
+ f.write(template_content)
301
+
302
+ # Create README
303
+ readme_file = project_dir / "README.md"
304
+ readme_content = f'''# {project_name}
305
+
306
+ A Minecraft datapack created with MDL (Minecraft Datapack Language).
307
+
308
+ ## Getting Started
309
+
310
+ 1. **Build the datapack:**
311
+ ```bash
312
+ mdl build --mdl {project_name}.mdl -o dist
313
+ ```
314
+
315
+ 2. **Install in Minecraft:**
316
+ - Copy `dist/{project_name}/` to your world's `datapacks/` folder
317
+ - Run `/reload` in-game
318
+
319
+ 3. **Run the main function:**
320
+ ```
321
+ /function {project_name}:main
322
+ ```
323
+ '''
324
+
325
+ with open(readme_file, 'w', encoding='utf-8') as f:
326
+ f.write(readme_content)
327
+
328
+ # Copy packaged docs unless excluded
329
+ if not getattr(args, 'exclude_local_docs', False):
330
+ try:
331
+ copied = copy_packaged_docs_into(project_dir)
332
+ if copied:
333
+ print(f" - docs/ (local docs copied)")
334
+ else:
335
+ print(f" - docs/ (skipped: no embedded docs found)")
336
+ except FileExistsError:
337
+ print(" - docs/ already exists (skipped). Use --exclude-local-docs to suppress this step.")
338
+ except Exception as e:
339
+ print(f" - docs/ copy failed: {e}")
340
+
341
+ # Add simple serve scripts
342
+ try:
343
+ create_docs_serve_scripts(project_dir)
344
+ print(" - serve_docs.sh, serve_docs.ps1")
345
+ except Exception as e:
346
+ print(f" - serve script creation failed: {e}")
347
+
348
+ print(f"Created new MDL project: {project_dir}/")
349
+ print(f" - {mdl_file}")
350
+ print(f" - {readme_file}")
351
+ print(f"\nNext steps:")
352
+ print(f" 1. cd {project_name}")
353
+ print(f" 2. mdl build --mdl {project_name}.mdl -o dist")
354
+ print(f" 3. Copy dist/{project_name}/ to your Minecraft world's datapacks folder")
355
+
356
+ return 0
357
+
358
+
359
+ def copy_packaged_docs_into(project_dir: Path) -> bool:
360
+ """Copy embedded docs folder into the given project directory.
361
+ Returns True if copied, False if no embedded docs packaged.
362
+ Raises FileExistsError if destination exists.
363
+ """
364
+ embedded_root = importlib_resources_files("minecraft_datapack_language").joinpath("_embedded", "docs")
365
+ try:
366
+ # Some importlib.resources implementations require as_file for files; for dirs, check existence
367
+ if not Path(str(embedded_root)).exists():
368
+ return False
369
+ except Exception:
370
+ return False
371
+
372
+ dest = project_dir / "docs"
373
+ if dest.exists():
374
+ raise FileExistsError("docs directory already exists")
375
+ shutil.copytree(str(embedded_root), str(dest))
376
+ return True
377
+
378
+
379
+ def create_docs_serve_scripts(project_dir: Path) -> None:
380
+ """Create convenience scripts to serve the project's docs."""
381
+ bash_script = project_dir / "serve_docs.sh"
382
+ bash_script.write_text("""#!/usr/bin/env bash
383
+ set -e
384
+ PORT=${PORT:-8000}
385
+ DIR=${1:-docs}
386
+ if [ ! -d "$DIR" ]; then
387
+ echo "Error: docs directory '$DIR' not found"; exit 1
388
+ fi
389
+ # Prefer Jekyll if available and Gemfile exists
390
+ if command -v bundle >/dev/null 2>&1 && [ -f "$DIR/Gemfile" ] || [ -f "Gemfile" ]; then
391
+ (cd "$DIR" && bundle exec jekyll serve --livereload --port "$PORT")
392
+ else
393
+ (cd "$DIR" && python -m http.server "$PORT")
394
+ fi
395
+ """, encoding='utf-8')
396
+ try:
397
+ os.chmod(bash_script, 0o755)
398
+ except Exception:
399
+ pass
400
+
401
+ ps1_script = project_dir / "serve_docs.ps1"
402
+ ps1_script.write_text("""
403
+ param(
404
+ [int]$Port = 8000,
405
+ [string]$Dir = "docs"
406
+ )
407
+ if (-not (Test-Path $Dir)) { Write-Host "Error: docs directory '$Dir' not found"; exit 1 }
408
+ # Prefer Jekyll if available and Gemfile exists
409
+ $gemfile = (Test-Path (Join-Path $Dir 'Gemfile')) -or (Test-Path 'Gemfile')
410
+ if ($gemfile -and (Get-Command bundle -ErrorAction SilentlyContinue)) {
411
+ Push-Location $Dir
412
+ & bundle exec jekyll serve --livereload --port $Port
413
+ Pop-Location
414
+ } else {
415
+ Push-Location $Dir
416
+ python -m http.server $Port
417
+ Pop-Location
418
+ }
419
+ """, encoding='utf-8')
420
+
421
+
422
+ def completion_command(args) -> int:
423
+ """Handle completion subcommands: print/install/uninstall/doctor."""
424
+ cmd = args.completion_cmd
425
+ if not cmd:
426
+ print("Usage: mdl completion [print|install|uninstall|doctor] [shell]")
427
+ return 1
428
+
429
+ shell = getattr(args, 'shell', None)
430
+ if cmd == 'print':
431
+ return print_completion(shell)
432
+ elif cmd == 'install':
433
+ return install_completion(shell)
434
+ elif cmd == 'uninstall':
435
+ return uninstall_completion(shell)
436
+ elif cmd == 'doctor':
437
+ return doctor_completion()
438
+ else:
439
+ print(f"Unknown completion subcommand: {cmd}")
440
+ return 1
441
+
442
+
443
+ def detect_shell() -> str:
444
+ sh = os.environ.get('SHELL', '')
445
+ if 'zsh' in sh:
446
+ return 'zsh'
447
+ if 'bash' in sh:
448
+ return 'bash'
449
+ # Windows PowerShell detection
450
+ if os.name == 'nt' or os.environ.get('ComSpec', '').endswith('cmd.exe'):
451
+ return 'powershell'
452
+ return 'bash'
453
+
454
+
455
+ def _read_completion_text(shell: str) -> Optional[str]:
456
+ base = importlib_resources_files("minecraft_datapack_language").joinpath("completions")
457
+ mapping = {
458
+ 'bash': 'mdl.bash',
459
+ 'zsh': 'mdl.zsh',
460
+ 'fish': 'mdl.fish',
461
+ 'powershell': 'mdl.ps1',
462
+ }
463
+ name = mapping.get(shell)
464
+ if not name:
465
+ return None
466
+ path = Path(str(base)) / name
467
+ if not path.exists():
468
+ return None
469
+ return path.read_text(encoding='utf-8')
470
+
471
+
472
+ def print_completion(shell: Optional[str]) -> int:
473
+ sh = shell or detect_shell()
474
+ text = _read_completion_text(sh)
475
+ if not text:
476
+ print(f"No completion script packaged for shell: {sh}")
477
+ return 1
478
+ print(text)
479
+ return 0
480
+
481
+
482
+ def install_completion(shell: Optional[str]) -> int:
483
+ sh = shell or detect_shell()
484
+ text = _read_completion_text(sh)
485
+ if not text:
486
+ print(f"No completion script packaged for shell: {sh}")
487
+ return 1
488
+ home = Path.home()
489
+ target_dir = home / ".mdl" / "completion"
490
+ target_dir.mkdir(parents=True, exist_ok=True)
491
+ filename = {
492
+ 'bash': 'mdl.bash',
493
+ 'zsh': 'mdl.zsh',
494
+ 'fish': 'mdl.fish',
495
+ 'powershell': 'mdl.ps1',
496
+ }[sh]
497
+ target_path = target_dir / filename
498
+ target_path.write_text(text, encoding='utf-8')
499
+
500
+ if sh == 'bash':
501
+ rc = home / ".bashrc"
502
+ _ensure_line_in_file(rc, f"source {target_path.as_posix()}")
503
+ print(f"Installed bash completion. Restart your shell or 'source {rc}'.")
504
+ elif sh == 'zsh':
505
+ rc = home / ".zshrc"
506
+ _ensure_line_in_file(rc, f"source {target_path.as_posix()}")
507
+ print(f"Installed zsh completion. Restart your shell or 'source {rc}'.")
508
+ elif sh == 'fish':
509
+ fish_dir = home / ".config" / "fish" / "completions"
510
+ fish_dir.mkdir(parents=True, exist_ok=True)
511
+ (fish_dir / "mdl.fish").write_text(text, encoding='utf-8')
512
+ print("Installed fish completion. Restart your shell.")
513
+ elif sh == 'powershell':
514
+ print(f"Saved PowerShell completion to {target_path}. Add this line to your $PROFILE:")
515
+ print(f". {target_path}")
516
+ else:
517
+ print(f"Unknown shell: {sh}")
518
+ return 1
519
+ return 0
520
+
521
+
522
+ def uninstall_completion(shell: Optional[str]) -> int:
523
+ sh = shell or detect_shell()
524
+ home = Path.home()
525
+ target_dir = home / ".mdl" / "completion"
526
+ filename = {
527
+ 'bash': 'mdl.bash',
528
+ 'zsh': 'mdl.zsh',
529
+ 'fish': 'mdl.fish',
530
+ 'powershell': 'mdl.ps1',
531
+ }.get(sh)
532
+ if not filename:
533
+ print(f"Unknown shell: {sh}")
534
+ return 1
535
+ try:
536
+ (target_dir / filename).unlink(missing_ok=True) # type: ignore[arg-type]
537
+ except TypeError:
538
+ # Python < 3.8 fallback
539
+ path = target_dir / filename
540
+ if path.exists():
541
+ path.unlink()
542
+ if sh == 'bash':
543
+ _remove_line_from_file(home / ".bashrc", "source ~/.mdl/completion/mdl.bash")
544
+ elif sh == 'zsh':
545
+ _remove_line_from_file(home / ".zshrc", "source ~/.mdl/completion/mdl.zsh")
546
+ elif sh == 'fish':
547
+ fish_path = home / ".config" / "fish" / "completions" / "mdl.fish"
548
+ if fish_path.exists():
549
+ fish_path.unlink()
550
+ elif sh == 'powershell':
551
+ pass
552
+ print(f"Uninstalled {sh} completion.")
553
+ return 0
554
+
555
+
556
+ def doctor_completion() -> int:
557
+ sh = detect_shell()
558
+ print(f"Detected shell: {sh}")
559
+ print("Check if 'mdl' completion activates after restarting your shell. If not, re-run: 'mdl completion install'.")
560
+ return 0
561
+
562
+
563
+ def _ensure_line_in_file(path: Path, line: str) -> None:
564
+ try:
565
+ if not path.exists():
566
+ path.write_text(f"# Added by MDL CLI\n{line}\n", encoding='utf-8')
567
+ return
568
+ content = path.read_text(encoding='utf-8')
569
+ if line not in content:
570
+ with open(path, 'a', encoding='utf-8') as f:
571
+ f.write(f"\n{line}\n")
572
+ except Exception:
573
+ pass
574
+
575
+
576
+ def _remove_line_from_file(path: Path, line: str) -> None:
577
+ try:
578
+ if not path.exists():
579
+ return
580
+ lines = path.read_text(encoding='utf-8').splitlines()
581
+ new_lines = [l for l in lines if l.strip() != line.strip()]
582
+ if new_lines != lines:
583
+ path.write_text("\n".join(new_lines) + "\n", encoding='utf-8')
584
+ except Exception:
585
+ pass
586
+
587
+
588
+ def docs_command(args) -> int:
589
+ cmd = args.docs_cmd
590
+ if cmd == 'serve':
591
+ port = getattr(args, 'port', 8000)
592
+ directory = getattr(args, 'dir', 'docs')
593
+ docs_dir = Path(directory)
594
+ if not docs_dir.exists() or not docs_dir.is_dir():
595
+ print(f"Error: docs directory '{docs_dir}' not found")
596
+ return 1
597
+ print(f"Serving docs on http://localhost:{port} from {docs_dir}")
598
+ try:
599
+ # Prefer Jekyll if Gemfile exists and 'bundle' is available
600
+ use_jekyll = (docs_dir / 'Gemfile').exists() or Path('Gemfile').exists()
601
+ has_bundle = shutil.which('bundle') is not None
602
+ if use_jekyll and has_bundle:
603
+ import subprocess
604
+ subprocess.run(['bundle', 'exec', 'jekyll', 'serve', '--livereload', '--port', str(port)], cwd=str(docs_dir), check=True)
605
+ return 0
606
+ except Exception as e:
607
+ print(f"Jekyll serve failed or unavailable: {e}")
608
+ print("Falling back to Python static server.")
609
+ # Fallback to Python HTTP server
610
+ try:
611
+ import http.server
612
+ import socketserver
613
+ os.chdir(str(docs_dir))
614
+ handler = http.server.SimpleHTTPRequestHandler
615
+ with socketserver.TCPServer(('', port), handler) as httpd:
616
+ print("Press Ctrl+C to stop...")
617
+ httpd.serve_forever()
618
+ except KeyboardInterrupt:
619
+ print("Stopped.")
620
+ return 0
621
+ except Exception as e:
622
+ print(f"Failed to serve docs: {e}")
623
+ return 1
624
+ return 0
625
+ else:
626
+ print("Usage: mdl docs serve [--dir DIR] [--port PORT]")
627
+ return 1
628
+
629
+
630
+ if __name__ == '__main__':
631
+ sys.exit(main())
@@ -0,0 +1,35 @@
1
+ _mdl_complete() {
2
+ local cur prev words cword
3
+ _init_completion -n : || {
4
+ COMPREPLY=()
5
+ return
6
+ }
7
+
8
+ local subcommands="build check new completion docs"
9
+ if [[ ${cword} -eq 1 ]]; then
10
+ COMPREPLY=( $(compgen -W "${subcommands}" -- "$cur") )
11
+ return
12
+ fi
13
+
14
+ case "${words[1]}" in
15
+ build)
16
+ COMPREPLY=( $(compgen -W "--mdl -o --output --verbose --wrapper --no-zip" -- "$cur") )
17
+ [[ ${cur} == -* ]] || COMPREPLY+=( $(compgen -f -d -- "$cur") )
18
+ ;;
19
+ check)
20
+ COMPREPLY=( $(compgen -W "--verbose" -- "$cur") )
21
+ [[ ${cur} == -* ]] || COMPREPLY+=( $(compgen -f -d -- "$cur") )
22
+ ;;
23
+ new)
24
+ COMPREPLY=( $(compgen -W "--pack-name --pack-format --output --exclude-local-docs" -- "$cur") )
25
+ ;;
26
+ completion)
27
+ COMPREPLY=( $(compgen -W "print install uninstall doctor" -- "$cur") )
28
+ ;;
29
+ docs)
30
+ COMPREPLY=( $(compgen -W "serve" -- "$cur") )
31
+ ;;
32
+ esac
33
+ }
34
+ complete -F _mdl_complete mdl
35
+