stewbeet 2.0.16__tar.gz → 2.0.18__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 (138) hide show
  1. {stewbeet-2.0.16 → stewbeet-2.0.18}/PKG-INFO +1 -1
  2. {stewbeet-2.0.16 → stewbeet-2.0.18}/pyproject.toml +1 -1
  3. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/__init__.py +5 -0
  4. stewbeet-2.0.18/stewbeet/all.py +50 -0
  5. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/archive/__init__.py +10 -9
  6. stewbeet-2.0.18/stewbeet/plugins/finalyze/last_final/__init__.py +30 -0
  7. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/main.py +8 -2
  8. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/initialize/__init__.py +109 -124
  9. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/initialize/source_lore_font.py +7 -0
  10. {stewbeet-2.0.16 → stewbeet-2.0.18}/.gitignore +0 -0
  11. {stewbeet-2.0.16 → stewbeet-2.0.18}/LICENSE +0 -0
  12. {stewbeet-2.0.16 → stewbeet-2.0.18}/README.md +0 -0
  13. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/__main__.py +0 -0
  14. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/continuous_delivery/__init__.py +0 -0
  15. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/continuous_delivery/cd_utils.py +0 -0
  16. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/continuous_delivery/github.py +0 -0
  17. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/continuous_delivery/modrinth.py +0 -0
  18. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/continuous_delivery/pmc.py +0 -0
  19. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/continuous_delivery/smithed.py +0 -0
  20. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/__init__.py +0 -0
  21. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/__memory__.py +0 -0
  22. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/constants.py +0 -0
  23. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/definitions_helper/__init__.py +0 -0
  24. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/definitions_helper/completion.py +0 -0
  25. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/definitions_helper/equipments.py +0 -0
  26. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/definitions_helper/materials.py +0 -0
  27. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/definitions_helper/records.py +0 -0
  28. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/definitions_helper/smart_ore_generation.py +0 -0
  29. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/definitions_helper/text.py +0 -0
  30. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/ingredients.py +0 -0
  31. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/utils/io.py +0 -0
  32. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/core/utils/sounds.py +0 -0
  33. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/__init__.py +0 -0
  34. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/bookshelf.py +0 -0
  35. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/bookshelf_config.json +0 -0
  36. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
  37. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
  38. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
  39. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
  40. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
  41. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
  42. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
  43. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
  44. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
  45. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
  46. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
  47. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
  48. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
  49. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
  50. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
  51. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
  52. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
  53. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
  54. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
  55. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
  56. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
  57. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
  58. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
  59. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
  60. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
  61. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
  62. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
  63. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
  64. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
  65. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
  66. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
  67. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
  68. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
  69. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/auto/headers/__init__.py +0 -0
  70. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/auto/headers/object.py +0 -0
  71. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/auto/lang_file/__init__.py +0 -0
  72. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/auto/lang_file/utils.py +0 -0
  73. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
  74. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
  75. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
  76. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
  77. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
  78. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
  79. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/custom_recipes/pulverizer.py +0 -0
  80. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
  81. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
  82. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/datapack/custom_blocks/__init__.py +0 -0
  83. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/datapack/loading/__init__.py +0 -0
  84. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
  85. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
  86. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +0 -0
  87. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
  88. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/finalyze/dependencies/__init__.py +0 -0
  89. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/__init__.py +0 -0
  90. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
  91. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
  92. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
  93. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
  94. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
  95. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
  96. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
  97. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
  98. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
  99. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
  100. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
  101. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
  102. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
  103. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
  104. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
  105. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/book_components.py +0 -0
  106. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
  107. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/craft_content.py +0 -0
  108. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/image_utils.py +0 -0
  109. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/iso_renders.py +0 -0
  110. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/other_utils.py +0 -0
  111. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
  112. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/shared_import.py +0 -0
  113. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
  114. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
  115. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
  116. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
  117. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
  118. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
  119. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
  120. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
  121. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
  122. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
  123. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
  124. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
  125. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
  126. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
  127. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
  128. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
  129. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
  130. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
  131. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
  132. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
  133. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
  134. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
  135. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/resource_pack/item_models/object.py +0 -0
  136. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
  137. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/plugins/verify_definitions/__init__.py +0 -0
  138. {stewbeet-2.0.16 → stewbeet-2.0.18}/stewbeet/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stewbeet
3
- Version: 2.0.16
3
+ Version: 2.0.18
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.16"
8
+ version = "2.0.18"
9
9
  description = "Beet Framework made to help generating advanced Minecraft datapack contents"
10
10
  readme = "README.md"
11
11
  license = "MIT"
@@ -9,3 +9,8 @@ from .plugins.initialize.source_lore_font import find_pack_png
9
9
  from .plugins.resource_pack.item_models.object import AutoModel
10
10
  from .plugins.resource_pack.sounds import add_sound
11
11
 
12
+
13
+ def beet_default(ctx: Context):
14
+ """ Initializes the StewBeet package. """
15
+ ctx.require("stewbeet.plugins.initialize")
16
+
@@ -0,0 +1,50 @@
1
+
2
+ # Imports
3
+ from beet import Context
4
+
5
+ # Constants
6
+ GENERATION_PLUGINS = (
7
+ "stewbeet.plugins.verify_definitions",
8
+ "stewbeet.plugins.resource_pack.sounds",
9
+ "stewbeet.plugins.resource_pack.item_models",
10
+ "stewbeet.plugins.resource_pack.check_power_of_2",
11
+ "stewbeet.plugins.custom_recipes",
12
+ "stewbeet.plugins.ingame_manual",
13
+ "stewbeet.plugins.datapack.loading",
14
+ "stewbeet.plugins.datapack.custom_blocks",
15
+ "stewbeet.plugins.datapack.loot_tables",
16
+ "stewbeet.plugins.compatibilities.simpledrawer",
17
+ "stewbeet.plugins.compatibilities.neo_enchant"
18
+ )
19
+ FINALYZE_PLUGINS = (
20
+ "stewbeet.plugins.finalyze.custom_blocks_ticking",
21
+ "stewbeet.plugins.finalyze.basic_datapack_structure",
22
+ "stewbeet.plugins.finalyze.dependencies",
23
+ "stewbeet.plugins.finalyze.check_unused_textures",
24
+ "stewbeet.plugins.finalyze.last_final",
25
+ "stewbeet.plugins.auto.headers",
26
+ "stewbeet.plugins.archive",
27
+ "stewbeet.plugins.merge_smithed_weld",
28
+ "stewbeet.plugins.copy_to_destination",
29
+ "stewbeet.plugins.compute_sha1"
30
+ )
31
+
32
+ def beet_default(ctx: Context):
33
+ """ Run all plugins that should run after definitions are loaded.
34
+ This function will yield before finalizing the project (so users can run their own plugins in the middle of the pipeline).
35
+
36
+ Requires:
37
+ - StewBeet to be initialized (e.g. from stewbeet.plugins.initialize).
38
+ - Definitions to be loaded
39
+ """
40
+ # Assertions
41
+ for x in GENERATION_PLUGINS:
42
+ ctx.require(x)
43
+
44
+ # Yield to allow user code to run
45
+ yield
46
+
47
+ # After user code, run the final plugins
48
+ for x in FINALYZE_PLUGINS:
49
+ ctx.require(x)
50
+
@@ -81,6 +81,16 @@ def beet_default(ctx: Context) -> None:
81
81
  for item in temp_zip.filelist:
82
82
  temp_contents[item.filename] = temp_zip.read(item.filename)
83
83
 
84
+ # Check if pack.png exists and prepare it
85
+ pack_png_path = find_pack_png()
86
+ if pack_png_path:
87
+ # Remove pack.png from temp_contents if it exists to avoid duplicates
88
+ temp_contents.pop("pack.png", None)
89
+
90
+ # Read pack.png content
91
+ with open(pack_png_path, "rb") as f:
92
+ temp_contents["pack.png"] = f.read()
93
+
84
94
  # Recreate the zip file with proper timestamps and compression
85
95
  with zipfile.ZipFile(archive_path, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=6) as final_zip:
86
96
  for filename, content in temp_contents.items():
@@ -89,15 +99,6 @@ def beet_default(ctx: Context) -> None:
89
99
  info.compress_type = zipfile.ZIP_DEFLATED
90
100
  final_zip.writestr(info, content)
91
101
 
92
- # Check if pack.png exists and add it to the final zip if it does
93
- pack_png_path = find_pack_png()
94
- if pack_png_path:
95
- info = ZipInfo("pack.png")
96
- info.compress_type = zipfile.ZIP_DEFLATED
97
- info.date_time = consistent_time
98
- with open(pack_png_path, "rb") as f:
99
- final_zip.writestr(info, f.read())
100
-
101
102
  # Process each pack in parallel
102
103
  multithreading(handle_pack, ctx.packs, max_workers=len(ctx.packs))
103
104
 
@@ -0,0 +1,30 @@
1
+
2
+ # Imports
3
+ from beet import Context, PngFile
4
+ from stouputils.decorators import measure_time
5
+ from stouputils.print import progress
6
+
7
+ from ....core import Mem
8
+ from ...initialize.source_lore_font import create_source_lore_font, find_pack_png
9
+
10
+
11
+ # Main entry point
12
+ @measure_time(progress, message="Execution time of 'stewbeet.plugins.finalyze.last_final'")
13
+ def beet_default(ctx: Context):
14
+
15
+ # If source lore is present and there are item definitions using it, create the source lore font
16
+ src_lore: str = Mem.ctx.meta.stewbeet.get("pack_icon_path", "")
17
+ if src_lore and Mem.ctx.meta.stewbeet.source_lore and any(
18
+ Mem.ctx.meta.stewbeet.source_lore in data.get("lore", [])
19
+ for data in Mem.definitions.values()
20
+ ):
21
+ create_source_lore_font(src_lore)
22
+
23
+ # Add the pack icon to the output directory for datapack and resource pack
24
+ pack_icon = find_pack_png()
25
+ if pack_icon:
26
+ Mem.ctx.data.extra["pack.png"] = PngFile(source_path=pack_icon)
27
+ all_assets = set(Mem.ctx.assets.all())
28
+ if len(all_assets) > 0:
29
+ Mem.ctx.assets.extra["pack.png"] = PngFile(source_path=pack_icon)
30
+
@@ -3,13 +3,14 @@
3
3
  import json
4
4
  import os
5
5
  import shutil
6
+ from pathlib import Path
6
7
  from typing import Any
7
8
 
8
9
  from beet import Font, Texture
9
10
  from beet.core.utils import JsonDict, TextComponent
10
11
  from PIL import Image
11
12
  from stouputils.collections import unique_list
12
- from stouputils.io import relative_path, super_json_dump, super_open
13
+ from stouputils.io import clean_path, relative_path, super_json_dump, super_open
13
14
  from stouputils.parallel import colored_for_loop
14
15
  from stouputils.print import debug, error, suggestion, warning
15
16
 
@@ -678,7 +679,12 @@ def routine():
678
679
 
679
680
  # Add the model to the resource pack if it doesn't already exist
680
681
  if not manual_already_exists:
681
- AutoModel.from_definitions("manual", Mem.definitions["manual"], {})
682
+ textures_folder: str = relative_path(Mem.ctx.meta.get("stewbeet", {}).get("textures_folder", ""))
683
+ textures: dict[str, str] = {
684
+ clean_path(str(p)).split("/")[-1]: relative_path(p)
685
+ for p in Path(textures_folder).rglob("*.png")
686
+ }
687
+ AutoModel.from_definitions("manual", Mem.definitions["manual"], textures).process()
682
688
 
683
689
  # Remove the heavy workbench from the definitions
684
690
  if OFFICIAL_LIBS["smithed.crafter"]["is_used"]:
@@ -1,124 +1,109 @@
1
-
2
- # Imports
3
- import os
4
- from pathlib import Path
5
-
6
- from beet import Context, Pack, PngFile
7
- from beet.core.utils import JsonDict, TextComponent
8
- from box import Box
9
- from stouputils import relative_path
10
- from stouputils.decorators import measure_time
11
- from stouputils.io import super_json_dump
12
- from stouputils.print import warning
13
-
14
- from ...core import Mem
15
- from .source_lore_font import create_source_lore_font, find_pack_png, prepare_source_lore_font
16
-
17
-
18
- # Main entry point
19
- @measure_time(message="Total execution time", is_generator=True)
20
- def beet_default(ctx: Context):
21
-
22
- # Assertions
23
- assert ctx.project_id, "Project ID must be set in the project configuration."
24
-
25
- # Store the Box object in ctx for access throughout the codebase
26
- meta_box: Box = Box(ctx.meta, default_box=True, default_box_attr={})
27
- object.__setattr__(ctx, "meta", meta_box) # Bypass FrozenInstanceError
28
- Mem.ctx = ctx
29
-
30
- # Preprocess project description
31
- project_description: TextComponent = Mem.ctx.meta.stewbeet.project_description
32
- if not project_description or project_description == "auto":
33
- # Use project name, version, and author to create a default description
34
- Mem.ctx.meta.stewbeet.project_description = f"{ctx.project_name} [{ctx.project_version}] by {ctx.project_author}"
35
-
36
- # Preprocess source lore
37
- source_lore: TextComponent = Mem.ctx.meta.stewbeet.source_lore
38
- if not source_lore or source_lore == "auto":
39
- Mem.ctx.meta.stewbeet.source_lore = [{"text":"ICON"},{"text":f" {ctx.project_name}","italic":True,"color":"blue"}]
40
- src_lore: str = prepare_source_lore_font(Mem.ctx.meta.stewbeet.source_lore)
41
-
42
- # Preprocess manual name
43
- manual_name: TextComponent = Mem.ctx.meta.stewbeet.manual.name
44
- if not manual_name:
45
- Mem.ctx.meta.stewbeet.manual.name = f"{ctx.project_name} Manual"
46
-
47
- # Convert paths to relative ones
48
- object.__setattr__(ctx, "output_directory", relative_path(Mem.ctx.output_directory))
49
-
50
- # Helper function to setup pack.mcmeta
51
- def setup_pack_mcmeta(pack: Pack, pack_format: int):
52
- existing_mcmeta = pack.mcmeta.data or {}
53
- pack_mcmeta: JsonDict = {"pack": {}}
54
- pack_mcmeta.update(existing_mcmeta)
55
- pack_mcmeta["pack"].update(existing_mcmeta.get("pack", {}))
56
- pack_mcmeta["pack"]["pack_format"] = pack_format
57
- pack_mcmeta["pack"]["description"] = Mem.ctx.meta.stewbeet.project_description
58
- pack_mcmeta["id"] = Mem.ctx.project_id
59
- pack.mcmeta.data = pack_mcmeta
60
- pack.mcmeta.encoder = super_json_dump
61
-
62
- # Setup pack.mcmeta for both packs
63
- setup_pack_mcmeta(ctx.data, ctx.data.pack_format)
64
- setup_pack_mcmeta(ctx.assets, ctx.assets.pack_format)
65
-
66
- # Convert texture names if needed (from old legacy system)
67
- textures_folder = Mem.ctx.meta.stewbeet.get("textures_folder")
68
- if textures_folder and Path(textures_folder).exists():
69
- REPLACEMENTS = {
70
- "_off": "",
71
- "_down": "_bottom",
72
- "_up": "_top",
73
- "_north": "_front",
74
- "_south": "_back",
75
- "_west": "_left",
76
- "_east": "_right",
77
- }
78
-
79
- # Get all texture files
80
- texture_files = [f for f in os.listdir(textures_folder) if f.endswith(('.png', '.jpg', '.jpeg', ".mcmeta"))]
81
-
82
- for file in texture_files:
83
- new_name = file.lower()
84
- for k, v in REPLACEMENTS.items():
85
- if k in file:
86
- new_name = new_name.replace(k, v)
87
-
88
- if new_name != file:
89
- old_path = Path(textures_folder) / file
90
- new_path = Path(textures_folder) / new_name
91
- if old_path.exists() and not new_path.exists():
92
- os.rename(old_path, new_path)
93
- warning(f"Renamed texture '{file}' to '{new_name}'")
94
-
95
- # Add missing pack format registries if not present
96
- ctx.data.pack_format_registry.update({
97
- (1, 21, 5): 71,
98
- (1, 21, 6): 80,
99
- (1, 21, 7): 81,
100
- })
101
- ctx.assets.pack_format_registry.update({
102
- (1, 21, 5): 55,
103
- (1, 21, 6): 63,
104
- (1, 21, 7): 64,
105
- })
106
-
107
- # Yield message to indicate successful build
108
- yield
109
-
110
- # If source lore is present and there are item definitions using it, create the source lore font
111
- if src_lore and Mem.ctx.meta.stewbeet.source_lore and any(
112
- Mem.ctx.meta.stewbeet.source_lore in data.get("lore", [])
113
- for data in Mem.definitions.values()
114
- ):
115
- create_source_lore_font(src_lore)
116
-
117
- # Add the pack icon to the output directory for datapack and resource pack
118
- pack_icon = find_pack_png()
119
- if pack_icon:
120
- Mem.ctx.data.extra["pack.png"] = PngFile(source_path=pack_icon)
121
- all_assets = set(Mem.ctx.assets.all())
122
- if len(all_assets) > 0:
123
- Mem.ctx.assets.extra["pack.png"] = PngFile(source_path=pack_icon)
124
-
1
+
2
+ # Imports
3
+ import os
4
+ from pathlib import Path
5
+
6
+ from beet import Context, Pack
7
+ from beet.core.utils import JsonDict, TextComponent
8
+ from box import Box
9
+ from stouputils import relative_path
10
+ from stouputils.decorators import measure_time
11
+ from stouputils.io import super_json_dump
12
+ from stouputils.print import warning
13
+
14
+ from ...core import Mem
15
+ from .source_lore_font import prepare_source_lore_font
16
+
17
+
18
+ # Main entry point
19
+ @measure_time(message="Total execution time", is_generator=True)
20
+ def beet_default(ctx: Context):
21
+
22
+ # Assertions
23
+ assert ctx.project_id, "Project ID must be set in the project configuration."
24
+
25
+ # Store the Box object in ctx for access throughout the codebase
26
+ meta_box: Box = Box(ctx.meta, default_box=True, default_box_attr={})
27
+ object.__setattr__(ctx, "meta", meta_box) # Bypass FrozenInstanceError
28
+ Mem.ctx = ctx
29
+
30
+ # Preprocess project description
31
+ project_description: TextComponent = Mem.ctx.meta.stewbeet.project_description
32
+ if not project_description or project_description == "auto":
33
+ # Use project name, version, and author to create a default description
34
+ Mem.ctx.meta.stewbeet.project_description = f"{ctx.project_name} [{ctx.project_version}] by {ctx.project_author}"
35
+
36
+ # Preprocess source lore
37
+ source_lore: TextComponent = Mem.ctx.meta.stewbeet.source_lore
38
+ if not source_lore or source_lore == "auto":
39
+ Mem.ctx.meta.stewbeet.source_lore = [{"text":"ICON"},{"text":f" {ctx.project_name}","italic":True,"color":"blue"}]
40
+ Mem.ctx.meta.stewbeet["pack_icon_path"] = prepare_source_lore_font(Mem.ctx.meta.stewbeet.source_lore)
41
+
42
+ # Preprocess manual name
43
+ manual_name: TextComponent = Mem.ctx.meta.stewbeet.manual.name
44
+ if not manual_name:
45
+ Mem.ctx.meta.stewbeet.manual.name = f"{ctx.project_name} Manual"
46
+
47
+ # Convert paths to relative ones
48
+ object.__setattr__(ctx, "output_directory", relative_path(Mem.ctx.output_directory))
49
+
50
+ # Helper function to setup pack.mcmeta
51
+ def setup_pack_mcmeta(pack: Pack, pack_format: int):
52
+ existing_mcmeta = pack.mcmeta.data or {}
53
+ pack_mcmeta: JsonDict = {"pack": {}}
54
+ pack_mcmeta.update(existing_mcmeta)
55
+ pack_mcmeta["pack"].update(existing_mcmeta.get("pack", {}))
56
+ pack_mcmeta["pack"]["pack_format"] = pack_format
57
+ pack_mcmeta["pack"]["description"] = Mem.ctx.meta.stewbeet.project_description
58
+ pack_mcmeta["id"] = Mem.ctx.project_id
59
+ pack.mcmeta.data = pack_mcmeta
60
+ pack.mcmeta.encoder = super_json_dump
61
+
62
+ # Setup pack.mcmeta for both packs
63
+ setup_pack_mcmeta(ctx.data, ctx.data.pack_format)
64
+ setup_pack_mcmeta(ctx.assets, ctx.assets.pack_format)
65
+
66
+ # Convert texture names if needed (from old legacy system)
67
+ textures_folder = Mem.ctx.meta.stewbeet.get("textures_folder")
68
+ if textures_folder and Path(textures_folder).exists():
69
+ REPLACEMENTS = {
70
+ "_off": "",
71
+ "_down": "_bottom",
72
+ "_up": "_top",
73
+ "_north": "_front",
74
+ "_south": "_back",
75
+ "_west": "_left",
76
+ "_east": "_right",
77
+ }
78
+
79
+ # Get all texture files
80
+ texture_files = [f for f in os.listdir(textures_folder) if f.endswith(('.png', '.jpg', '.jpeg', ".mcmeta"))]
81
+
82
+ for file in texture_files:
83
+ new_name = file.lower()
84
+ for k, v in REPLACEMENTS.items():
85
+ if k in file:
86
+ new_name = new_name.replace(k, v)
87
+
88
+ if new_name != file:
89
+ old_path = Path(textures_folder) / file
90
+ new_path = Path(textures_folder) / new_name
91
+ if old_path.exists() and not new_path.exists():
92
+ os.rename(old_path, new_path)
93
+ warning(f"Renamed texture '{file}' to '{new_name}'")
94
+
95
+ # Add missing pack format registries if not present
96
+ ctx.data.pack_format_registry.update({
97
+ (1, 21, 5): 71,
98
+ (1, 21, 6): 80,
99
+ (1, 21, 7): 81,
100
+ })
101
+ ctx.assets.pack_format_registry.update({
102
+ (1, 21, 5): 55,
103
+ (1, 21, 6): 63,
104
+ (1, 21, 7): 64,
105
+ })
106
+
107
+ # Yield message to indicate successful build
108
+ yield
109
+
@@ -63,3 +63,10 @@ def create_source_lore_font(pack_icon: str) -> None:
63
63
  image = image.resize((256, 256))
64
64
  Mem.ctx.assets[Mem.ctx.project_id].textures["font/original_icon"] = Texture(image)
65
65
 
66
+ def delete_source_lore_font() -> None:
67
+ """ Delete the source lore font if it exists. """
68
+ if Mem.ctx.assets[Mem.ctx.project_id].fonts.get("icons"):
69
+ del Mem.ctx.assets[Mem.ctx.project_id].fonts["icons"]
70
+ if Mem.ctx.assets[Mem.ctx.project_id].textures.get("font/original_icon"):
71
+ del Mem.ctx.assets[Mem.ctx.project_id].textures["font/original_icon"]
72
+
File without changes
File without changes
File without changes
File without changes