stewbeet 2.0.22__tar.gz → 2.0.24__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 (212) hide show
  1. {stewbeet-2.0.22 → stewbeet-2.0.24}/PKG-INFO +1 -1
  2. {stewbeet-2.0.22 → stewbeet-2.0.24}/pyproject.toml +1 -1
  3. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/balancing.py +1 -1
  4. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cables.py +1 -1
  5. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/gui.py +1 -1
  6. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/completion.py +1 -1
  7. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/utils/io.py +19 -8
  8. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/archive/__init__.py +9 -2
  9. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/finalyze/dependencies/__init__.py +1 -1
  10. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/image_utils.py +3 -3
  11. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/main.py +6 -0
  12. stewbeet-2.0.24/stewbeet/plugins/ingame_manual/showcase_image.py +130 -0
  13. {stewbeet-2.0.22 → stewbeet-2.0.24}/.gitignore +0 -0
  14. {stewbeet-2.0.22 → stewbeet-2.0.24}/LICENSE +0 -0
  15. {stewbeet-2.0.22 → stewbeet-2.0.24}/README.md +0 -0
  16. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/__init__.py +0 -0
  17. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/__main__.py +0 -0
  18. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/all.py +0 -0
  19. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/cli.py +0 -0
  20. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/continuous_delivery/__init__.py +0 -0
  21. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/continuous_delivery/cd_utils.py +0 -0
  22. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/continuous_delivery/github.py +0 -0
  23. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/continuous_delivery/modrinth.py +0 -0
  24. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/continuous_delivery/pmc.py +0 -0
  25. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/continuous_delivery/smithed.py +0 -0
  26. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/__init__.py +0 -0
  27. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/batteries.py +0 -0
  28. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant.json +0 -0
  29. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_d.json +0 -0
  30. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_de.json +0 -0
  31. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dew.json +0 -0
  32. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dn.json +0 -0
  33. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dne.json +0 -0
  34. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dnew.json +0 -0
  35. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dns.json +0 -0
  36. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dnse.json +0 -0
  37. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dnsew.json +0 -0
  38. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dnsw.json +0 -0
  39. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dnw.json +0 -0
  40. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_ds.json +0 -0
  41. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dse.json +0 -0
  42. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dsew.json +0 -0
  43. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dsw.json +0 -0
  44. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_dw.json +0 -0
  45. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_e.json +0 -0
  46. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_ew.json +0 -0
  47. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_n.json +0 -0
  48. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_ne.json +0 -0
  49. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_new.json +0 -0
  50. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_ns.json +0 -0
  51. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_nse.json +0 -0
  52. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_nsew.json +0 -0
  53. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_nsw.json +0 -0
  54. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_nw.json +0 -0
  55. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_s.json +0 -0
  56. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_se.json +0 -0
  57. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_sew.json +0 -0
  58. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_sw.json +0 -0
  59. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_u.json +0 -0
  60. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_ud.json +0 -0
  61. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_ude.json +0 -0
  62. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udew.json +0 -0
  63. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udn.json +0 -0
  64. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udne.json +0 -0
  65. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udnew.json +0 -0
  66. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udns.json +0 -0
  67. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udnse.json +0 -0
  68. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udnsew.json +0 -0
  69. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udnsw.json +0 -0
  70. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udnw.json +0 -0
  71. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_uds.json +0 -0
  72. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udse.json +0 -0
  73. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udsew.json +0 -0
  74. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udsw.json +0 -0
  75. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_udw.json +0 -0
  76. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_ue.json +0 -0
  77. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_uew.json +0 -0
  78. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_un.json +0 -0
  79. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_une.json +0 -0
  80. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_unew.json +0 -0
  81. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_uns.json +0 -0
  82. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_unse.json +0 -0
  83. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_unsew.json +0 -0
  84. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_unsw.json +0 -0
  85. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_unw.json +0 -0
  86. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_us.json +0 -0
  87. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_use.json +0 -0
  88. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_usew.json +0 -0
  89. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_usw.json +0 -0
  90. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_uw.json +0 -0
  91. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/cable_models/variant_w.json +0 -0
  92. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/energy_lib_calls.py +0 -0
  93. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/contrib/simplenergy/wrench.py +0 -0
  94. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/__init__.py +0 -0
  95. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/__memory__.py +0 -0
  96. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/constants.py +0 -0
  97. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/__init__.py +0 -0
  98. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/equipments.py +0 -0
  99. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/materials.py +0 -0
  100. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/records.py +0 -0
  101. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/simplenergy.py +0 -0
  102. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/smart_ore_generation.py +0 -0
  103. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/definitions_helper/text.py +0 -0
  104. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/ingredients.py +0 -0
  105. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/core/utils/sounds.py +0 -0
  106. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/__init__.py +0 -0
  107. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/bookshelf.py +0 -0
  108. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/bookshelf_config.json +0 -0
  109. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
  110. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
  111. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
  112. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
  113. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
  114. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
  115. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
  116. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
  117. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
  118. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
  119. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
  120. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
  121. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
  122. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
  123. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
  124. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
  125. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
  126. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
  127. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
  128. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
  129. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
  130. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
  131. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
  132. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
  133. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
  134. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
  135. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
  136. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
  137. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
  138. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
  139. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
  140. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
  141. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
  142. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/auto/headers/__init__.py +0 -0
  143. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/auto/headers/object.py +0 -0
  144. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/auto/lang_file/__init__.py +0 -0
  145. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/auto/lang_file/utils.py +0 -0
  146. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
  147. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
  148. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
  149. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
  150. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
  151. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
  152. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/custom_recipes/pulverizer.py +0 -0
  153. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
  154. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
  155. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/datapack/custom_blocks/__init__.py +0 -0
  156. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/datapack/loading/__init__.py +0 -0
  157. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
  158. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
  159. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +0 -0
  160. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
  161. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/finalyze/last_final/__init__.py +0 -0
  162. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/__init__.py +0 -0
  163. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
  164. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
  165. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
  166. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
  167. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
  168. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
  169. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
  170. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
  171. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
  172. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
  173. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
  174. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
  175. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
  176. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
  177. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
  178. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/book_components.py +0 -0
  179. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
  180. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/craft_content.py +0 -0
  181. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/iso_renders.py +0 -0
  182. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/other_utils.py +0 -0
  183. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
  184. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/shared_import.py +0 -0
  185. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
  186. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
  187. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
  188. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
  189. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
  190. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
  191. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
  192. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
  193. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
  194. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
  195. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
  196. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
  197. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
  198. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
  199. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
  200. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
  201. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
  202. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
  203. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/initialize/__init__.py +0 -0
  204. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/initialize/source_lore_font.py +0 -0
  205. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
  206. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
  207. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
  208. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
  209. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/resource_pack/item_models/object.py +0 -0
  210. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
  211. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/plugins/verify_definitions/__init__.py +0 -0
  212. {stewbeet-2.0.22 → stewbeet-2.0.24}/stewbeet/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stewbeet
3
- Version: 2.0.22
3
+ Version: 2.0.24
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
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
 
6
6
  [project]
7
7
  name = "stewbeet"
8
- version = "2.0.22"
8
+ version = "2.0.24"
9
9
  description = "Beet Framework made to help generating advanced Minecraft datapack contents"
10
10
  readme = "README.md"
11
11
  license = "MIT"
@@ -90,5 +90,5 @@ execute if score @s energy.storage > @s energy.max_storage run scoreboard player
90
90
 
91
91
  # Add in the placement function the balancing tag
92
92
  for device in can_balance:
93
- write_function(f"{ns}:custom_blocks/{device}/place_secondary", f"\n# Add balancing tag\ntag @s add {can_balance_tag}")
93
+ write_function(f"{ns}:custom_blocks/{device}/place_secondary", f"\n# Add balancing tag\ntag @s add {can_balance_tag}\n")
94
94
 
@@ -42,7 +42,7 @@ def setup_cables_models(cables: list[str]) -> None:
42
42
  # Create the new json
43
43
  new_json: dict = {
44
44
  "parent": f"{ns}:block/cable_base",
45
- "textures": {"0": f"{ns}:block/{cable}"}
45
+ "textures": {"0": f"{ns}:block/{cable}", "particle": f"{ns}:block/{cable}"},
46
46
  }
47
47
  new_json.update(json_file)
48
48
 
@@ -62,7 +62,7 @@ def setup_gui_in_resource_packs(gui_translations: dict[str, GuiTranslation]) ->
62
62
  }
63
63
  for gui, model in gui_models.items():
64
64
  content: dict = json.loads(json.dumps(base)) # Deep copy the base model
65
- content["textures"]["layer0"] = model.replace(":", ":item/")
65
+ content["textures"]["layer0"] = content["textures"]["particle"] = model.replace(":", ":item/")
66
66
 
67
67
  # If any translation is provided, add it to the model
68
68
  for item, translation in gui_translations.items():
@@ -50,7 +50,7 @@ def add_item_name_and_lore_if_missing(is_external: bool = False, black_list: lis
50
50
  item_str: str = item.replace("_"," ").title()
51
51
  else:
52
52
  item_str: str = item.split(":")[-1].replace("_"," ").title()
53
- data["item_name"] = item_str
53
+ data["item_name"] = {"text": item_str} # Use a TextComponent to allow auto.lang_file to work properly
54
54
 
55
55
  # Apply namespaced lore if none
56
56
  if not data.get("lore"):
@@ -2,7 +2,7 @@
2
2
  # Imports
3
3
  from typing import Any
4
4
 
5
- from beet import Function, FunctionTag, JsonFile
5
+ from beet import Function, JsonFile, NamespaceContainer, NamespaceProxy, TagFile
6
6
  from beet.core.utils import JsonDict
7
7
  from stouputils.collections import unique_list
8
8
  from stouputils.io import super_json_dump
@@ -11,28 +11,39 @@ from ..__memory__ import Mem
11
11
 
12
12
 
13
13
  # Functions
14
- def write_function_tag(path: str, functions: list[Any] | None = None, prepend: bool = False) -> None:
14
+ def write_tag(path: str, tag_type: NamespaceProxy[TagFile] | NamespaceContainer[TagFile], values: list[Any] | None = None, prepend: bool = False) -> None:
15
15
  """ Write a function tag at the given path.
16
16
 
17
17
  Args:
18
18
  path (str): The path to the function tag (ex: "namespace:something" for 'data/namespace/tags/function/something.json')
19
- functions (list[Any] | None): The functions to add to the tag
20
- prepend (bool): If the functions should be prepended instead of appended
19
+ tag_type (NamespaceProxy[TagFile]): The tag type to write to (ex: ctx.data.function_tags)
20
+ values (list[Any] | None): The values to add to the tag
21
+ prepend (bool): If the values should be prepended instead of appended
21
22
  """
22
23
  if path.endswith(".json"):
23
24
  path = path[:-len(".json")]
24
- tag: FunctionTag = Mem.ctx.data.function_tags.setdefault(path)
25
+ tag: TagFile = tag_type.setdefault(path)
25
26
  data: JsonDict = tag.data
26
27
  if not data.get("values"):
27
- data["values"] = functions or []
28
+ data["values"] = values or []
28
29
 
29
30
  if prepend:
30
- data["values"] = functions + data["values"]
31
+ data["values"] = values + data["values"]
31
32
  else:
32
- data["values"].extend(functions or [])
33
+ data["values"].extend(values or [])
33
34
  data["values"] = unique_list(data["values"])
34
35
  tag.encoder = super_json_dump
35
36
 
37
+ def write_function_tag(path: str, functions: list[Any] | None = None, prepend: bool = False) -> None:
38
+ """ Write a function tag at the given path.
39
+
40
+ Args:
41
+ path (str): The path to the function tag (ex: "namespace:something" for 'data/namespace/tags/function/something.json')
42
+ functions (list[Any] | None): The functions to add to the tag
43
+ prepend (bool): If the functions should be prepended instead of appended
44
+ """
45
+ write_tag(path, Mem.ctx.data.function_tags, functions, prepend)
46
+
36
47
 
37
48
  def read_function(path: str) -> str:
38
49
  """ Read the content of a function at the given path.
@@ -71,8 +71,15 @@ def beet_default(ctx: Context) -> None:
71
71
  # This approach writes pack contents directly to a zip file without modifying the original pack structure
72
72
 
73
73
  # First pass: Create the zip file normally
74
- with zipfile.ZipFile(archive_path, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=6) as zip_file:
75
- pack.dump(zip_file)
74
+ for i in range(10):
75
+ try:
76
+ with zipfile.ZipFile(archive_path, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=6) as zip_file:
77
+ pack.dump(zip_file)
78
+ break
79
+ except Exception:
80
+ if i == 9:
81
+ raise
82
+ time.sleep(0.5)
76
83
 
77
84
  # Second pass: Read all contents and recreate with consistent timestamps
78
85
  # This is necessary because beet's dump() uses origin.open() which bypasses writestr() completely
@@ -209,7 +209,7 @@ execute if score #{ns}.major load.status matches {major} if score #{ns}.minor lo
209
209
  name: str = value["name"]
210
210
  url: str = value["url"]
211
211
  lib_version: str = ".".join(map(str, value["version"]))
212
- decoder_command: str = f'tellraw @a {{"text":"- [{name} (v{lib_version}+)]","color":"gold","clickEvent":{{"action":"open_url","value":"{url}"}}}}'
212
+ decoder_command: str = f'tellraw @a {{"text":"- [{name} (v{lib_version}+)]","color":"gold","click_event":{{"action":"open_url","url":"{url}"}}}}'
213
213
  decoder_checks += check_version(lib_ns, value, decoder_command)
214
214
 
215
215
  # Write check_dependencies.mcfunction
@@ -30,14 +30,14 @@ def load_simple_case_no_border(high_res: bool) -> Image.Image:
30
30
  return result
31
31
 
32
32
 
33
- def careful_resize(image: Image.Image, max_result_size: int) -> Image.Image:
33
+ def careful_resize(image: Image.Image, max_result_size: int, resampling: Image.Resampling = Image.Resampling.NEAREST) -> Image.Image:
34
34
  """Resize an image while keeping the aspect ratio"""
35
35
  if image.size[0] >= image.size[1]:
36
36
  factor = max_result_size / image.size[0]
37
- return image.resize((max_result_size, int(image.size[1] * factor)), Image.Resampling.NEAREST)
37
+ return image.resize((max_result_size, int(image.size[1] * factor)), resampling)
38
38
  else:
39
39
  factor = max_result_size / image.size[1]
40
- return image.resize((int(image.size[0] * factor), max_result_size), Image.Resampling.NEAREST)
40
+ return image.resize((int(image.size[0] * factor), max_result_size), resampling)
41
41
 
42
42
  def add_border(image: Image.Image, border_color: tuple[int, int, int, int], border_size: int, is_rectangle_shape: bool) -> Image.Image:
43
43
  """Add a border to every part of the image"""
@@ -78,6 +78,7 @@ from .shared_import import (
78
78
  get_page_font,
79
79
  get_page_number,
80
80
  )
81
+ from .showcase_image import generate_showcase_images
81
82
 
82
83
 
83
84
  # Utility functions
@@ -635,6 +636,11 @@ def routine():
635
636
  f.write(super_json_dump(book_content))
636
637
  debug(f"Debug book_content at '{relative_path(json_dump_path)}'")
637
638
 
639
+ # Generate showcase images if requested
640
+ showcase_image: int = manual_config.get("showcase_image", 3)
641
+ if showcase_image > 0:
642
+ generate_showcase_images(showcase_image, categories, simple_case)
643
+
638
644
 
639
645
  # Copy the font provider and the generated textures to the resource pack
640
646
  Mem.ctx.assets[Mem.ctx.project_id].fonts["manual"] = Font(source_path=f"{SharedMemory.cache_path}/font/manual.json")
@@ -0,0 +1,130 @@
1
+
2
+ # Imports
3
+ import os
4
+
5
+ from PIL import Image
6
+ from stouputils.io import relative_path
7
+ from stouputils.print import debug, warning
8
+
9
+ from ...core.__memory__ import Mem
10
+ from .image_utils import careful_resize
11
+ from .shared_import import SharedMemory
12
+
13
+
14
+ # Functions
15
+ def calculate_optimal_grid(item_count: int) -> tuple[int, int]:
16
+ """ Calculate optimal grid dimensions for a given number of items to achieve closest to 16:9 ratio
17
+
18
+ Args:
19
+ item_count (int): The total number of items to arrange in the grid.
20
+ Returns:
21
+ tuple[int, int]: The optimal number of rows and columns for the grid.
22
+ """
23
+ if item_count == 0:
24
+ return 0, 0
25
+
26
+ best_ratio_diff: float = float('inf')
27
+ best_rows, best_cols = 1, item_count
28
+ target_ratio: float = 16/9
29
+
30
+ # Try different configurations
31
+ for rows in range(1, item_count + 1):
32
+ cols: int = (item_count + rows - 1) // rows # Ceiling division
33
+ if rows * cols >= item_count:
34
+ ratio: float = cols / rows
35
+ ratio_diff: float = abs(ratio - target_ratio)
36
+ if ratio_diff < best_ratio_diff:
37
+ best_ratio_diff = ratio_diff
38
+ best_rows, best_cols = rows, cols
39
+
40
+ return best_rows, best_cols
41
+
42
+ def generate_showcase_images(showcase_mode: int, categories: dict[str, list], simple_case: Image.Image):
43
+ """ Generate showcase images based on the showcase_mode parameter
44
+
45
+ Args:
46
+ showcase_mode (int): Mode for generating showcase images:
47
+ 1 - Showcase items in the manual
48
+ 2 - Showcase all items, even those not in the manual
49
+ 3 - Showcase both manual items and all items
50
+ categories (dict[str, list]): Dictionary of categories with items.
51
+ simple_case (Image.Image): Image of a simple case to use as background for items.
52
+ """
53
+ # Get items for manual (mode 1 or 3)
54
+ if showcase_mode in [1, 3]:
55
+ manual_items: list[str] = []
56
+ for items in categories.values():
57
+ manual_items.extend(items)
58
+ if manual_items:
59
+ create_showcase_image(manual_items, "all_manual_items.jpg", simple_case)
60
+
61
+ # Get all items (mode 2 or 3)
62
+ if showcase_mode in [2, 3]:
63
+ all_items: list[str] = list(Mem.definitions.keys())
64
+ if all_items:
65
+ create_showcase_image(all_items, "all_items.jpg", simple_case)
66
+
67
+ def create_showcase_image(items: list[str], filename: str, simple_case: Image.Image):
68
+ """ Create a showcase image with items arranged in optimal grid for 16:9 ratio
69
+
70
+ Args:
71
+ items (list[str]): List of item IDs to include in the showcase.
72
+ filename (str): Name of the output image file.
73
+ simple_case (Image.Image): Image of a simple case to use as background for items.
74
+ """
75
+ if not items:
76
+ return
77
+
78
+ rows, cols = calculate_optimal_grid(len(items))
79
+
80
+ # Big case size to make sure textures are not distorted
81
+ case_size: int = 512
82
+
83
+ # Resize the simple case to match our calculated case size
84
+ resized_case: Image.Image = simple_case.resize((case_size, case_size), Image.Resampling.NEAREST)
85
+
86
+ # Calculate image dimensions with border
87
+ img_width: int = cols * case_size
88
+ img_height: int = rows * case_size
89
+
90
+ # Create image
91
+ showcase_image: Image.Image = Image.new("RGBA", (img_width, img_height), (0, 0, 0, 0))
92
+
93
+ # Place items
94
+ for i, item in enumerate(items):
95
+ row: int = i // cols
96
+ col: int = i % cols
97
+
98
+ x: int = col * case_size
99
+ y: int = row * case_size
100
+
101
+ # Get item texture
102
+ texture_path: str = f"{SharedMemory.cache_path}/items/{Mem.ctx.project_id}/{item}.png"
103
+ if os.path.exists(texture_path):
104
+ item_image: Image.Image = Image.open(texture_path)
105
+ else:
106
+ warning(f"Missing texture at '{texture_path}', using empty texture for showcase")
107
+ item_image: Image.Image = Image.new("RGBA", (1, 1), (0, 0, 0, 0))
108
+
109
+ # Resize item image to 89% of case size
110
+ target_size: int = int(case_size * (0.890625))
111
+ resized_item: Image.Image = careful_resize(item_image, target_size)
112
+
113
+ # Center the resized item image within the case
114
+ item_x: int = x + (case_size - resized_item.size[0]) // 2
115
+ item_y: int = y + (case_size - resized_item.size[1]) // 2
116
+
117
+ # Paste the resized case and the item image
118
+ showcase_image.paste(resized_case, (x, y))
119
+ if resized_item.mode == "RGBA":
120
+ mask: Image.Image = resized_item.split()[3]
121
+ showcase_image.paste(resized_item, (item_x, item_y), mask)
122
+ else:
123
+ showcase_image.paste(resized_item, (item_x, item_y))
124
+
125
+ # Save to output directory
126
+ os.makedirs(Mem.ctx.output_directory, exist_ok=True)
127
+ output_path = os.path.join(Mem.ctx.output_directory, filename)
128
+ showcase_image.save(output_path, "PNG")
129
+ debug(f"Generated showcase image: {relative_path(output_path)} ({rows}x{cols} grid, {len(items)} items)")
130
+
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes