stewbeet 2.2.17__tar.gz → 2.2.19__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.

Potentially problematic release.


This version of stewbeet might be problematic. Click here for more details.

Files changed (244) hide show
  1. {stewbeet-2.2.17 → stewbeet-2.2.19}/PKG-INFO +4 -4
  2. {stewbeet-2.2.17 → stewbeet-2.2.19}/pyproject.toml +4 -4
  3. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/cli.py +4 -8
  4. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/constants.py +7 -6
  5. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/completion.py +6 -1
  6. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/__init__.py +4 -1
  7. stewbeet-2.2.19/stewbeet/plugins/ingame_manual/assets/book.png +0 -0
  8. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/craft_content.py +25 -5
  9. stewbeet-2.2.19/stewbeet/plugins/ingame_manual/dialog.py +140 -0
  10. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/main.py +88 -56
  11. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/shared_import.py +15 -13
  12. stewbeet-2.2.19/stewbeet/plugins/ingame_manual/templates/book.png +0 -0
  13. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/initialize/__init__.py +71 -30
  14. {stewbeet-2.2.17 → stewbeet-2.2.19}/.gitignore +0 -0
  15. {stewbeet-2.2.17 → stewbeet-2.2.19}/LICENSE +0 -0
  16. {stewbeet-2.2.17 → stewbeet-2.2.19}/README.md +0 -0
  17. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/__init__.py +0 -0
  18. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/__main__.py +0 -0
  19. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/all.py +0 -0
  20. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/continuous_delivery/__init__.py +0 -0
  21. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/continuous_delivery/cd_utils.py +0 -0
  22. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/continuous_delivery/github.py +0 -0
  23. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/continuous_delivery/modrinth.py +0 -0
  24. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/continuous_delivery/pmc.py +0 -0
  25. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/continuous_delivery/smithed.py +0 -0
  26. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/__init__.py +0 -0
  27. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/balancing.py +0 -0
  28. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/batteries.py +0 -0
  29. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/cables.py +0 -0
  30. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant.json +0 -0
  31. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_d.json +0 -0
  32. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_de.json +0 -0
  33. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dew.json +0 -0
  34. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dn.json +0 -0
  35. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dne.json +0 -0
  36. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnew.json +0 -0
  37. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dns.json +0 -0
  38. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnse.json +0 -0
  39. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsew.json +0 -0
  40. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsw.json +0 -0
  41. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnw.json +0 -0
  42. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ds.json +0 -0
  43. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dse.json +0 -0
  44. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsew.json +0 -0
  45. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsw.json +0 -0
  46. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dw.json +0 -0
  47. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_e.json +0 -0
  48. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ew.json +0 -0
  49. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_n.json +0 -0
  50. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ne.json +0 -0
  51. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_new.json +0 -0
  52. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ns.json +0 -0
  53. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nse.json +0 -0
  54. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsew.json +0 -0
  55. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsw.json +0 -0
  56. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nw.json +0 -0
  57. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_s.json +0 -0
  58. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_se.json +0 -0
  59. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sew.json +0 -0
  60. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sw.json +0 -0
  61. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_u.json +0 -0
  62. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ud.json +0 -0
  63. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ude.json +0 -0
  64. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udew.json +0 -0
  65. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udn.json +0 -0
  66. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udne.json +0 -0
  67. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnew.json +0 -0
  68. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udns.json +0 -0
  69. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnse.json +0 -0
  70. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsew.json +0 -0
  71. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsw.json +0 -0
  72. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnw.json +0 -0
  73. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uds.json +0 -0
  74. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udse.json +0 -0
  75. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsew.json +0 -0
  76. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsw.json +0 -0
  77. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udw.json +0 -0
  78. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ue.json +0 -0
  79. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uew.json +0 -0
  80. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_un.json +0 -0
  81. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_une.json +0 -0
  82. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unew.json +0 -0
  83. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uns.json +0 -0
  84. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unse.json +0 -0
  85. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsew.json +0 -0
  86. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsw.json +0 -0
  87. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unw.json +0 -0
  88. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_us.json +0 -0
  89. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_use.json +0 -0
  90. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usew.json +0 -0
  91. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usw.json +0 -0
  92. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uw.json +0 -0
  93. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_cable_models/variant_w.json +0 -0
  94. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/energy_lib_calls.py +0 -0
  95. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/gui.py +0 -0
  96. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/item_cable_models/cable.bbmodel +0 -0
  97. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/item_cable_models/cable_base.json +0 -0
  98. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/py.typed +0 -0
  99. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/base_block.json +0 -0
  100. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/base_item.json +0 -0
  101. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_block.json +0 -0
  102. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_connected.json +0 -0
  103. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_item.json +0 -0
  104. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_block.json +0 -0
  105. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_connected.json +0 -0
  106. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_item.json +0 -0
  107. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/contrib/simplenergy/wrench.py +0 -0
  108. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/__init__.py +0 -0
  109. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/__memory__.py +0 -0
  110. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/__init__.py +0 -0
  111. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/equipments.py +0 -0
  112. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/materials.py +0 -0
  113. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/records.py +0 -0
  114. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/simplenergy.py +0 -0
  115. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/smart_ore_generation.py +0 -0
  116. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/definitions_helper/text.py +0 -0
  117. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/ingredients.py +0 -0
  118. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/utils/io.py +0 -0
  119. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/core/utils/sounds.py +0 -0
  120. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/__init__.py +0 -0
  121. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/bookshelf.py +0 -0
  122. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/bookshelf_config.json +0 -0
  123. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
  124. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
  125. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
  126. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
  127. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
  128. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
  129. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
  130. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
  131. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
  132. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
  133. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
  134. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
  135. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
  136. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
  137. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
  138. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
  139. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
  140. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
  141. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
  142. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
  143. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
  144. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
  145. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
  146. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
  147. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
  148. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
  149. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
  150. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
  151. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
  152. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
  153. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
  154. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
  155. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
  156. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/archive/__init__.py +0 -0
  157. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/auto/headers/__init__.py +0 -0
  158. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/auto/headers/context_analyzer.py +0 -0
  159. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/auto/headers/execution_parser.py +0 -0
  160. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/auto/headers/function_analyzer.py +0 -0
  161. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/auto/headers/object.py +0 -0
  162. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/auto/lang_file/__init__.py +0 -0
  163. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/auto/lang_file/utils.py +0 -0
  164. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
  165. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
  166. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
  167. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
  168. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/custom_paintings/__init__.py +0 -0
  169. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
  170. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
  171. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/custom_recipes/pulverizer.py +0 -0
  172. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
  173. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
  174. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/custom_blocks/__init__.py +0 -0
  175. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/loading/__init__.py +0 -0
  176. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
  177. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/sorters/__init__.py +0 -0
  178. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/sorters/constants.py +0 -0
  179. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/sorters/extend_datapack.py +0 -0
  180. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/sorters/match.py +0 -0
  181. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/sorters/mod.mcdoc +0 -0
  182. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/sorters/quick_sort.py +0 -0
  183. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/datapack/sorters/selection_sort.py +0 -0
  184. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
  185. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +0 -0
  186. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
  187. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/finalyze/dependencies/__init__.py +0 -0
  188. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/finalyze/last_final/__init__.py +0 -0
  189. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
  190. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
  191. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
  192. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
  193. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
  194. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/mining.png +0 -0
  195. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
  196. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
  197. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
  198. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
  199. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
  200. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
  201. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/stonecutting.png +0 -0
  202. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
  203. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
  204. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
  205. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/wiki_mining_template.png +0 -0
  206. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
  207. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/book_components.py +0 -0
  208. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
  209. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/image_utils.py +0 -0
  210. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/iso_renders.py +0 -0
  211. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/other_utils.py +0 -0
  212. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
  213. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/showcase_image.py +0 -0
  214. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
  215. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
  216. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
  217. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
  218. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
  219. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
  220. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
  221. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/mining.png +0 -0
  222. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
  223. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
  224. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
  225. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
  226. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
  227. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
  228. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/stonecutting.png +0 -0
  229. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
  230. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
  231. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
  232. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/wiki_mining_template.png +0 -0
  233. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
  234. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
  235. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/initialize/source_lore_font.py +0 -0
  236. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
  237. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
  238. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
  239. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
  240. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/resource_pack/item_models/object.py +0 -0
  241. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
  242. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/plugins/verify_definitions/__init__.py +0 -0
  243. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/py.typed +0 -0
  244. {stewbeet-2.2.17 → stewbeet-2.2.19}/stewbeet/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stewbeet
3
- Version: 2.2.17
3
+ Version: 2.2.19
4
4
  Summary: Beet Framework made to help generating advanced Minecraft datapack contents
5
5
  Project-URL: Homepage, https://github.com/Stoupy51/stewbeet
6
6
  Project-URL: Issues, https://github.com/Stoupy51/stewbeet/issues
@@ -11,14 +11,14 @@ Classifier: License :: OSI Approved :: MIT License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3
13
13
  Requires-Python: >=3.12
14
- Requires-Dist: beet>=0.111.0
14
+ Requires-Dist: beet>=0.112.0
15
15
  Requires-Dist: bolt>=0.49.2
16
16
  Requires-Dist: mecha>=0.99.0
17
- Requires-Dist: model-resolver>=1.11.0
17
+ Requires-Dist: model-resolver>=1.11.1
18
18
  Requires-Dist: mutagen>=1.47.0
19
19
  Requires-Dist: pyperclip>=1.8.0
20
20
  Requires-Dist: smithed>=0.19.0
21
- Requires-Dist: stouputils>=1.3.20
21
+ Requires-Dist: stouputils>=1.4.1
22
22
  Description-Content-Type: text/markdown
23
23
 
24
24
 
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
 
6
6
  [project]
7
7
  name = "stewbeet"
8
- version = "2.2.17"
8
+ version = "2.2.19"
9
9
  description = "Beet Framework made to help generating advanced Minecraft datapack contents"
10
10
  readme = "README.md"
11
11
  license = "MIT"
@@ -16,9 +16,9 @@ classifiers = [
16
16
  "Operating System :: OS Independent",
17
17
  ]
18
18
  dependencies = [
19
- "stouputils>=1.3.20",
20
- "model_resolver>=1.11.0",
21
- "beet>=0.111.0",
19
+ "stouputils>=1.4.1",
20
+ "model_resolver>=1.11.1",
21
+ "beet>=0.112.0",
22
22
  "bolt>=0.49.2",
23
23
  "mecha>=0.99.0",
24
24
  "smithed>=0.19.0",
@@ -5,27 +5,23 @@ import os
5
5
  import shutil
6
6
  import subprocess
7
7
  import sys
8
- from importlib.metadata import version
9
8
 
10
9
  from beet import ProjectConfig
11
10
  from stouputils.decorators import LogLevels, handle_error
12
- from stouputils.print import GREEN, RED, RESET, info
11
+ from stouputils.print import GREEN, RED, info, show_version
13
12
 
14
13
  from .utils import get_project_config
15
14
 
16
15
 
17
16
  @handle_error(message="Error while running 'stewbeet'")
18
17
  def main():
19
- second_arg: str = sys.argv[1] if len(sys.argv) == 2 else ""
18
+ second_arg: str = sys.argv[1].lower() if len(sys.argv) == 2 else ""
20
19
  if second_arg == "" and len(sys.argv) == 1:
21
20
  sys.argv.append("build")
22
21
 
23
22
  # Print the version of stewbeet, beet, bolt, mecha, and stouputils
24
- if second_arg == "--version":
25
- for pkg in ["stewbeet", "beet", "bolt", "mecha", "smithed", "model_resolver", "stouputils"]:
26
- v: str = version(pkg).split("version: ")[-1]
27
- print(f"{RED}{pkg} {GREEN}v{v}{RESET}")
28
- return
23
+ if second_arg in ("--version", "-v", "version"):
24
+ return show_version("stewbeet", primary_color=RED, secondary_color=GREEN)
29
25
 
30
26
  # Try to find and load the beet configuration file
31
27
  cfg: ProjectConfig = get_project_config()
@@ -3,11 +3,12 @@
3
3
  # Imports
4
4
  from beet.core.utils import JsonDict
5
5
  from beet.library import base
6
+ from beet.toolchain.config import FormatSpecifier
6
7
 
7
8
  from ..dependencies.bookshelf import BOOKSHELF_MODULES
8
9
 
9
10
  # Minecraft version specific constants
10
- MORE_DATA_PACK_FORMATS: dict[tuple[int, ...], int] = {
11
+ MORE_DATA_PACK_FORMATS: dict[tuple[int, ...], FormatSpecifier] = {
11
12
  (1, 21): 48,
12
13
  (1, 21, 0): 48,
13
14
  (1, 21, 1): 48,
@@ -18,10 +19,10 @@ MORE_DATA_PACK_FORMATS: dict[tuple[int, ...], int] = {
18
19
  (1, 21, 6): 80,
19
20
  (1, 21, 7): 81,
20
21
  (1, 21, 8): 81,
21
- (1, 21, 9): 88,
22
- (1, 21, 10): 88,
22
+ (1, 21, 9): (88, 0),
23
+ (1, 21, 10): (88, 0),
23
24
  }
24
- MORE_ASSETS_PACK_FORMATS: dict[tuple[int, ...], int] = {
25
+ MORE_ASSETS_PACK_FORMATS: dict[tuple[int, ...], FormatSpecifier] = {
25
26
  (1, 21): 34,
26
27
  (1, 21, 0): 34,
27
28
  (1, 21, 1): 34,
@@ -32,8 +33,8 @@ MORE_ASSETS_PACK_FORMATS: dict[tuple[int, ...], int] = {
32
33
  (1, 21, 6): 63,
33
34
  (1, 21, 7): 64,
34
35
  (1, 21, 8): 64,
35
- (1, 21, 9): 69,
36
- (1, 21, 10): 69,
36
+ (1, 21, 9): (69, 0),
37
+ (1, 21, 10): (69, 0),
37
38
  }
38
39
  MORE_DATA_VERSIONS: dict[tuple[int, ...], int] = {
39
40
  (1, 21): 3953,
@@ -78,13 +78,18 @@ def add_item_name_and_lore_if_missing(is_external: bool = False, black_list: lis
78
78
  return
79
79
 
80
80
  # Add private custom data for namespace
81
- def add_private_custom_data_for_namespace(is_external: bool = False) -> None:
81
+ def add_private_custom_data_for_namespace(is_external: bool = False, black_list: list[str] | None = None) -> None:
82
82
  """ Add private custom data for namespace to all items in the definitions if they are missing.
83
83
 
84
84
  Args:
85
85
  is_external (bool): Whether the definitions is the external one or not (meaning the namespace is in the item name).
86
+ black_list (list[str]): The list of items to ignore.
86
87
  """
88
+ if black_list is None:
89
+ black_list = []
87
90
  for item, data in Mem.definitions.items():
91
+ if item in black_list:
92
+ continue
88
93
  if not data.get("custom_data"):
89
94
  data["custom_data"] = cast(JsonDict, {})
90
95
  if is_external and ":" in item:
@@ -36,7 +36,7 @@ def beet_default(ctx: Context):
36
36
  stewbeet: JsonDict = ctx.meta.get("stewbeet", {})
37
37
  assert stewbeet, "stewbeet configuration is not set. Please set it in the project configuration."
38
38
  assert stewbeet.get("textures_folder"), "Textures folder is not set. Please set it in the project configuration."
39
- manual_config = stewbeet.get("manual", {})
39
+ manual_config: JsonDict = stewbeet.get("manual", {})
40
40
  assert manual_config, "Manual configuration is not set. Please set it in the project configuration."
41
41
 
42
42
  # Set up manual path
@@ -46,6 +46,9 @@ def beet_default(ctx: Context):
46
46
  # Set up high resolution in the shared_import module
47
47
  SharedMemory.high_resolution = manual_config.get("high_resolution", True)
48
48
 
49
+ # Set up use_dialog in the shared_import module
50
+ SharedMemory.use_dialog = manual_config.get("use_dialog", 0)
51
+
49
52
  # Call the main manual generation function
50
53
  manual_main()
51
54
 
@@ -8,11 +8,11 @@ from ...core.ingredients import FURNACES_RECIPES_TYPES, ingr_to_id
8
8
  from .book_components import get_item_component
9
9
  from .other_utils import convert_shapeless_to_shaped, high_res_font_from_craft
10
10
  from .page_font import generate_page_font
11
- from .shared_import import FONT_FILE, INVISIBLE_ITEM_WIDTH, MICRO_NONE_FONT, SMALL_NONE_FONT, VERY_SMALL_NONE_FONT, SharedMemory
11
+ from .shared_import import FONT_FILE, INVISIBLE_ITEM_WIDTH, MICRO_NONE_FONT, NONE_FONT, SMALL_NONE_FONT, VERY_SMALL_NONE_FONT, SharedMemory
12
12
 
13
13
 
14
14
  # Generate all craft types content
15
- def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[TextComponent]:
15
+ def generate_craft_content(craft: JsonDict, name: str, page_font: str, in_lore: bool = False) -> list[TextComponent]:
16
16
  """ Generate the content for the craft type
17
17
  Args:
18
18
  craft (JsonDict): The craft dictionary, ex: {"type": "crafting_shaped","result_count": 1,"category": "equipment","shape": ["XXX","X X"],"ingredients": {"X": {"components": {"custom_data": {"iyc": {"adamantium": true}}}}}}
@@ -32,11 +32,13 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
32
32
  # If high resolution, get proper page font
33
33
  if SharedMemory.high_resolution:
34
34
  page_font = high_res_font_from_craft(craft)
35
+ use_dialog: bool = SharedMemory.use_dialog > 0 and not in_lore # In lore, we don't need to re-align the content
35
36
 
36
37
  # Show up item title and page font
37
38
  titled = name.replace("_", " ").title() + "\n"
38
39
  content.append({"text": titled, "font": "minecraft:default", "color": "black", "underlined": True})
39
- content.append(SMALL_NONE_FONT + page_font + "\n")
40
+ padding: str = MICRO_NONE_FONT if use_dialog else ""
41
+ content.append(SMALL_NONE_FONT + padding + page_font + "\n")
40
42
 
41
43
  # Generate the image for the page
42
44
  generate_page_font(name, page_font, craft)
@@ -55,6 +57,7 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
55
57
  # If the craft is shaped
56
58
  if craft_type == "crafting_shaped":
57
59
  shape: list[str] = craft["shape"]
60
+ is_small_craft: bool = len(shape) <= 2 and all(len(x) <= 2 for x in shape)
58
61
 
59
62
  # Convert each ingredients to its text component
60
63
  formatted_ingredients: dict[str, JsonDict] = {}
@@ -72,7 +75,7 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
72
75
  shape = [" " + line + " " for line in shape]
73
76
 
74
77
  # Add each ingredient to the craft
75
- for line in shape:
78
+ for index, line in enumerate(shape):
76
79
  for i in range(2): # We need two lines to make a square, otherwise it will be a rectangle
77
80
  content.append(SMALL_NONE_FONT)
78
81
  for k in line:
@@ -85,13 +88,16 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
85
88
  copy = formatted_ingredients[k].copy()
86
89
  copy["text"] = INVISIBLE_ITEM_WIDTH
87
90
  content.append(copy)
91
+ if use_dialog and index != 1 and (not is_small_craft or i != 1):
92
+ content.append(INVISIBLE_ITEM_WIDTH * max(0, (2 if is_small_craft else 3) - len(line)))
93
+ content.append(NONE_FONT * 2)
88
94
  content.append("\n")
89
95
  if len(shape) == 1 and len(shape[0]) < 3:
90
96
  content.append("\n")
91
97
  pass
92
98
 
93
99
  # Add the result to the craft
94
- if len(shape) <= 2 and len(shape[0]) <= 2:
100
+ if is_small_craft:
95
101
 
96
102
  # First layer of the square
97
103
  len_1 = len(shape[0])
@@ -99,6 +105,9 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
99
105
  break_line_pos = content.index("\n", content.index("\n") + 1) # Find the second line break
100
106
  content.insert(break_line_pos, (INVISIBLE_ITEM_WIDTH * offset_1))
101
107
  content.insert(break_line_pos + 1, result_component)
108
+ if use_dialog:
109
+ content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
110
+ break_line_pos += 1
102
111
 
103
112
  # Second layer of the square
104
113
  len_2 = len(shape[1]) if len(shape) > 1 else 0
@@ -110,6 +119,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
110
119
  copy = result_component.copy()
111
120
  copy["text"] = INVISIBLE_ITEM_WIDTH
112
121
  content.insert(break_line_pos + 1, copy)
122
+ if use_dialog:
123
+ content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
113
124
  else:
114
125
  # First layer of the square
115
126
  len_line = len(shape[1]) if len(shape) > 1 else 0
@@ -122,6 +133,9 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
122
133
  break_line_pos = len(content)
123
134
  content.insert(break_line_pos, (INVISIBLE_ITEM_WIDTH * (offset - 1) + SMALL_NONE_FONT * 2))
124
135
  content.insert(break_line_pos + 1, result_component)
136
+ if use_dialog:
137
+ content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
138
+ break_line_pos += 1
125
139
 
126
140
  # Second layer of the square
127
141
  try:
@@ -133,6 +147,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
133
147
  copy = result_component.copy()
134
148
  copy["text"] = INVISIBLE_ITEM_WIDTH
135
149
  content.insert(break_line_pos + 1, copy)
150
+ if use_dialog:
151
+ content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
136
152
 
137
153
  # Add break lines for the third layer of a 3x3 craft
138
154
  if len(shape) < 3 and len(shape[0]) == 3:
@@ -167,6 +183,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
167
183
  copy = result_component.copy()
168
184
  copy["text"] = INVISIBLE_ITEM_WIDTH
169
185
  content.append(copy)
186
+ if use_dialog:
187
+ content.append(VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
170
188
  content.append("\n")
171
189
  content.append("\n\n")
172
190
 
@@ -291,6 +309,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
291
309
  copy = result_component.copy()
292
310
  copy["text"] = INVISIBLE_ITEM_WIDTH
293
311
  content.append(copy)
312
+ if use_dialog:
313
+ content.append(VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
294
314
  content.append("\n")
295
315
  content.append("\n")
296
316
  pass
@@ -0,0 +1,140 @@
1
+ """
2
+ Handles generation of dialogs based of book content
3
+ """
4
+ from beet import Advancement, Dialog, DialogTag
5
+ from beet.core.utils import JsonDict, TextComponent
6
+
7
+ from ...core import Mem, set_json_encoder, write_function, write_load_file
8
+ from .shared_import import BOOK_FONT, NONE_FONT, SharedMemory
9
+
10
+
11
+ # Utility Function
12
+ def change_page_to_show_dialog(element: TextComponent, ns: str) -> None:
13
+ if isinstance(element, dict) and "click_event" in element and element["click_event"]["action"] == "change_page":
14
+ change_page: int = element["click_event"]["page"]
15
+ element["click_event"] = {"action": "show_dialog", "dialog": f"{ns}:manual/page_{change_page}"}
16
+ elif isinstance(element, list):
17
+ for sub_element in element:
18
+ change_page_to_show_dialog(sub_element, ns)
19
+
20
+ # Function
21
+ def generate_dialogs(book_content: list[list[TextComponent]]) -> None:
22
+ ns: str = Mem.ctx.project_id
23
+
24
+ # Generate dialogs for each page
25
+ dialog_ids: list[str] = []
26
+ for page_index, page in enumerate(book_content):
27
+ dialog_id: str = f"manual/page_{page_index + 1}"
28
+ dialog_ids.append(f"{ns}:{dialog_id}")
29
+
30
+ # Previous and next page indexes
31
+ prev_index: int = page_index - 1 if page_index > 0 else 0
32
+ next_index: int = page_index + 1 if page_index + 1 < len(book_content) else page_index
33
+ prev_dialog_id: str = f"{ns}:manual/page_{prev_index + 1}"
34
+ next_dialog_id: str = f"{ns}:manual/page_{next_index + 1}"
35
+
36
+ # Get title
37
+ title: TextComponent = page[1]
38
+ if isinstance(title, dict):
39
+ title = str(title.get("text", "")).replace("\n", "")
40
+ else:
41
+ title = str(title).replace("\n", "")
42
+ if len(title.strip()) < 2:
43
+ title = page[2]
44
+ if isinstance(title, dict):
45
+ title = str(title.get("text", "")).replace("\n", "")
46
+ page = page[:1] + page[2:] # Remove title from body if taken from body
47
+
48
+ # Generate the new body content
49
+ new_content: list[TextComponent] = [{"text":"","font": f"{ns}:manual", "color": "white", "shadow_color": [0]*4}] # Initial font and color
50
+ if len(page) > 2:
51
+ page = page[2:] # Remove first two elements
52
+
53
+ # Modify click events to show dialog instead of changing page
54
+ change_page_to_show_dialog(page, ns)
55
+
56
+ # Add to new content
57
+ new_content.extend(page)
58
+
59
+ # Add padding to avoid texture cutoff
60
+ def count_breaklines(element: TextComponent) -> int:
61
+ if isinstance(element, dict):
62
+ return count_breaklines(element.get("text", ""))
63
+ elif isinstance(element, list):
64
+ return sum(count_breaklines(sub_element) for sub_element in element)
65
+ return str(element).count("\n")
66
+ nb_breaklines_to_add: int = max(0, 20 - count_breaklines(new_content))
67
+ if nb_breaklines_to_add > 0:
68
+ new_content.append("\n"*nb_breaklines_to_add)
69
+
70
+ # Create dialog
71
+ dialog: JsonDict = {
72
+ "type": "minecraft:notice",
73
+ "title": {"text": title, "underlined": True},
74
+ "body": [
75
+ {
76
+ "type": "minecraft:plain_message",
77
+ "contents": [
78
+ {"text": BOOK_FONT + NONE_FONT*3, "font": f"{ns}:manual", "color": "white"},
79
+ *(2 * [
80
+ {"text": "\n" + NONE_FONT*3, "click_event": {"action": "show_dialog", "dialog": prev_dialog_id},
81
+ "hover_event": {"action": "show_text", "value": [{"text": "Go to previous page"}, {"text": f" ({prev_index + 1})"}]}},
82
+ NONE_FONT,
83
+ {"text": NONE_FONT*3, "click_event": {"action": "show_dialog", "dialog": next_dialog_id},
84
+ "hover_event": {"action": "show_text", "value": [{"text": "Go to next page"}, {"text": f" ({next_index + 1})"}]}}
85
+ ])
86
+ ],
87
+ "width": 400
88
+ },
89
+ {
90
+ "type": "minecraft:plain_message",
91
+ "contents": new_content,
92
+ "width": 150
93
+ }
94
+ ],
95
+ }
96
+ Mem.ctx.data[ns].dialogs[dialog_id] = set_json_encoder(Dialog(dialog), max_level=4)
97
+ pass
98
+
99
+ # Generate an advancement detecting when the manual is opened
100
+ if SharedMemory.use_dialog != 2:
101
+ write_load_file(f"# Opening manual detection\nscoreboard objectives add {ns}.open_manual minecraft.used:minecraft.written_book")
102
+ Mem.ctx.data[ns].advancements["open_manual"] = set_json_encoder(Advancement({
103
+ "criteria": {
104
+ "requirement": {
105
+ "trigger": "minecraft:tick",
106
+ "conditions": {
107
+ "player": [
108
+ {
109
+ "condition": "minecraft:entity_scores",
110
+ "entity": "this",
111
+ "scores": {f"{ns}.open_manual": {"min": 1}}
112
+ }
113
+ ]
114
+ }
115
+ }
116
+ },
117
+ "rewards": {
118
+ "function": f"{ns}:advancements/open_manual"
119
+ }
120
+ }), max_level=-1)
121
+ write_function(f"{ns}:advancements/open_manual", f"""
122
+ # Revoke advancement and reset score
123
+ advancement revoke @s only {ns}:open_manual
124
+ scoreboard players set @s {ns}.open_manual 0
125
+
126
+ # Show manual dialog if holding the manual
127
+ execute if items entity @s weapon.* *[custom_data~{{{ns}:{{manual:true}}}}] run dialog show @s {ns}:manual/page_1
128
+ """)
129
+
130
+ # Generate main dialog to open the manual
131
+ Mem.ctx.data["minecraft"].dialogs_tags["quick_actions"] = set_json_encoder(
132
+ DialogTag({"replace": False, "values": [f"{ns}:all_manual"]})
133
+ )
134
+ Mem.ctx.data[ns].dialogs["all_manual"] = set_json_encoder(Dialog({
135
+ "type": "minecraft:dialog_list",
136
+ "title": {"text": f"{Mem.ctx.project_name} Manual"},
137
+ "dialogs": dialog_ids,
138
+ "exit_action": {"label": {"translate": "gui.back"}, "width": 200}
139
+ }))
140
+