stewbeet 2.1.2__tar.gz → 2.1.3__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.1.2 → stewbeet-2.1.3}/PKG-INFO +6 -6
- {stewbeet-2.1.2 → stewbeet-2.1.3}/pyproject.toml +6 -6
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/smart_ore_generation.py +210 -206
- stewbeet-2.1.3/stewbeet/plugins/auto/headers/__init__.py +43 -0
- stewbeet-2.1.3/stewbeet/plugins/auto/headers/context_analyzer.py +99 -0
- stewbeet-2.1.3/stewbeet/plugins/auto/headers/execution_parser.py +212 -0
- stewbeet-2.1.3/stewbeet/plugins/auto/headers/function_analyzer.py +92 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/auto/headers/object.py +21 -2
- stewbeet-2.1.3/stewbeet/plugins/datapack/sorters/mod.mcdoc +30 -0
- stewbeet-2.1.2/stewbeet/plugins/auto/headers/__init__.py +0 -82
- {stewbeet-2.1.2 → stewbeet-2.1.3}/.gitignore +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/LICENSE +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/README.md +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/__main__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/all.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/cli.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/continuous_delivery/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/continuous_delivery/cd_utils.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/continuous_delivery/github.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/continuous_delivery/modrinth.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/continuous_delivery/pmc.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/continuous_delivery/smithed.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/balancing.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/batteries.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/cables.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_d.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_de.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dn.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dne.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dns.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnse.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ds.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dse.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_e.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_n.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ne.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_new.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ns.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nse.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_s.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_se.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_u.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ud.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ude.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udn.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udne.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udns.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnse.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uds.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udse.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ue.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_un.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_une.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uns.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unse.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_us.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_use.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usew.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uw.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_cable_models/variant_w.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/energy_lib_calls.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/gui.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/item_cable_models/cable.bbmodel +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/item_cable_models/cable_base.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/contrib/simplenergy/wrench.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/__memory__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/constants.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/completion.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/equipments.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/materials.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/records.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/simplenergy.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/definitions_helper/text.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/ingredients.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/utils/io.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/core/utils/sounds.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/bookshelf.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/bookshelf_config.json +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/archive/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/auto/lang_file/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/auto/lang_file/utils.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/custom_recipes/pulverizer.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/custom_blocks/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/loading/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/sorters/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/sorters/constants.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/sorters/extend_datapack.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/sorters/match.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/sorters/quick_sort.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/datapack/sorters/selection_sort.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/finalyze/dependencies/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/finalyze/last_final/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/book_components.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/craft_content.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/image_utils.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/iso_renders.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/main.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/other_utils.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/shared_import.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/showcase_image.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/initialize/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/initialize/source_lore_font.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/resource_pack/item_models/object.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/plugins/verify_definitions/__init__.py +0 -0
- {stewbeet-2.1.2 → stewbeet-2.1.3}/stewbeet/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stewbeet
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.3
|
|
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
|
|
@@ -11,14 +11,14 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
11
11
|
Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Requires-Python: >=3.12
|
|
14
|
-
Requires-Dist: beet>=0.
|
|
15
|
-
Requires-Dist: bolt>=0.49.
|
|
16
|
-
Requires-Dist: mecha>=0.
|
|
17
|
-
Requires-Dist: model-resolver>=1.
|
|
14
|
+
Requires-Dist: beet>=0.111.0
|
|
15
|
+
Requires-Dist: bolt>=0.49.2
|
|
16
|
+
Requires-Dist: mecha>=0.99.0
|
|
17
|
+
Requires-Dist: model-resolver>=1.10.0
|
|
18
18
|
Requires-Dist: mutagen>=1.47.0
|
|
19
19
|
Requires-Dist: pyperclip>=1.8.0
|
|
20
20
|
Requires-Dist: smithed>=0.19.0
|
|
21
|
-
Requires-Dist: stouputils>=1.3.
|
|
21
|
+
Requires-Dist: stouputils>=1.3.20
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
|
|
24
24
|
|
|
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
|
|
|
5
5
|
|
|
6
6
|
[project]
|
|
7
7
|
name = "stewbeet"
|
|
8
|
-
version = "2.1.
|
|
8
|
+
version = "2.1.3"
|
|
9
9
|
description = "Beet Framework made to help generating advanced Minecraft datapack contents"
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
license = "MIT"
|
|
@@ -16,11 +16,11 @@ classifiers = [
|
|
|
16
16
|
"Operating System :: OS Independent",
|
|
17
17
|
]
|
|
18
18
|
dependencies = [
|
|
19
|
-
"stouputils>=1.3.
|
|
20
|
-
"model_resolver>=1.
|
|
21
|
-
"beet>=0.
|
|
22
|
-
"bolt>=0.49.
|
|
23
|
-
"mecha>=0.
|
|
19
|
+
"stouputils>=1.3.20",
|
|
20
|
+
"model_resolver>=1.10.0",
|
|
21
|
+
"beet>=0.111.0",
|
|
22
|
+
"bolt>=0.49.2",
|
|
23
|
+
"mecha>=0.99.0",
|
|
24
24
|
"smithed>=0.19.0",
|
|
25
25
|
"mutagen>=1.47.0",
|
|
26
26
|
"pyperclip>=1.8.0",
|
|
@@ -1,206 +1,210 @@
|
|
|
1
|
-
|
|
2
|
-
# Imports
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from stouputils.print import debug, error
|
|
6
|
-
|
|
7
|
-
from ..__memory__ import Mem
|
|
8
|
-
from ..constants import official_lib_used
|
|
9
|
-
from ..utils.io import write_function
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class CustomOreGeneration:
|
|
13
|
-
def __init__(
|
|
14
|
-
self,
|
|
15
|
-
dimensions: list[str],
|
|
16
|
-
maximum_height: int = 70,
|
|
17
|
-
minimum_height: int | None = None,
|
|
18
|
-
veins_per_region:
|
|
19
|
-
vein_size_logic: float = 0.4,
|
|
20
|
-
provider: str | list[str] = "#minecraft:overworld_carver_replaceables",
|
|
21
|
-
placer_command: str = ""
|
|
22
|
-
) -> None:
|
|
23
|
-
""" Creates a custom ore generation configuration.
|
|
24
|
-
|
|
25
|
-
Args:
|
|
26
|
-
dimensions
|
|
27
|
-
maximum_height
|
|
28
|
-
minimum_height
|
|
29
|
-
veins_per_region
|
|
30
|
-
vein_size_logic
|
|
31
|
-
provider
|
|
32
|
-
placer_command
|
|
33
|
-
"""
|
|
34
|
-
self.dimensions: list[str] = dimensions
|
|
35
|
-
self.maximum_height: int = maximum_height
|
|
36
|
-
self.minimum_height: int|None = minimum_height
|
|
37
|
-
self.veins_per_region:
|
|
38
|
-
self.vein_size_logic: float = vein_size_logic
|
|
39
|
-
self.provider: str|list[str] = provider
|
|
40
|
-
self.placer_command: str = placer_command
|
|
41
|
-
if not official_lib_used("smart_ore_generation"):
|
|
42
|
-
debug("Found custom ore generation, adding 'smart_ore_generation' dependency")
|
|
43
|
-
self.check_validity()
|
|
44
|
-
|
|
45
|
-
def check_validity(self) -> None:
|
|
46
|
-
""" Check if the custom ore generation configuration is valid """
|
|
47
|
-
if not isinstance(self.dimensions, list) or not all(isinstance(dimension, str) for dimension in self.dimensions):
|
|
48
|
-
error("Custom ore generation 'dimensions' must be a list of strings")
|
|
49
|
-
if not isinstance(self.maximum_height, int):
|
|
50
|
-
error("Custom ore generation 'maximum_height' must be an integer")
|
|
51
|
-
if self.minimum_height is not None and not isinstance(self.minimum_height, int):
|
|
52
|
-
error("Custom ore generation 'minimum_height' must be an integer or None")
|
|
53
|
-
elif self.minimum_height is not None and self.minimum_height > self.maximum_height:
|
|
54
|
-
error("Custom ore generation 'minimum_height' must be less or equal to 'maximum_height'")
|
|
55
|
-
if not isinstance(self.veins_per_region, int):
|
|
56
|
-
error("Custom ore generation 'veins_per_region' must be
|
|
57
|
-
if not isinstance(self.vein_size_logic, float) or self.vein_size_logic < 0:
|
|
58
|
-
error("Custom ore generation 'vein_size_logic' must be a float >= 0")
|
|
59
|
-
if not isinstance(self.provider, str) and not isinstance(self.provider, list):
|
|
60
|
-
error("Custom ore generation 'provider' must be a string or a list of strings")
|
|
61
|
-
if isinstance(self.provider, list) and not all(isinstance(provider, str) for provider in self.provider):
|
|
62
|
-
error("Custom ore generation 'provider' must be a list of strings")
|
|
63
|
-
if not isinstance(self.placer_command, str):
|
|
64
|
-
error("Custom ore generation 'placer_command' must be a string")
|
|
65
|
-
|
|
66
|
-
def generate_files(self, custom_ore: str, number: int | None = None) -> None:
|
|
67
|
-
""" Generate the files for the custom ore generation.
|
|
68
|
-
|
|
69
|
-
Args:
|
|
70
|
-
custom_ore (str): The custom ore to generate, ex: "adamantium_ore"
|
|
71
|
-
number (int|None): (optional) The number of the custom ore to generate, ex: 1 for "adamantium_ore_1", used when having multiple configurations for the same ore
|
|
72
|
-
"""
|
|
73
|
-
# Setup basic variables
|
|
74
|
-
beautify_ore: str = custom_ore.replace("_", " ").title()
|
|
75
|
-
vein_name: str = custom_ore + ('' if number is None else f"_{number}")
|
|
76
|
-
vein_path: str = f"{Mem.ctx.project_id}:calls/smart_ore_generation/veins/{vein_name}"
|
|
77
|
-
|
|
78
|
-
# Setup placer command
|
|
79
|
-
self._setup_placer_command(custom_ore)
|
|
80
|
-
|
|
81
|
-
# Generate main ore generation function
|
|
82
|
-
self._generate_main_function(beautify_ore, vein_path)
|
|
83
|
-
|
|
84
|
-
# Generate vein function
|
|
85
|
-
self._generate_vein_function(beautify_ore, vein_path)
|
|
86
|
-
|
|
87
|
-
def _setup_placer_command(self, custom_ore: str) -> None:
|
|
88
|
-
""" Setup the placer command for the ore generation.
|
|
89
|
-
|
|
90
|
-
Args:
|
|
91
|
-
custom_ore (str): The custom ore to generate
|
|
92
|
-
"""
|
|
93
|
-
if not self.placer_command:
|
|
94
|
-
self.placer_command = f"run function {Mem.ctx.project_id}:custom_blocks/{custom_ore}/place_main"
|
|
95
|
-
|
|
96
|
-
# Handle deepslate variants
|
|
97
|
-
if custom_ore.startswith("deepslate_") and custom_ore.replace("deepslate_", "") in Mem.definitions:
|
|
98
|
-
self.placer_command = "unless block ~ ~ ~ minecraft:stone " + self.placer_command
|
|
99
|
-
elif f"deepslate_{custom_ore}" in Mem.definitions:
|
|
100
|
-
self.placer_command = "unless block ~ ~ ~ minecraft:deepslate " + self.placer_command
|
|
101
|
-
|
|
102
|
-
def _generate_main_function(self, beautify_ore: str, vein_path: str) -> None:
|
|
103
|
-
""" Generate the main ore generation function.
|
|
104
|
-
|
|
105
|
-
Args:
|
|
106
|
-
beautify_ore (str): The beautified ore name
|
|
107
|
-
vein_path (str): The path to the vein function
|
|
108
|
-
"""
|
|
109
|
-
# Generate dimensions check
|
|
110
|
-
dimensions_check: str = ""
|
|
111
|
-
for index, dimension in enumerate(self.dimensions):
|
|
112
|
-
dimensions_check += f"\nexecute if dimension {dimension} run scoreboard players set #dimension smart_ore_generation.data {index}"
|
|
113
|
-
|
|
114
|
-
# Generate minimum height operation
|
|
115
|
-
op_mini: str = (
|
|
116
|
-
"scoreboard players operation #min_height smart_ore_generation.data = _OVERWORLD_BOTTOM smart_ore_generation.data"
|
|
117
|
-
if self.minimum_height is None
|
|
118
|
-
else f"scoreboard players set #min_height smart_ore_generation.data {self.minimum_height}"
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
# Generate content
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
{
|
|
126
|
-
scoreboard players set #
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
1
|
+
|
|
2
|
+
# Imports
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from stouputils.print import debug, error
|
|
6
|
+
|
|
7
|
+
from ..__memory__ import Mem
|
|
8
|
+
from ..constants import official_lib_used
|
|
9
|
+
from ..utils.io import write_function
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CustomOreGeneration:
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
dimensions: list[str],
|
|
16
|
+
maximum_height: int = 70,
|
|
17
|
+
minimum_height: int | None = None,
|
|
18
|
+
veins_per_region: float = 4,
|
|
19
|
+
vein_size_logic: float = 0.4,
|
|
20
|
+
provider: str | list[str] = "#minecraft:overworld_carver_replaceables",
|
|
21
|
+
placer_command: str = ""
|
|
22
|
+
) -> None:
|
|
23
|
+
""" Creates a custom ore generation configuration.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
dimensions (list[str]): The dimensions to generate the ore in (ex: ["minecraft:overworld"])
|
|
27
|
+
maximum_height (int): The maximum height the ore can generate at
|
|
28
|
+
minimum_height (int|None): The minimum height the ore can generate at (default: None for bedrock to maximum_height)
|
|
29
|
+
veins_per_region (float): The number of veins per region
|
|
30
|
+
vein_size_logic (float): The logic to calculate the vein size, higher = more ores
|
|
31
|
+
provider (str|list[str]): The block or block tag to check for the ore to generate (default is same as vanilla ores in overworld), can be either a string or a list of strings
|
|
32
|
+
placer_command (str): The placer command to use for the ore generation, usually a function to place the custom ore but can be anything, default is autogenerated
|
|
33
|
+
"""
|
|
34
|
+
self.dimensions: list[str] = dimensions
|
|
35
|
+
self.maximum_height: int = maximum_height
|
|
36
|
+
self.minimum_height: int|None = minimum_height
|
|
37
|
+
self.veins_per_region: float = veins_per_region
|
|
38
|
+
self.vein_size_logic: float = vein_size_logic
|
|
39
|
+
self.provider: str|list[str] = provider
|
|
40
|
+
self.placer_command: str = placer_command
|
|
41
|
+
if not official_lib_used("smart_ore_generation"):
|
|
42
|
+
debug("Found custom ore generation, adding 'smart_ore_generation' dependency")
|
|
43
|
+
self.check_validity()
|
|
44
|
+
|
|
45
|
+
def check_validity(self) -> None:
|
|
46
|
+
""" Check if the custom ore generation configuration is valid """
|
|
47
|
+
if not isinstance(self.dimensions, list) or not all(isinstance(dimension, str) for dimension in self.dimensions):
|
|
48
|
+
error("Custom ore generation 'dimensions' must be a list of strings")
|
|
49
|
+
if not isinstance(self.maximum_height, int):
|
|
50
|
+
error("Custom ore generation 'maximum_height' must be an integer")
|
|
51
|
+
if self.minimum_height is not None and not isinstance(self.minimum_height, int):
|
|
52
|
+
error("Custom ore generation 'minimum_height' must be an integer or None")
|
|
53
|
+
elif self.minimum_height is not None and self.minimum_height > self.maximum_height:
|
|
54
|
+
error("Custom ore generation 'minimum_height' must be less or equal to 'maximum_height'")
|
|
55
|
+
if not isinstance(self.veins_per_region, float | int):
|
|
56
|
+
error("Custom ore generation 'veins_per_region' must be a float")
|
|
57
|
+
if not isinstance(self.vein_size_logic, float) or self.vein_size_logic < 0:
|
|
58
|
+
error("Custom ore generation 'vein_size_logic' must be a float >= 0")
|
|
59
|
+
if not isinstance(self.provider, str) and not isinstance(self.provider, list):
|
|
60
|
+
error("Custom ore generation 'provider' must be a string or a list of strings")
|
|
61
|
+
if isinstance(self.provider, list) and not all(isinstance(provider, str) for provider in self.provider):
|
|
62
|
+
error("Custom ore generation 'provider' must be a list of strings")
|
|
63
|
+
if not isinstance(self.placer_command, str):
|
|
64
|
+
error("Custom ore generation 'placer_command' must be a string")
|
|
65
|
+
|
|
66
|
+
def generate_files(self, custom_ore: str, number: int | None = None) -> None:
|
|
67
|
+
""" Generate the files for the custom ore generation.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
custom_ore (str): The custom ore to generate, ex: "adamantium_ore"
|
|
71
|
+
number (int|None): (optional) The number of the custom ore to generate, ex: 1 for "adamantium_ore_1", used when having multiple configurations for the same ore
|
|
72
|
+
"""
|
|
73
|
+
# Setup basic variables
|
|
74
|
+
beautify_ore: str = custom_ore.replace("_", " ").title()
|
|
75
|
+
vein_name: str = custom_ore + ('' if number is None else f"_{number}")
|
|
76
|
+
vein_path: str = f"{Mem.ctx.project_id}:calls/smart_ore_generation/veins/{vein_name}"
|
|
77
|
+
|
|
78
|
+
# Setup placer command
|
|
79
|
+
self._setup_placer_command(custom_ore)
|
|
80
|
+
|
|
81
|
+
# Generate main ore generation function
|
|
82
|
+
self._generate_main_function(beautify_ore, vein_path)
|
|
83
|
+
|
|
84
|
+
# Generate vein function
|
|
85
|
+
self._generate_vein_function(beautify_ore, vein_path)
|
|
86
|
+
|
|
87
|
+
def _setup_placer_command(self, custom_ore: str) -> None:
|
|
88
|
+
""" Setup the placer command for the ore generation.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
custom_ore (str): The custom ore to generate
|
|
92
|
+
"""
|
|
93
|
+
if not self.placer_command:
|
|
94
|
+
self.placer_command = f"run function {Mem.ctx.project_id}:custom_blocks/{custom_ore}/place_main"
|
|
95
|
+
|
|
96
|
+
# Handle deepslate variants
|
|
97
|
+
if custom_ore.startswith("deepslate_") and custom_ore.replace("deepslate_", "") in Mem.definitions:
|
|
98
|
+
self.placer_command = "unless block ~ ~ ~ minecraft:stone " + self.placer_command
|
|
99
|
+
elif f"deepslate_{custom_ore}" in Mem.definitions:
|
|
100
|
+
self.placer_command = "unless block ~ ~ ~ minecraft:deepslate " + self.placer_command
|
|
101
|
+
|
|
102
|
+
def _generate_main_function(self, beautify_ore: str, vein_path: str) -> None:
|
|
103
|
+
""" Generate the main ore generation function.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
beautify_ore (str): The beautified ore name
|
|
107
|
+
vein_path (str): The path to the vein function
|
|
108
|
+
"""
|
|
109
|
+
# Generate dimensions check
|
|
110
|
+
dimensions_check: str = ""
|
|
111
|
+
for index, dimension in enumerate(self.dimensions):
|
|
112
|
+
dimensions_check += f"\nexecute if dimension {dimension} run scoreboard players set #dimension smart_ore_generation.data {index}"
|
|
113
|
+
|
|
114
|
+
# Generate minimum height operation
|
|
115
|
+
op_mini: str = (
|
|
116
|
+
"scoreboard players operation #min_height smart_ore_generation.data = _OVERWORLD_BOTTOM smart_ore_generation.data"
|
|
117
|
+
if self.minimum_height is None
|
|
118
|
+
else f"scoreboard players set #min_height smart_ore_generation.data {self.minimum_height}"
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# Generate content (if 3.5, we add 3 lines and another with 0.5 chance)
|
|
122
|
+
int_veins_per_region: int = int(self.veins_per_region)
|
|
123
|
+
remaining_veins: float = self.veins_per_region - int_veins_per_region
|
|
124
|
+
content: str = f"""
|
|
125
|
+
# Generate {beautify_ore} (x{self.veins_per_region})
|
|
126
|
+
scoreboard players set #dimension smart_ore_generation.data -1{dimensions_check}
|
|
127
|
+
{op_mini}
|
|
128
|
+
scoreboard players set #max_height smart_ore_generation.data {self.maximum_height}
|
|
129
|
+
"""
|
|
130
|
+
place_vein: str = f"execute if score #dimension smart_ore_generation.data matches 0.. run function {vein_path}\n"
|
|
131
|
+
content += int_veins_per_region * place_vein
|
|
132
|
+
if remaining_veins > 0:
|
|
133
|
+
content += f"execute if score #dimension smart_ore_generation.data matches 0.. if predicate {{condition:\"minecraft:random_chance\",chance:{remaining_veins:.5f}}} run function {vein_path}\n"
|
|
134
|
+
|
|
135
|
+
# Write file
|
|
136
|
+
write_function(f"{Mem.ctx.project_id}:calls/smart_ore_generation/generate_ores", content)
|
|
137
|
+
|
|
138
|
+
def _generate_vein_function(self, beautify_ore: str, vein_path: str) -> None:
|
|
139
|
+
""" Generate the vein function for ore generation.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
beautify_ore (str): The beautified ore name
|
|
143
|
+
vein_path (str): The path to the vein function
|
|
144
|
+
"""
|
|
145
|
+
# Generate base content
|
|
146
|
+
content: str = f"""
|
|
147
|
+
# Try to find a random position adjacent to air in the region to generate the ore
|
|
148
|
+
function #smart_ore_generation:v1/slots/random_position
|
|
149
|
+
|
|
150
|
+
# Placing {beautify_ore} patch
|
|
151
|
+
execute at @s if block ~ ~ ~ {self.provider} {self.placer_command}
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
# Add vein size logic if needed
|
|
155
|
+
if self.vein_size_logic > 0:
|
|
156
|
+
radius: float = self.vein_size_logic % 1
|
|
157
|
+
while radius <= self.vein_size_logic:
|
|
158
|
+
# Make a sphere of radius
|
|
159
|
+
for x in range(-1, 2):
|
|
160
|
+
for y in range(-1, 2):
|
|
161
|
+
for z in range(-1, 2):
|
|
162
|
+
content += f"execute at @s positioned ~{x*radius} ~{y*radius} ~{z*radius} if block ~ ~ ~ {self.provider} {self.placer_command}\n"
|
|
163
|
+
radius += 1
|
|
164
|
+
|
|
165
|
+
# Write file
|
|
166
|
+
write_function(vein_path, content)
|
|
167
|
+
|
|
168
|
+
@staticmethod
|
|
169
|
+
def all_with_config(ore_configs: dict[str, list[CustomOreGeneration]]) -> None:
|
|
170
|
+
""" Generate all custom ore generation files with the configurations provided
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
ore_configs (dict[str, list[CustomOreGeneration]]): The custom ore generation configurations, ex:
|
|
174
|
+
|
|
175
|
+
```py
|
|
176
|
+
{
|
|
177
|
+
"super_iron_ore": [
|
|
178
|
+
CustomOreGeneration(
|
|
179
|
+
dimensions = ["minecraft:overworld","stardust:cavern","some_other:dimension"],
|
|
180
|
+
maximum_height = 50,
|
|
181
|
+
minimum_height = 0,
|
|
182
|
+
veins_per_region = 2,
|
|
183
|
+
vein_size_logic = 0.4,
|
|
184
|
+
)
|
|
185
|
+
],
|
|
186
|
+
"deepslate_super_iron_ore": [
|
|
187
|
+
CustomOreGeneration(
|
|
188
|
+
dimensions = ["minecraft:overworld"],
|
|
189
|
+
maximum_height = 0,
|
|
190
|
+
veins_per_region = 2,
|
|
191
|
+
vein_size_logic = 0.4,
|
|
192
|
+
),
|
|
193
|
+
CustomOreGeneration(
|
|
194
|
+
dimensions = ["stardust:cavern"],
|
|
195
|
+
maximum_height = 0,
|
|
196
|
+
veins_per_region = 8,
|
|
197
|
+
vein_size_logic = 0.8,
|
|
198
|
+
)
|
|
199
|
+
], ...
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
"""
|
|
203
|
+
for ore, config_list in ore_configs.items():
|
|
204
|
+
for i, gen_config in enumerate(config_list):
|
|
205
|
+
if len(config_list) > 1:
|
|
206
|
+
gen_config.generate_files(ore, i)
|
|
207
|
+
else:
|
|
208
|
+
gen_config.generate_files(ore)
|
|
209
|
+
return
|
|
210
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
# Imports
|
|
3
|
+
from beet import Context
|
|
4
|
+
from stouputils.decorators import measure_time
|
|
5
|
+
from stouputils.print import progress
|
|
6
|
+
|
|
7
|
+
from ....core.__memory__ import Mem
|
|
8
|
+
from ....core.utils.io import read_function, write_function
|
|
9
|
+
from .object import Header
|
|
10
|
+
from .function_analyzer import FunctionAnalyzer
|
|
11
|
+
from .context_analyzer import ContextAnalyzer
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Main entry point
|
|
15
|
+
@measure_time(progress, message="Execution time of 'stewbeet.plugins.auto.headers'")
|
|
16
|
+
def beet_default(ctx: Context):
|
|
17
|
+
""" Main entry point for the headers plugin.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
ctx (Context): The beet context.
|
|
21
|
+
"""
|
|
22
|
+
if Mem.ctx is None:
|
|
23
|
+
Mem.ctx = ctx
|
|
24
|
+
|
|
25
|
+
# Get all mcfunctions paths and create Header objects
|
|
26
|
+
mcfunctions: dict[str, Header] = {}
|
|
27
|
+
for path in ctx.data.functions:
|
|
28
|
+
# Create a Header object from the function content
|
|
29
|
+
content: str = read_function(path)
|
|
30
|
+
mcfunctions[path] = Header.from_content(path, content)
|
|
31
|
+
|
|
32
|
+
# Analyze function relationships
|
|
33
|
+
function_analyzer = FunctionAnalyzer(ctx, mcfunctions)
|
|
34
|
+
function_analyzer.analyze_all_relationships()
|
|
35
|
+
|
|
36
|
+
# Analyze execution contexts
|
|
37
|
+
context_analyzer = ContextAnalyzer(mcfunctions)
|
|
38
|
+
context_analyzer.analyze_all_contexts()
|
|
39
|
+
|
|
40
|
+
# Write updated headers to all mcfunction files
|
|
41
|
+
for path, header in mcfunctions.items():
|
|
42
|
+
write_function(path, header.to_str(), overwrite=True)
|
|
43
|
+
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Context analysis utilities for determining execution contexts of Minecraft functions.
|
|
3
|
+
|
|
4
|
+
This module handles analyzing function call relationships and determining
|
|
5
|
+
the execution context based on caller information.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
# Imports
|
|
9
|
+
from .object import Header
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Class
|
|
13
|
+
class ContextAnalyzer:
|
|
14
|
+
""" Analyzes and determines execution contexts for Minecraft functions. """
|
|
15
|
+
|
|
16
|
+
def __init__(self, mcfunctions: dict[str, Header]):
|
|
17
|
+
""" Initialize the context analyzer.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
mcfunctions (dict[str, Header]): dictionary mapping function paths to Header objects
|
|
21
|
+
"""
|
|
22
|
+
self.mcfunctions = mcfunctions
|
|
23
|
+
self.execution_contexts: dict[str, str | None] = {}
|
|
24
|
+
|
|
25
|
+
def determine_execution_context(self, func_path: str, visited: set[str] | None = None) -> str | None:
|
|
26
|
+
""" Determine the execution context of a function based on its callers.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
func_path (str): The path of the function to analyze
|
|
30
|
+
visited (set[str] | None): Set of already visited functions to prevent infinite recursion
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
str | None: The execution context, or None if unknown
|
|
34
|
+
"""
|
|
35
|
+
if visited is None:
|
|
36
|
+
visited = set()
|
|
37
|
+
|
|
38
|
+
if func_path in visited:
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
if func_path in self.execution_contexts:
|
|
42
|
+
return self.execution_contexts[func_path]
|
|
43
|
+
|
|
44
|
+
visited.add(func_path)
|
|
45
|
+
|
|
46
|
+
if func_path not in self.mcfunctions:
|
|
47
|
+
return None
|
|
48
|
+
|
|
49
|
+
within = self.mcfunctions[func_path].within
|
|
50
|
+
|
|
51
|
+
# If no callers, default context
|
|
52
|
+
if not within:
|
|
53
|
+
self.execution_contexts[func_path] = None
|
|
54
|
+
return self.execution_contexts[func_path]
|
|
55
|
+
|
|
56
|
+
# Check for specific contexts
|
|
57
|
+
for caller in within:
|
|
58
|
+
# Advancement functions are executed as the player at current position
|
|
59
|
+
if caller.startswith("advancement "):
|
|
60
|
+
self.execution_contexts[func_path] = "as the player & at current position"
|
|
61
|
+
return self.execution_contexts[func_path]
|
|
62
|
+
|
|
63
|
+
# Tick and load tags have default context
|
|
64
|
+
if caller in ["#minecraft:tick", "#minecraft:load"]:
|
|
65
|
+
self.execution_contexts[func_path] = None
|
|
66
|
+
return self.execution_contexts[func_path]
|
|
67
|
+
|
|
68
|
+
# Check if caller has execution context in brackets
|
|
69
|
+
if " [" in caller and "]" in caller:
|
|
70
|
+
# Extract the execution context (must have space before [ to distinguish from NBT paths)
|
|
71
|
+
context_start = caller.find(" [")
|
|
72
|
+
context_end = caller.rfind("]") # Find the LAST ] not the first
|
|
73
|
+
if context_start != -1 and context_end != -1:
|
|
74
|
+
context = caller[context_start + 2:context_end] # +2 to skip " ["
|
|
75
|
+
# Only consider it an execution context if it contains execution keywords
|
|
76
|
+
if any(keyword in context for keyword in ["as ", "at ", "positioned ", "rotated ", "facing ", "in ", "anchored ", "align "]):
|
|
77
|
+
self.execution_contexts[func_path] = context
|
|
78
|
+
return self.execution_contexts[func_path]
|
|
79
|
+
|
|
80
|
+
# If called by another function, inherit its context
|
|
81
|
+
# Extract the function name (remove macros and context info)
|
|
82
|
+
base_caller = caller.split(" ")[0] # Get just the function path
|
|
83
|
+
if base_caller in self.mcfunctions:
|
|
84
|
+
parent_context = self.determine_execution_context(base_caller, visited.copy())
|
|
85
|
+
self.execution_contexts[func_path] = parent_context
|
|
86
|
+
return self.execution_contexts[func_path]
|
|
87
|
+
|
|
88
|
+
# Default context
|
|
89
|
+
self.execution_contexts[func_path] = None
|
|
90
|
+
return self.execution_contexts[func_path]
|
|
91
|
+
|
|
92
|
+
def analyze_all_contexts(self) -> None:
|
|
93
|
+
""" Analyze and determine execution contexts for all functions. """
|
|
94
|
+
for path in self.mcfunctions:
|
|
95
|
+
context = self.determine_execution_context(path)
|
|
96
|
+
# Only set the context if it's not None
|
|
97
|
+
if context is not None:
|
|
98
|
+
self.mcfunctions[path].executed = context
|
|
99
|
+
|