stewbeet 2.2.8__tar.gz → 2.2.10__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.
- {stewbeet-2.2.8 → stewbeet-2.2.10}/PKG-INFO +1 -1
- {stewbeet-2.2.8 → stewbeet-2.2.10}/pyproject.toml +1 -1
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/constants.py +1 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/completion.py +12 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/ingredients.py +49 -29
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/custom_blocks/__init__.py +7 -5
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +5 -3
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/book_components.py +2 -2
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/image_utils.py +4 -2
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/iso_renders.py +11 -14
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/main.py +9 -9
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/other_utils.py +26 -26
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/shared_import.py +1 -1
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/verify_definitions/__init__.py +0 -4
- {stewbeet-2.2.8 → stewbeet-2.2.10}/.gitignore +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/LICENSE +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/README.md +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/__main__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/all.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/cli.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/continuous_delivery/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/continuous_delivery/cd_utils.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/continuous_delivery/github.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/continuous_delivery/modrinth.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/continuous_delivery/pmc.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/continuous_delivery/smithed.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/balancing.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/batteries.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/cables.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_d.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_de.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dn.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dne.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dns.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnse.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ds.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dse.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_e.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_n.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ne.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_new.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ns.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nse.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_s.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_se.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_u.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ud.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ude.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udn.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udne.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udns.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnse.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uds.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udse.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ue.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_un.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_une.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uns.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unse.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_us.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_use.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usew.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uw.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_w.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_lib_calls.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/gui.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/item_cable_models/cable.bbmodel +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/item_cable_models/cable_base.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/py.typed +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/base_block.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/base_item.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_block.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_connected.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_item.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_block.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_connected.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_item.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/wrench.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/__memory__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/equipments.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/materials.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/records.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/simplenergy.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/smart_ore_generation.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/definitions_helper/text.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/utils/io.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/core/utils/sounds.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/bookshelf.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/bookshelf_config.json +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/archive/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/auto/headers/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/auto/headers/context_analyzer.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/auto/headers/execution_parser.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/auto/headers/function_analyzer.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/auto/headers/object.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/auto/lang_file/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/auto/lang_file/utils.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/custom_paintings/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/custom_recipes/pulverizer.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/loading/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/sorters/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/sorters/constants.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/sorters/extend_datapack.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/sorters/match.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/sorters/mod.mcdoc +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/sorters/quick_sort.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/datapack/sorters/selection_sort.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/finalyze/dependencies/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/finalyze/last_final/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/mining.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/stonecutting.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/wiki_mining_template.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/craft_content.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/showcase_image.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/mining.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/stonecutting.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/wiki_mining_template.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/initialize/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/initialize/source_lore_font.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/resource_pack/item_models/object.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/py.typed +0 -0
- {stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stewbeet
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.10
|
|
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
|
|
@@ -87,6 +87,7 @@ NOT_COMPONENTS: list[str] = [ # Keys that should not be considered as comp
|
|
|
87
87
|
FACES: tuple[str, ...] = ("down", "up", "north", "south", "west", "east") # Faces of a block, used for resource pack and blocks orientation
|
|
88
88
|
SIDES: tuple[str, ...] = ("_bottom", "_top", "_front", "_back", "_left", "_right", "_side") # Sides of a block, used for resource pack
|
|
89
89
|
DOWNLOAD_VANILLA_ASSETS_RAW = "https://raw.githubusercontent.com/edayot/renders/renders/resourcepack/assets/minecraft/textures/render"
|
|
90
|
+
DOWNLOAD_VANILLA_ASSETS_SPECIAL_RAW = "https://raw.githubusercontent.com/edayot/renders/renders-special/resourcepack/assets/minecraft/textures/render"
|
|
90
91
|
DOWNLOAD_VANILLA_ASSETS_SOURCE = "https://github.com/edayot/renders/tree/renders/resourcepack/assets/minecraft/textures/render"
|
|
91
92
|
CUSTOM_BLOCK_HEAD_CUBE_RADIUS: tuple[int, int, int] = (16, 16, 16) # Size of the region to check around the player when placing a CUSTOM_BLOCK_HEAD
|
|
92
93
|
BLOCKS_WITH_INTERFACES: list[str] = [ # List of blocks that are containers and have an interface
|
|
@@ -107,3 +107,15 @@ def add_smithed_ignore_vanilla_behaviours_convention() -> None:
|
|
|
107
107
|
data["custom_data"].smithed.ignore.functionality = True # pyright: ignore[reportUnknownMemberType]
|
|
108
108
|
data["custom_data"].smithed.ignore.crafting = True # pyright: ignore[reportUnknownMemberType]
|
|
109
109
|
|
|
110
|
+
# Set manual components
|
|
111
|
+
def set_manual_components(white_list: list[str]) -> None:
|
|
112
|
+
""" Override the components to include in the manual when hovering items.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
white_list (list[str]): The list of components to include.
|
|
116
|
+
"""
|
|
117
|
+
if not white_list:
|
|
118
|
+
return
|
|
119
|
+
from ...plugins.ingame_manual.shared_import import SharedMemory
|
|
120
|
+
SharedMemory.components_to_include = white_list
|
|
121
|
+
|
|
@@ -80,27 +80,30 @@ def ingr_to_id(ingredient: JsonDict, add_namespace: bool = True) -> str:
|
|
|
80
80
|
"""
|
|
81
81
|
if isinstance(ingredient, str):
|
|
82
82
|
ingredient = {"item": ingredient}
|
|
83
|
-
|
|
84
|
-
if
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
83
|
+
for k in ("item", "id"):
|
|
84
|
+
if ingredient.get(k):
|
|
85
|
+
if not add_namespace and ":" in ingredient[k]:
|
|
86
|
+
return ingredient[k].split(":")[1]
|
|
87
|
+
elif add_namespace and ":" not in ingredient[k]:
|
|
88
|
+
return "minecraft:" + ingredient[k]
|
|
89
|
+
return ingredient[k]
|
|
90
|
+
|
|
91
|
+
custom_data: JsonDict = ingredient["components"]["minecraft:custom_data"]
|
|
92
|
+
namespace: str = ""
|
|
93
|
+
id: str = ""
|
|
94
|
+
for cd_ns, cd_data in custom_data.items():
|
|
95
|
+
if isinstance(cd_data, dict):
|
|
96
|
+
cd_data = cast(JsonDict, cd_data)
|
|
97
|
+
values: list[Any] = list(cd_data.values())
|
|
98
|
+
if isinstance(values[0], bool):
|
|
99
|
+
namespace = cd_ns
|
|
100
|
+
id = next(iter(cd_data.keys()))
|
|
101
|
+
break
|
|
102
|
+
if not namespace:
|
|
103
|
+
error(f"No namespace found in custom data: {custom_data}, ingredient: {ingredient}")
|
|
104
|
+
if add_namespace:
|
|
105
|
+
return namespace + ":" + id
|
|
106
|
+
return id
|
|
104
107
|
|
|
105
108
|
# Mainly used for recipes
|
|
106
109
|
@simple_cache
|
|
@@ -185,34 +188,51 @@ def get_item_from_ingredient(ingredient: JsonDict) -> JsonDict:
|
|
|
185
188
|
|
|
186
189
|
# Make a loot table
|
|
187
190
|
@simple_cache
|
|
188
|
-
def loot_table_from_ingredient(result_ingredient: JsonDict, result_count: int) -> str:
|
|
191
|
+
def loot_table_from_ingredient(result_ingredient: JsonDict, result_count: int | dict) -> str:
|
|
192
|
+
""" Get the loot table for an ingredient dict
|
|
193
|
+
Args:
|
|
194
|
+
result_ingredient (dict): The ingredient dict
|
|
195
|
+
ex: {"item": "minecraft:stick"}
|
|
196
|
+
result_count (int|dict): The count of the result item, can be an int or a dict for random counts
|
|
197
|
+
ex: 1
|
|
198
|
+
ex: {"type": "minecraft:uniform","min": 4,"max": 6}
|
|
199
|
+
Returns:
|
|
200
|
+
str: The loot table path, ex: "my_datapack:i/stick"
|
|
201
|
+
"""
|
|
189
202
|
|
|
190
203
|
# If item from this datapack
|
|
191
204
|
item: str = ingr_to_id(result_ingredient)
|
|
192
205
|
if item.startswith(Mem.ctx.project_id):
|
|
193
206
|
item = item.split(":")[1]
|
|
194
207
|
loot_table = f"{Mem.ctx.project_id}:i/{item}"
|
|
195
|
-
if result_count > 1:
|
|
208
|
+
if isinstance(result_count, int) and result_count > 1:
|
|
196
209
|
loot_table += f"_x{result_count}"
|
|
210
|
+
elif isinstance(result_count, dict):
|
|
211
|
+
minimum = result_count.get("min", 1)
|
|
212
|
+
maximum = result_count.get("max", 1)
|
|
213
|
+
if maximum > 1:
|
|
214
|
+
loot_table += f"_x{minimum}to{maximum}"
|
|
197
215
|
return loot_table
|
|
198
216
|
|
|
199
217
|
namespace, item = item.split(":")
|
|
200
218
|
loot_table = f"{Mem.ctx.project_id}:recipes/{namespace}/{item}"
|
|
201
|
-
if result_count > 1:
|
|
219
|
+
if isinstance(result_count, int) and result_count > 1:
|
|
202
220
|
loot_table += f"_x{result_count}"
|
|
221
|
+
elif isinstance(result_count, dict):
|
|
222
|
+
minimum = result_count.get("min", 1)
|
|
223
|
+
maximum = result_count.get("max", 1)
|
|
224
|
+
if maximum > 1:
|
|
225
|
+
loot_table += f"_x{minimum}to{maximum}"
|
|
203
226
|
|
|
204
227
|
# If item from another datapack, generate the loot table
|
|
205
|
-
path: str = f"{Mem.ctx.project_id}:recipes/{namespace}/{item}"
|
|
206
|
-
if result_count > 1:
|
|
207
|
-
path += f"_x{result_count}"
|
|
208
228
|
if namespace != "minecraft":
|
|
209
229
|
file: JsonDict = {"pools":[{"rolls":1,"entries":[{"type":"minecraft:loot_table","value": f"{Mem.ctx.project_id}:external/{namespace}/{item}"}] }] }
|
|
210
230
|
else:
|
|
211
231
|
file: JsonDict = {"pools":[{"rolls":1,"entries":[{"type":"minecraft:item","name":f"{namespace}:{item}"}] }] }
|
|
212
|
-
if result_count > 1:
|
|
232
|
+
if (isinstance(result_count, int) and result_count > 1) or isinstance(result_count, dict):
|
|
213
233
|
file["pools"][0]["entries"][0]["functions"] = [{"function": "minecraft:set_count","count": result_count}]
|
|
214
234
|
|
|
215
|
-
Mem.ctx.data[
|
|
235
|
+
Mem.ctx.data[loot_table] = LootTable(super_json_dump(file, max_level=9))
|
|
216
236
|
return loot_table
|
|
217
237
|
|
|
218
238
|
@simple_cache
|
|
@@ -137,14 +137,16 @@ execute if score #rotation {ns}.data matches 0 if predicate {ns}:facing/west run
|
|
|
137
137
|
# Advancement revoke
|
|
138
138
|
advancement revoke @s only {ns}:custom_block_alternative/{item}
|
|
139
139
|
|
|
140
|
-
# Execute the place function as and at the new placed item frame
|
|
141
|
-
|
|
140
|
+
# Execute the place function as and at the new placed item frame""")
|
|
141
|
+
if "id" not in block:
|
|
142
|
+
write_function(f"{ns}:custom_blocks/{item}/search", f"execute as @e[type=item_frame,tag={ns}.new,tag={ns}.{item}] at @s run function {ns}:custom_blocks/{item}/place_main")
|
|
143
|
+
# Make place check function (only if "id" is in VANILLA_BLOCK)
|
|
144
|
+
else:
|
|
145
|
+
write_function(f"{ns}:custom_blocks/{item}/search", f"""tag @s add {ns}.to_refund
|
|
142
146
|
execute as @e[type=item_frame,tag={ns}.new,tag={ns}.{item}] at @s run function {ns}:custom_blocks/{item}/place_check
|
|
143
147
|
tag @s remove {ns}.to_refund
|
|
144
148
|
""")
|
|
145
|
-
|
|
146
|
-
# Make place check function
|
|
147
|
-
write_function(f"{ns}:custom_blocks/{item}/place_check", f"""
|
|
149
|
+
write_function(f"{ns}:custom_blocks/{item}/place_check", f"""
|
|
148
150
|
# Check if there is air block at the position
|
|
149
151
|
execute if block ~ ~ ~ air run return run function {ns}:custom_blocks/{item}/place_main
|
|
150
152
|
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py
RENAMED
|
@@ -30,14 +30,16 @@ def beet_default(ctx: Context) -> None:
|
|
|
30
30
|
# Ex: {'some_folder/dirt.png', 'stone.png', ...}
|
|
31
31
|
textures: set[str] = {relative_path(str(p), textures_folder) for p in Path(textures_folder).rglob("*.png")}
|
|
32
32
|
|
|
33
|
-
# 2) For each texture, check if any of the ctx.assets.textures
|
|
33
|
+
# 2) For each texture, check if any of the ctx.assets.textures matches the texture filename.
|
|
34
34
|
unused_paths: set[str] = set()
|
|
35
35
|
for path in textures:
|
|
36
|
+
# Get just the filename without extension for comparison
|
|
37
|
+
filename_no_ext: str = os.path.splitext(os.path.basename(path))[0]
|
|
36
38
|
no_extension_path: str = os.path.splitext(path)[0]
|
|
37
39
|
if not any(
|
|
38
|
-
str(texture.source_path).endswith(no_extension_path) if isinstance(texture, Texture)
|
|
40
|
+
(str(texture.source_path).endswith(no_extension_path) or filename_no_ext in str(texture.source_path)) if isinstance(texture, Texture)
|
|
39
41
|
else (
|
|
40
|
-
texture.endswith(no_extension_path) if isinstance(texture, str)
|
|
42
|
+
(texture.endswith(no_extension_path) or filename_no_ext in texture) if isinstance(texture, str)
|
|
41
43
|
else False
|
|
42
44
|
)
|
|
43
45
|
for texture in cast(list[Any], ctx.assets.textures)
|
|
@@ -10,7 +10,7 @@ from stouputils.print import error, warning
|
|
|
10
10
|
from ...core.__memory__ import Mem
|
|
11
11
|
from ...core.ingredients import ingr_to_id
|
|
12
12
|
from .image_utils import generate_high_res_font
|
|
13
|
-
from .shared_import import
|
|
13
|
+
from .shared_import import NONE_FONT, SharedMemory, get_page_number
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# Call the previous function
|
|
@@ -107,7 +107,7 @@ def get_item_component(ingredient: str | JsonDict, only_those_components: list[s
|
|
|
107
107
|
components[key] = item[key]
|
|
108
108
|
else:
|
|
109
109
|
for key, value in item.items():
|
|
110
|
-
if key in
|
|
110
|
+
if key in SharedMemory.components_to_include:
|
|
111
111
|
components[key] = value
|
|
112
112
|
formatted["hover_event"]["components"] = components
|
|
113
113
|
|
|
@@ -6,7 +6,7 @@ from typing import Any, cast
|
|
|
6
6
|
|
|
7
7
|
from PIL import Image, ImageDraw, ImageFont
|
|
8
8
|
|
|
9
|
-
from ...core.__memory__ import Mem
|
|
9
|
+
from ...core.__memory__ import JsonDict, Mem
|
|
10
10
|
from .shared_import import (
|
|
11
11
|
MICRO_NONE_FONT,
|
|
12
12
|
TEMPLATES_PATH,
|
|
@@ -101,7 +101,7 @@ def image_count(count: int | str) -> Image.Image:
|
|
|
101
101
|
return img
|
|
102
102
|
|
|
103
103
|
# Generate high res image for item
|
|
104
|
-
def generate_high_res_font(item: str, item_image: Image.Image, count: int = 1) -> str:
|
|
104
|
+
def generate_high_res_font(item: str, item_image: Image.Image, count: int | str | JsonDict = 1) -> str:
|
|
105
105
|
""" Generate the high res font to display in the manual for the item
|
|
106
106
|
Args:
|
|
107
107
|
item (str): The name of the item, ex: "adamantium_fragment"
|
|
@@ -111,6 +111,8 @@ def generate_high_res_font(item: str, item_image: Image.Image, count: int = 1) -
|
|
|
111
111
|
str: The font to the generated texture
|
|
112
112
|
"""
|
|
113
113
|
font = get_next_font()
|
|
114
|
+
if isinstance(count, dict):
|
|
115
|
+
count = f"{count.get('min', 1)}-{count.get('max', 1)}"
|
|
114
116
|
item = f"{item}_{str(count).replace('-', '_')}" if isinstance(count, str) or count > 1 else item
|
|
115
117
|
|
|
116
118
|
# Get output path
|
|
@@ -16,6 +16,7 @@ from ...core.__memory__ import Mem
|
|
|
16
16
|
from ...core.constants import (
|
|
17
17
|
DOWNLOAD_VANILLA_ASSETS_RAW,
|
|
18
18
|
DOWNLOAD_VANILLA_ASSETS_SOURCE,
|
|
19
|
+
DOWNLOAD_VANILLA_ASSETS_SPECIAL_RAW,
|
|
19
20
|
RESULT_OF_CRAFTING,
|
|
20
21
|
USED_FOR_CRAFTING,
|
|
21
22
|
)
|
|
@@ -97,20 +98,16 @@ def generate_all_iso_renders():
|
|
|
97
98
|
if not destination:
|
|
98
99
|
destination = f"{path}/minecraft/{item}.png"
|
|
99
100
|
if not (os.path.exists(destination) and cache_assets): # If not downloaded yet or not using cache
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
file.write(response.content)
|
|
111
|
-
else:
|
|
112
|
-
warning(f"Failed to download texture '{link}', please add it manually to '{destination}'")
|
|
113
|
-
warning(f"Suggestion link: '{DOWNLOAD_VANILLA_ASSETS_SOURCE}'")
|
|
101
|
+
for base_link in (DOWNLOAD_VANILLA_ASSETS_SPECIAL_RAW, DOWNLOAD_VANILLA_ASSETS_RAW):
|
|
102
|
+
for folder in ["item", "block", "items"]:
|
|
103
|
+
link: str = f"{base_link}/{folder}/{item}.png"
|
|
104
|
+
response = requests.get(link)
|
|
105
|
+
if response.status_code == 200:
|
|
106
|
+
with super_open(destination, "wb") as file:
|
|
107
|
+
return file.write(response.content)
|
|
108
|
+
# If all attempts failed
|
|
109
|
+
warning(f"Failed to download texture for '{item}', please add it manually to '{destination}'")
|
|
110
|
+
warning(f"Suggestion link: '{DOWNLOAD_VANILLA_ASSETS_SOURCE}'")
|
|
114
111
|
|
|
115
112
|
# Multithread the download
|
|
116
113
|
multithreading(download_item, used_vanilla_items, max_workers=min(32, len(used_vanilla_items)))
|
|
@@ -288,7 +288,7 @@ def routine():
|
|
|
288
288
|
x += simple_case.size[0]
|
|
289
289
|
|
|
290
290
|
# Add the click_event part to the line and add the 2 times the line if enough items
|
|
291
|
-
component = get_item_component(item, only_those_components=[
|
|
291
|
+
component = get_item_component(item, only_those_components=[x for x in SharedMemory.components_to_include if x != "lore"])
|
|
292
292
|
component["text"] = MEDIUM_NONE_FONT if not SharedMemory.high_resolution else high_res_font
|
|
293
293
|
line.append(component)
|
|
294
294
|
if len(line) == MAX_ITEMS_PER_ROW:
|
|
@@ -441,6 +441,12 @@ def routine():
|
|
|
441
441
|
if craft["type"] == "crafting_shapeless":
|
|
442
442
|
craft = convert_shapeless_to_shaped(craft)
|
|
443
443
|
|
|
444
|
+
# Skip if result is same as previous result
|
|
445
|
+
current_result: Any | None = craft.get("result")
|
|
446
|
+
if current_result and current_result == previous_result and craft["type"] != "mining":
|
|
447
|
+
continue
|
|
448
|
+
previous_result = current_result
|
|
449
|
+
|
|
444
450
|
# Get breaklines
|
|
445
451
|
breaklines = 3
|
|
446
452
|
if "shape" in craft:
|
|
@@ -476,7 +482,7 @@ def routine():
|
|
|
476
482
|
PULVERIZING: "SimplEnergy Pulverizing"
|
|
477
483
|
}
|
|
478
484
|
recipe_title = recipe_type_names.get(craft["type"], craft["type"].replace("_", " ").title())
|
|
479
|
-
hover_text.
|
|
485
|
+
hover_text.append({"text": f"\n{recipe_title}", "color": "yellow"})
|
|
480
486
|
|
|
481
487
|
# Append ingredients
|
|
482
488
|
if craft["type"] == "mining":
|
|
@@ -532,12 +538,6 @@ def routine():
|
|
|
532
538
|
hover_text.append({"text": "\n- Pattern: ", "color": "gray"})
|
|
533
539
|
hover_text.append({"text": pattern_name, "color": "gray"})
|
|
534
540
|
|
|
535
|
-
# Skip if result is same as previous result
|
|
536
|
-
current_result: Any | None = craft.get("result")
|
|
537
|
-
if current_result and current_result == previous_result and craft["type"] != "mining":
|
|
538
|
-
continue
|
|
539
|
-
previous_result = current_result
|
|
540
|
-
|
|
541
541
|
# Add the craft to the content
|
|
542
542
|
result_or_ingredient = WIKI_RESULT_OF_CRAFT_FONT if "result" not in craft else generate_wiki_font_for_ingr(name, craft)
|
|
543
543
|
info_buttons.append({
|
|
@@ -595,7 +595,7 @@ def routine():
|
|
|
595
595
|
|
|
596
596
|
# If there are more than buttons_limit buttons, remove lowest priority ones until there is buttons_limit left
|
|
597
597
|
while len(info_buttons) > buttons_limit:
|
|
598
|
-
lowest_priority:
|
|
598
|
+
lowest_priority: JsonDict = min(info_buttons[::-1], key=lambda x: x.get("priority", 1))
|
|
599
599
|
info_buttons.remove(lowest_priority)
|
|
600
600
|
|
|
601
601
|
# Keep only the last buttons_limit buttons (maximum that can be displayed with 5 per line and 4 lines)
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
# ruff: noqa: E501
|
|
3
3
|
# Imports
|
|
4
|
-
from typing import cast
|
|
5
|
-
|
|
6
4
|
from beet.core.utils import JsonDict
|
|
7
5
|
from stouputils.decorators import simple_cache
|
|
8
6
|
|
|
@@ -32,22 +30,24 @@ def convert_shapeless_to_shaped(craft: JsonDict) -> JsonDict:
|
|
|
32
30
|
if craft.get("result"):
|
|
33
31
|
shaped_recipe["result"] = craft["result"]
|
|
34
32
|
|
|
35
|
-
# Get all ingredients to the dictionary
|
|
33
|
+
# Get all ingredients to the dictionary and map each ingredient to a key, preserving order
|
|
36
34
|
next_key: str = "A"
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
ingredient_to_key: dict[str, str] = {}
|
|
36
|
+
ordered_keys: list[str] = []
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if str(ingr) == str(new_ingr):
|
|
43
|
-
key = new_key # This will skip the next condition below
|
|
44
|
-
break
|
|
38
|
+
for ingr in shapeless_ingredients:
|
|
39
|
+
ingr_str = str(ingr)
|
|
45
40
|
|
|
46
|
-
#
|
|
47
|
-
if
|
|
41
|
+
# Check if we've already seen this ingredient
|
|
42
|
+
if ingr_str not in ingredient_to_key:
|
|
43
|
+
# New ingredient, assign it the next key
|
|
44
|
+
ingredient_to_key[ingr_str] = next_key
|
|
48
45
|
shaped_recipe["ingredients"][next_key] = ingr
|
|
49
46
|
next_key = chr(ord(next_key) + 1)
|
|
50
47
|
|
|
48
|
+
# Record the key for this position (preserving order)
|
|
49
|
+
ordered_keys.append(ingredient_to_key[ingr_str])
|
|
50
|
+
|
|
51
51
|
# Make the shape of the craft, with an exception when 2 materials to put one alone in the center
|
|
52
52
|
if len(shaped_recipe["ingredients"]) == 2 and total_items in (5, 9):
|
|
53
53
|
|
|
@@ -61,21 +61,21 @@ def convert_shapeless_to_shaped(craft: JsonDict) -> JsonDict:
|
|
|
61
61
|
elif total_items == 5:
|
|
62
62
|
shaped_recipe["shape"] = [f" {big} ", big+other+big, f" {big} "]
|
|
63
63
|
else:
|
|
64
|
-
|
|
65
|
-
#
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
# ex 2: ["A","B","C","D"] -> ["AB","CD"]
|
|
74
|
-
col_size = 3
|
|
75
|
-
if len(shaped_recipe["shape"]) <= 4:
|
|
64
|
+
# Determine the grid size based on total items
|
|
65
|
+
# Perfect squares: 1, 4, 9 -> use sqrt as col_size
|
|
66
|
+
# Otherwise: use 3 for <=9 items, 2 for <=4 items
|
|
67
|
+
import math
|
|
68
|
+
sqrt_items = int(math.sqrt(total_items))
|
|
69
|
+
if sqrt_items * sqrt_items == total_items:
|
|
70
|
+
# Perfect square
|
|
71
|
+
col_size = sqrt_items
|
|
72
|
+
elif total_items <= 4:
|
|
76
73
|
col_size = 2
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
else:
|
|
75
|
+
col_size = 3
|
|
76
|
+
|
|
77
|
+
# Build the shape preserving the original order
|
|
78
|
+
shaped_recipe["shape"] = ["".join(ordered_keys[i:i + col_size]) for i in range(0, len(ordered_keys), col_size)]
|
|
79
79
|
|
|
80
80
|
# Return the shaped craft
|
|
81
81
|
return shaped_recipe
|
|
@@ -23,7 +23,6 @@ def get_next_font() -> str: # Returns an incrementing value for each craft
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# Constants
|
|
26
|
-
COMPONENTS_TO_INCLUDE: list[str] = ["item_name", "lore", "custom_name", "damage", "max_damage"]
|
|
27
26
|
SQUARE_SIZE: int = 32
|
|
28
27
|
MANUAL_ASSETS_PATH: str = clean_path(os.path.dirname(os.path.realpath(__file__)) + "/")
|
|
29
28
|
TEMPLATES_PATH: str = MANUAL_ASSETS_PATH + "templates"
|
|
@@ -67,6 +66,7 @@ HOVER_EQUIVALENTS: dict[str, str] = {
|
|
|
67
66
|
|
|
68
67
|
# Global variables
|
|
69
68
|
class SharedMemory:
|
|
69
|
+
components_to_include: list[str] = ["item_name", "lore", "custom_name", "damage", "max_damage"]
|
|
70
70
|
next_craft_font: int = 0x8000
|
|
71
71
|
font_providers: list[JsonDict] = []
|
|
72
72
|
manual_pages: list[JsonDict] = []
|
|
@@ -247,10 +247,6 @@ def beet_default(ctx: Context) -> None:
|
|
|
247
247
|
if not recipe.get("cookingtime") or not isinstance(recipe["cookingtime"], int):
|
|
248
248
|
errors.append(f"Recipe #{i} in RESULT_OF_CRAFTING should have an int 'cookingtime' key for '{item}'")
|
|
249
249
|
|
|
250
|
-
# Check the result count
|
|
251
|
-
if (not recipe.get("result_count") or not isinstance(recipe["result_count"], int)) and (recipe.get("type") not in ("smithing_trim",)):
|
|
252
|
-
errors.append(f"Recipe #{i} in RESULT_OF_CRAFTING should have an int 'result_count' key for '{item}'")
|
|
253
|
-
|
|
254
250
|
# Check the PAINTING_DATA key
|
|
255
251
|
if data.get(PAINTING_DATA):
|
|
256
252
|
if data["id"] != "minecraft:painting":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_d.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_de.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dew.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dn.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dne.json
RENAMED
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dns.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnw.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ds.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dse.json
RENAMED
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsw.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dw.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_e.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ew.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_n.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ne.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_new.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ns.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nse.json
RENAMED
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsw.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nw.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_s.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_se.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sew.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sw.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_u.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ud.json
RENAMED
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ude.json
RENAMED
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udn.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uds.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stewbeet-2.2.8 → stewbeet-2.2.10}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udw.json
RENAMED
|
File without changes
|