stewbeet 2.0.3__tar.gz → 2.0.5__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 (136) hide show
  1. {stewbeet-2.0.3 → stewbeet-2.0.5}/PKG-INFO +1 -1
  2. {stewbeet-2.0.3 → stewbeet-2.0.5}/pyproject.toml +1 -1
  3. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/auto/lang_file/__init__.py +4 -2
  4. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/auto/lang_file/utils.py +12 -9
  5. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/custom_recipes/pulverizer.py +11 -10
  6. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/datapack/custom_blocks/__init__.py +20 -25
  7. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/datapack/loading/__init__.py +1 -5
  8. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/iso_renders.py +1 -1
  9. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/initialize/__init__.py +96 -96
  10. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/resource_pack/item_models/object.py +5 -3
  11. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/verify_definitions/__init__.py +15 -0
  12. {stewbeet-2.0.3 → stewbeet-2.0.5}/.gitignore +0 -0
  13. {stewbeet-2.0.3 → stewbeet-2.0.5}/LICENSE +0 -0
  14. {stewbeet-2.0.3 → stewbeet-2.0.5}/README.md +0 -0
  15. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/__init__.py +0 -0
  16. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/__main__.py +0 -0
  17. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/cli.py +0 -0
  18. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/continuous_delivery/__init__.py +0 -0
  19. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/continuous_delivery/cd_utils.py +0 -0
  20. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/continuous_delivery/github.py +0 -0
  21. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/continuous_delivery/modrinth.py +0 -0
  22. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/continuous_delivery/pmc.py +0 -0
  23. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/continuous_delivery/smithed.py +0 -0
  24. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/__init__.py +0 -0
  25. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/__memory__.py +0 -0
  26. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/constants.py +0 -0
  27. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/definitions_helper/__init__.py +0 -0
  28. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/definitions_helper/completion.py +0 -0
  29. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/definitions_helper/equipments.py +0 -0
  30. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/definitions_helper/materials.py +0 -0
  31. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/definitions_helper/records.py +0 -0
  32. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/definitions_helper/smart_ore_generation.py +0 -0
  33. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/definitions_helper/text.py +0 -0
  34. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/ingredients.py +0 -0
  35. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/utils/io.py +0 -0
  36. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/core/utils/sounds.py +0 -0
  37. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/__init__.py +0 -0
  38. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/bookshelf.py +0 -0
  39. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/bookshelf_config.json +0 -0
  40. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
  41. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
  42. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
  43. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
  44. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
  45. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
  46. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
  47. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
  48. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
  49. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
  50. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
  51. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
  52. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
  53. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
  54. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
  55. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
  56. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
  57. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
  58. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
  59. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
  60. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
  61. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
  62. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
  63. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
  64. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
  65. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
  66. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
  67. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
  68. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
  69. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
  70. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
  71. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
  72. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
  73. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/archive/__init__.py +0 -0
  74. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/auto/headers/__init__.py +0 -0
  75. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/auto/headers/object.py +0 -0
  76. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
  77. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
  78. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
  79. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
  80. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
  81. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
  82. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
  83. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
  84. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
  85. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
  86. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +0 -0
  87. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
  88. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/finalyze/dependencies/__init__.py +0 -0
  89. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/__init__.py +0 -0
  90. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
  91. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
  92. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
  93. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
  94. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
  95. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
  96. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
  97. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
  98. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
  99. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
  100. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
  101. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
  102. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
  103. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
  104. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
  105. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/book_components.py +0 -0
  106. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
  107. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/craft_content.py +0 -0
  108. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/image_utils.py +0 -0
  109. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/main.py +0 -0
  110. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/other_utils.py +0 -0
  111. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
  112. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/shared_import.py +0 -0
  113. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
  114. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
  115. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
  116. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
  117. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
  118. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
  119. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
  120. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
  121. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
  122. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
  123. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
  124. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
  125. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
  126. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
  127. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
  128. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
  129. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
  130. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
  131. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/initialize/source_lore_font.py +0 -0
  132. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
  133. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
  134. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
  135. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
  136. {stewbeet-2.0.3 → stewbeet-2.0.5}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stewbeet
3
- Version: 2.0.3
3
+ Version: 2.0.5
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.3"
8
+ version = "2.0.5"
9
9
  description = "Beet Framework made to help generating advanced Minecraft datapack contents"
10
10
  readme = "README.md"
11
11
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
 
2
2
  # Imports
3
- from beet import Context, Function, Language, LootTable
3
+ from beet import Advancement, Context, Function, ItemModifier, Language, LootTable
4
4
  from stouputils.decorators import measure_time
5
5
  from stouputils.io import super_json_dump
6
6
  from stouputils.parallel import multithreading
@@ -22,9 +22,11 @@ def beet_default(ctx: Context):
22
22
  files_to_process: dict[str, Function | LootTable] = {}
23
23
  files_to_process.update(ctx.data.functions)
24
24
  files_to_process.update(ctx.data.loot_tables)
25
+ files_to_process.update(ctx.data.item_modifiers)
26
+ files_to_process.update(ctx.data.advancements)
25
27
 
26
28
  # Process all files
27
- args: list[tuple[Context, str, Function | LootTable]] = [
29
+ args: list[tuple[Context, str, Function | LootTable | ItemModifier, Advancement]] = [
28
30
  (ctx, file, content) for (file, content) in files_to_process.items()
29
31
  if True
30
32
  ]
@@ -2,9 +2,8 @@
2
2
  # Imports
3
3
  import re
4
4
 
5
- from beet import Context, Function, LootTable
5
+ from beet import Advancement, Context, Function, ItemModifier, LootTable
6
6
  from stouputils.decorators import simple_cache
7
- from stouputils.print import breakpoint
8
7
 
9
8
  # Prepare lang dictionary and lang_format function
10
9
  lang: dict[str, str] = {}
@@ -56,7 +55,7 @@ def lang_format(ctx: Context, text: str) -> tuple[str, str]:
56
55
  return key, re.sub(r"[._]", "", alpha_num)
57
56
 
58
57
 
59
- def handle_file(ctx: Context, file: str, content: Function | LootTable) -> None:
58
+ def handle_file(ctx: Context, file: str, content: Function | LootTable | ItemModifier | Advancement) -> None:
60
59
  """ Process a file to extract and replace text with lang keys.
61
60
 
62
61
  Args:
@@ -67,10 +66,10 @@ def handle_file(ctx: Context, file: str, content: Function | LootTable) -> None:
67
66
  Returns:
68
67
  None: The function modifies the content in place.
69
68
  """
70
- # Read content
71
- if isinstance(content, Function):
72
- string: str = content.text
73
- elif isinstance(content, LootTable):
69
+ # Read content from supported beet types
70
+ # Function, LootTable, ItemModifier or Advancement
71
+ if isinstance(content, Function) or isinstance(content, LootTable) \
72
+ or isinstance(content, ItemModifier) or isinstance(content, Advancement):
74
73
  string: str = content.text
75
74
  else:
76
75
  raise ValueError(f"Unsupported content type: {type(content)}")
@@ -98,9 +97,13 @@ def handle_file(ctx: Context, file: str, content: Function | LootTable) -> None:
98
97
  new_fragment: str = f'{quote}translate{quote}: {quote}{key_for_lang}{quote}'
99
98
  string = string[:start] + new_fragment + string[end:]
100
99
 
101
- # Write the new content to the file
100
+ # Write the new content back to the appropriate context data
102
101
  if isinstance(content, Function):
103
102
  ctx.data.functions[file] = Function(string)
104
- else:
103
+ elif isinstance(content, LootTable):
105
104
  ctx.data.loot_tables[file] = LootTable(string)
105
+ elif isinstance(content, ItemModifier):
106
+ ctx.data.item_modifiers[file] = ItemModifier(string)
107
+ elif isinstance(content, Advancement):
108
+ ctx.data.advancements[file] = Advancement(string)
106
109
 
@@ -3,11 +3,10 @@
3
3
  import json
4
4
  from typing import Any
5
5
 
6
- from beet import Recipe
7
6
  from stouputils.decorators import simple_cache
8
- from stouputils.io import super_json_dump
9
7
 
10
8
  from ...core.__memory__ import Mem
9
+ from ...core.constants import PULVERIZING
11
10
  from ...core.ingredients import (
12
11
  get_item_from_ingredient,
13
12
  ingr_repr,
@@ -44,22 +43,24 @@ class PulverizerRecipeHandler:
44
43
  str: The generated recipe command.
45
44
  """
46
45
  ingredient: dict[str, Any] = item_to_id_ingr_repr(recipe["ingredient"])
47
- result: dict[str, Any] = item_to_id_ingr_repr(get_item_from_ingredient(Mem.ctx.meta, recipe["result"])) if recipe.get("result") else ingr_repr(item, Mem.ctx.project_id)
46
+ result: dict[str, Any] = item_to_id_ingr_repr(get_item_from_ingredient(recipe["result"])) if recipe.get("result") else ingr_repr(item, Mem.ctx.project_id)
48
47
 
49
48
  line: str = "execute if score #found simplenergy.data matches 0 store result score #found simplenergy.data if data storage simplenergy:main pulverizer.input"
50
49
  line += json.dumps(ingredient)
51
- line += f" run loot replace entity @s contents loot {loot_table_from_ingredient(Mem.ctx.meta, result, recipe['result_count'])}"
52
- return line + "\n"
50
+ line += f" run loot replace entity @s contents loot {loot_table_from_ingredient(result, recipe['result_count'])}"
51
+ return line
53
52
 
54
53
  def generate_recipes(self) -> None:
55
- """Generate all pulverizer recipes."""
54
+ """ Generate all pulverizer recipes. """
56
55
  for item, data in Mem.definitions.items():
57
56
  crafts: list[dict[str, Any]] = list(data.get("result_of_crafting", []))
58
57
  crafts += list(data.get("used_for_crafting", []))
59
58
 
60
59
  for recipe in crafts:
61
- if recipe["type"] == "pulverizing":
62
- write_function(self.SIMPLENERGY_PULVERIZER_PATH,
63
- self.simplenergy_pulverizer_recipe(recipe, item))
64
- Mem.ctx.data["simplenergy:tags/function/calls/pulverizer_recipes"] = Recipe(super_json_dump({"values": [f"{Mem.ctx.project_id}:calls/simplenergy/pulverizer_recipes"]}))
60
+ if recipe["type"] == PULVERIZING:
61
+ write_function(
62
+ self.SIMPLENERGY_PULVERIZER_PATH,
63
+ self.simplenergy_pulverizer_recipe(recipe, item),
64
+ tags=["simplenergy:calls/pulverizer_recipes"],
65
+ )
65
66
 
@@ -2,7 +2,7 @@
2
2
  # Imports
3
3
  from typing import Any
4
4
 
5
- from beet import BlockTag, Context, Predicate
5
+ from beet import Advancement, BlockTag, Context, Predicate
6
6
  from stouputils.decorators import measure_time
7
7
  from stouputils.io import super_json_dump
8
8
  from stouputils.print import debug, progress
@@ -46,8 +46,10 @@ def beet_default(ctx: Context):
46
46
  # Predicates
47
47
  FACING = ["north", "east", "south", "west"]
48
48
  for face in FACING:
49
- predicate = {"condition":"minecraft:location_check","predicate":{"block":{"state":{"facing":face}}}}
50
- ctx.data[ns].predicates[f"facing/{face}"] = Predicate(super_json_dump(predicate))
49
+ pred = {"condition":"minecraft:location_check","predicate":{"block":{"state":{"facing":face}}}}
50
+ pred_obj = Predicate(pred)
51
+ pred_obj.encoder = super_json_dump
52
+ ctx.data[ns].predicates[f"facing/{face}"] = pred_obj
51
53
 
52
54
  # Get rotation function
53
55
  write_function(f"{ns}:custom_blocks/get_rotation",
@@ -80,19 +82,6 @@ execute if score #rotation {ns}.data matches 0 if predicate {ns}:facing/west run
80
82
  # Custom block
81
83
  if data.get(VANILLA_BLOCK):
82
84
 
83
- # Add additional data to the custom blocks
84
- if data.get("id") == CUSTOM_BLOCK_VANILLA:
85
- data["container"] = [
86
- {"slot":0,"item":{"id":"minecraft:stone","count":1,"components":{"minecraft:custom_data":{"smithed":{"block":{"id":f"{ctx.project_id}:{item}","from":ctx.project_id}}}}}}
87
- ]
88
-
89
- # Hide the container tooltip
90
- if not data.get("tooltip_display"):
91
- data["tooltip_display"] = {"hidden_components": []}
92
- elif not data["tooltip_display"].get("hidden_components"):
93
- data["tooltip_display"]["hidden_components"] = []
94
- data["tooltip_display"]["hidden_components"].append("minecraft:container")
95
-
96
85
  # Get the vanilla block data
97
86
  block = data[VANILLA_BLOCK]
98
87
  block_id = block["id"]
@@ -328,8 +317,10 @@ execute store result entity @s Item.count byte 1 run scoreboard players get #ite
328
317
  ctx.data[ns].block_tags[VANILLA_BLOCKS_TAG] = BlockTag(super_json_dump({"values": listed_blocks}))
329
318
 
330
319
  # Create predicate
331
- predicate = {"condition": "minecraft:location_check", "predicate": {"block": {"blocks": f"#{ns}:{VANILLA_BLOCKS_TAG}"}}}
332
- ctx.data[ns].predicates["check_vanilla_blocks"] = Predicate(super_json_dump(predicate))
320
+ pred = {"condition": "minecraft:location_check", "predicate": {"block": {"blocks": f"#{ns}:{VANILLA_BLOCKS_TAG}"}}}
321
+ pred_obj = Predicate(pred)
322
+ pred_obj.encoder = super_json_dump
323
+ ctx.data[ns].predicates["check_vanilla_blocks"] = pred_obj
333
324
 
334
325
  # Create advanced predicate
335
326
  advanced_predicate = {"condition": "minecraft:any_of", "terms": []}
@@ -337,12 +328,14 @@ execute store result entity @s Item.count byte 1 run scoreboard players get #ite
337
328
  block_underscore = block.replace(":","_")
338
329
  if block == "minecraft:cauldron":
339
330
  block = "#minecraft:cauldrons"
340
- predicate = {
331
+ pred = {
341
332
  "condition": "minecraft:entity_properties", "entity": "this",
342
333
  "predicate": { "nbt": f"{{Tags:[\"{ns}.vanilla.{block_underscore}\"]}}", "location": { "block": { "blocks": block }}}
343
334
  }
344
- advanced_predicate["terms"].append(predicate)
345
- ctx.data[ns].predicates["advanced_check_vanilla_blocks"] = Predicate(super_json_dump(advanced_predicate))
335
+ advanced_predicate["terms"].append(pred)
336
+ pred_obj = Predicate(advanced_predicate)
337
+ pred_obj.encoder = super_json_dump
338
+ ctx.data[ns].predicates["advanced_check_vanilla_blocks"] = pred_obj
346
339
 
347
340
  # Write a destroy check every 2 ticks, every second, and every 5 seconds
348
341
  ore_block = VANILLA_BLOCK_FOR_ORES["id"].replace(':', '_')
@@ -397,17 +390,19 @@ execute as @e[tag={ns}.custom_block,dx=0,dy=0,dz=0] at @s run function {ns}:cust
397
390
  if data["id"] == CUSTOM_BLOCK_HEAD and data.get(VANILLA_BLOCK):
398
391
 
399
392
  # Make advancement
400
- predicate = {
393
+ adv = {
401
394
  "criteria":{"requirement":{"trigger":"minecraft:placed_block","conditions":{"location": [{"condition": "minecraft:location_check","predicate": {"block": {}}}]}}},
402
395
  "requirements":[["requirement"]],
403
396
  "rewards":{}
404
397
  }
405
- predicate["criteria"]["requirement"]["conditions"]["location"][0]["predicate"]["block"]["nbt"] = super_json_dump(
398
+ adv["criteria"]["requirement"]["conditions"]["location"][0]["predicate"]["block"]["nbt"] = super_json_dump(
406
399
  {"components":{"minecraft:custom_data":data.get("custom_data", {})}},
407
400
  max_level = 0
408
401
  )
409
- predicate["rewards"]["function"] = f"{ns}:custom_blocks/_player_head/search_{item}"
410
- ctx.data.advancements[f"{ns}:custom_block_head/{item}"].data = predicate
402
+ adv["rewards"]["function"] = f"{ns}:custom_blocks/_player_head/search_{item}"
403
+ adv_obj = Advancement(adv)
404
+ adv_obj.encoder = super_json_dump
405
+ ctx.data[ns].advancements[f"custom_block_head/{item}"] = adv_obj
411
406
 
412
407
  # Make search function
413
408
  content = "# Search where the head has been placed\n"
@@ -2,7 +2,6 @@
2
2
  # ruff: noqa: E501
3
3
  # Imports
4
4
  from beet import Context
5
- from beet.core.utils import JsonDict
6
5
  from stouputils.decorators import measure_time
7
6
  from stouputils.io import super_json_dump
8
7
  from stouputils.print import progress
@@ -31,9 +30,6 @@ def beet_default(ctx: Context):
31
30
  assert ctx.project_id, "Project ID is not set. Please set it in the project configuration."
32
31
  assert ctx.project_version.count(".") == 2, "Project version must be in the format 'major.minor.patch'."
33
32
 
34
- # Get configuration from context meta
35
- stewbeet: JsonDict = ctx.meta.get("stewbeet", {})
36
-
37
33
  # Get basic project information
38
34
  major, minor, patch = ctx.project_version.split(".")
39
35
 
@@ -98,7 +94,7 @@ execute unless score #{ctx.project_id}.loaded load.status matches 1 run function
98
94
  items_storage += f"data modify storage {ctx.project_id}:items all.{item} set value " + super_json_dump(mc_data, max_level = 0)
99
95
 
100
96
  # Write the loading tellraw and score, along with the final dataset
101
- project_name = stewbeet.get('project_name', ctx.project_id)
97
+ project_name = ctx.project_name or ctx.project_id
102
98
  write_load_file(
103
99
  f"""
104
100
  # Confirm load
@@ -78,7 +78,7 @@ def generate_all_iso_renders():
78
78
  debug(f"Generating iso renders for {len(for_model_resolver)} items, this may take a while...")
79
79
  render = Render(Mem.ctx)
80
80
  for rp_path, dst_path in for_model_resolver.items():
81
- render.add_model_task(rp_path, path_save=dst_path)
81
+ render.add_model_task(rp_path, path_save=dst_path, animation_mode="one_file")
82
82
  render.run()
83
83
  debug("Generated iso renders for all items")
84
84
 
@@ -1,96 +1,96 @@
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 progress, warning
13
-
14
- from ...core import Mem
15
- from .source_lore_font import make_source_lore_font
16
-
17
-
18
- # Main entry point
19
- @measure_time(progress, message="Execution time of 'stewbeet.plugins.initialize'")
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
- make_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
- pass
96
-
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 progress, warning
13
+
14
+ from ...core import Mem
15
+ from .source_lore_font import make_source_lore_font
16
+
17
+
18
+ # Main entry point
19
+ @measure_time(progress, message="Execution time of 'stewbeet.plugins.initialize'")
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
+ make_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
+ pass
96
+
@@ -5,7 +5,8 @@ from __future__ import annotations
5
5
  import os
6
6
 
7
7
  from beet import ItemModel, Model, Texture
8
- from stouputils.io import super_json_dump
8
+ from beet.core.utils import JsonDict
9
+ from stouputils.io import super_json_dump, super_json_load
9
10
  from stouputils.print import error
10
11
 
11
12
  from ....core.__memory__ import Mem
@@ -292,9 +293,10 @@ class AutoModel:
292
293
  texture_name = texture.split(":")[-1].split("/")[-1] # Get just the filename
293
294
  texture_name += ".png"
294
295
  if texture_name in self.source_textures:
295
- Mem.ctx.assets[texture] = Texture(source_path=self.source_textures[texture_name])
296
+ mcmeta: JsonDict | None = None
296
297
  if os.path.exists(self.source_textures[texture_name] + ".mcmeta"):
297
- Mem.ctx.assets[f"{texture}.mcmeta"] = Texture(source_path=self.source_textures[texture_name] + ".mcmeta")
298
+ mcmeta = super_json_load(self.source_textures[texture_name] + ".mcmeta")
299
+ Mem.ctx.assets[texture] = Texture(source_path=self.source_textures[texture_name], mcmeta=mcmeta)
298
300
  else:
299
301
  if not self.ignore_textures:
300
302
  error(f"Texture '{texture_name}' not found in source textures")
@@ -214,3 +214,18 @@ def beet_default(ctx: Context) -> None:
214
214
  else:
215
215
  info("No errors found in the definitions during verification")
216
216
 
217
+
218
+ for item, data in Mem.definitions.items():
219
+ # Add additional data to the custom blocks
220
+ if data.get("id") == CUSTOM_BLOCK_VANILLA:
221
+ data["container"] = [
222
+ {"slot":0,"item":{"id":"minecraft:stone","count":1,"components":{"minecraft:custom_data":{"smithed":{"block":{"id":f"{ctx.project_id}:{item}","from":ctx.project_id}}}}}}
223
+ ]
224
+
225
+ # Hide the container tooltip
226
+ if not data.get("tooltip_display"):
227
+ data["tooltip_display"] = {"hidden_components": []}
228
+ elif not data["tooltip_display"].get("hidden_components"):
229
+ data["tooltip_display"]["hidden_components"] = []
230
+ data["tooltip_display"]["hidden_components"].append("minecraft:container")
231
+
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes