stewbeet 2.0.22__tar.gz → 2.0.23__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.23}/PKG-INFO +1 -1
  2. {stewbeet-2.0.22 → stewbeet-2.0.23}/pyproject.toml +1 -1
  3. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/archive/__init__.py +9 -2
  4. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/image_utils.py +3 -3
  5. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/main.py +6 -0
  6. stewbeet-2.0.23/stewbeet/plugins/ingame_manual/showcase_image.py +130 -0
  7. {stewbeet-2.0.22 → stewbeet-2.0.23}/.gitignore +0 -0
  8. {stewbeet-2.0.22 → stewbeet-2.0.23}/LICENSE +0 -0
  9. {stewbeet-2.0.22 → stewbeet-2.0.23}/README.md +0 -0
  10. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/__init__.py +0 -0
  11. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/__main__.py +0 -0
  12. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/all.py +0 -0
  13. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/cli.py +0 -0
  14. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/continuous_delivery/__init__.py +0 -0
  15. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/continuous_delivery/cd_utils.py +0 -0
  16. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/continuous_delivery/github.py +0 -0
  17. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/continuous_delivery/modrinth.py +0 -0
  18. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/continuous_delivery/pmc.py +0 -0
  19. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/continuous_delivery/smithed.py +0 -0
  20. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/__init__.py +0 -0
  21. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/balancing.py +0 -0
  22. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/batteries.py +0 -0
  23. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant.json +0 -0
  24. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_d.json +0 -0
  25. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_de.json +0 -0
  26. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dew.json +0 -0
  27. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dn.json +0 -0
  28. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dne.json +0 -0
  29. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dnew.json +0 -0
  30. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dns.json +0 -0
  31. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dnse.json +0 -0
  32. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dnsew.json +0 -0
  33. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dnsw.json +0 -0
  34. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dnw.json +0 -0
  35. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_ds.json +0 -0
  36. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dse.json +0 -0
  37. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dsew.json +0 -0
  38. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dsw.json +0 -0
  39. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_dw.json +0 -0
  40. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_e.json +0 -0
  41. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_ew.json +0 -0
  42. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_n.json +0 -0
  43. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_ne.json +0 -0
  44. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_new.json +0 -0
  45. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_ns.json +0 -0
  46. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_nse.json +0 -0
  47. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_nsew.json +0 -0
  48. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_nsw.json +0 -0
  49. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_nw.json +0 -0
  50. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_s.json +0 -0
  51. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_se.json +0 -0
  52. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_sew.json +0 -0
  53. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_sw.json +0 -0
  54. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_u.json +0 -0
  55. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_ud.json +0 -0
  56. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_ude.json +0 -0
  57. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udew.json +0 -0
  58. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udn.json +0 -0
  59. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udne.json +0 -0
  60. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udnew.json +0 -0
  61. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udns.json +0 -0
  62. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udnse.json +0 -0
  63. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udnsew.json +0 -0
  64. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udnsw.json +0 -0
  65. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udnw.json +0 -0
  66. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_uds.json +0 -0
  67. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udse.json +0 -0
  68. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udsew.json +0 -0
  69. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udsw.json +0 -0
  70. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_udw.json +0 -0
  71. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_ue.json +0 -0
  72. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_uew.json +0 -0
  73. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_un.json +0 -0
  74. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_une.json +0 -0
  75. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_unew.json +0 -0
  76. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_uns.json +0 -0
  77. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_unse.json +0 -0
  78. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_unsew.json +0 -0
  79. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_unsw.json +0 -0
  80. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_unw.json +0 -0
  81. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_us.json +0 -0
  82. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_use.json +0 -0
  83. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_usew.json +0 -0
  84. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_usw.json +0 -0
  85. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_uw.json +0 -0
  86. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cable_models/variant_w.json +0 -0
  87. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/cables.py +0 -0
  88. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/energy_lib_calls.py +0 -0
  89. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/gui.py +0 -0
  90. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/contrib/simplenergy/wrench.py +0 -0
  91. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/__init__.py +0 -0
  92. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/__memory__.py +0 -0
  93. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/constants.py +0 -0
  94. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/__init__.py +0 -0
  95. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/completion.py +0 -0
  96. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/equipments.py +0 -0
  97. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/materials.py +0 -0
  98. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/records.py +0 -0
  99. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/simplenergy.py +0 -0
  100. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/smart_ore_generation.py +0 -0
  101. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/definitions_helper/text.py +0 -0
  102. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/ingredients.py +0 -0
  103. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/utils/io.py +0 -0
  104. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/core/utils/sounds.py +0 -0
  105. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/__init__.py +0 -0
  106. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/bookshelf.py +0 -0
  107. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/bookshelf_config.json +0 -0
  108. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
  109. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
  110. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
  111. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
  112. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
  113. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
  114. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
  115. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
  116. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
  117. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
  118. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
  119. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
  120. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
  121. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
  122. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
  123. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
  124. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
  125. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
  126. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
  127. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
  128. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
  129. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
  130. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
  131. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
  132. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
  133. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
  134. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
  135. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
  136. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
  137. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
  138. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
  139. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
  140. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
  141. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/auto/headers/__init__.py +0 -0
  142. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/auto/headers/object.py +0 -0
  143. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/auto/lang_file/__init__.py +0 -0
  144. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/auto/lang_file/utils.py +0 -0
  145. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
  146. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
  147. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
  148. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
  149. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
  150. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
  151. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/custom_recipes/pulverizer.py +0 -0
  152. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
  153. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
  154. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/datapack/custom_blocks/__init__.py +0 -0
  155. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/datapack/loading/__init__.py +0 -0
  156. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
  157. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
  158. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +0 -0
  159. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
  160. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/finalyze/dependencies/__init__.py +0 -0
  161. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/finalyze/last_final/__init__.py +0 -0
  162. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/__init__.py +0 -0
  163. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
  164. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
  165. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
  166. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
  167. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
  168. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
  169. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
  170. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
  171. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
  172. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
  173. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
  174. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
  175. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
  176. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
  177. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
  178. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/book_components.py +0 -0
  179. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
  180. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/craft_content.py +0 -0
  181. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/iso_renders.py +0 -0
  182. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/other_utils.py +0 -0
  183. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
  184. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/shared_import.py +0 -0
  185. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
  186. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
  187. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
  188. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
  189. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
  190. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
  191. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
  192. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
  193. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
  194. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
  195. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
  196. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
  197. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
  198. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
  199. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
  200. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
  201. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
  202. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
  203. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/initialize/__init__.py +0 -0
  204. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/initialize/source_lore_font.py +0 -0
  205. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
  206. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
  207. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
  208. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
  209. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/resource_pack/item_models/object.py +0 -0
  210. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
  211. {stewbeet-2.0.22 → stewbeet-2.0.23}/stewbeet/plugins/verify_definitions/__init__.py +0 -0
  212. {stewbeet-2.0.22 → stewbeet-2.0.23}/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.23
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.23"
9
9
  description = "Beet Framework made to help generating advanced Minecraft datapack contents"
10
10
  readme = "README.md"
11
11
  license = "MIT"
@@ -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
@@ -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
+ print(target_size)
112
+ resized_item: Image.Image = careful_resize(item_image, target_size)
113
+
114
+ # Center the resized item image within the case
115
+ item_x: int = x + (case_size - resized_item.size[0]) // 2
116
+ item_y: int = y + (case_size - resized_item.size[1]) // 2
117
+
118
+ # Paste the resized case and the item image
119
+ showcase_image.paste(resized_case, (x, y))
120
+ if resized_item.mode == "RGBA":
121
+ mask: Image.Image = resized_item.split()[3]
122
+ showcase_image.paste(resized_item, (item_x, item_y), mask)
123
+ else:
124
+ showcase_image.paste(resized_item, (item_x, item_y))
125
+
126
+ # Save to output directory
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