stewbeet 2.2.17__tar.gz → 2.2.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of stewbeet might be problematic. Click here for more details.
- {stewbeet-2.2.17 → stewbeet-2.2.18}/PKG-INFO +4 -4
- {stewbeet-2.2.17 → stewbeet-2.2.18}/pyproject.toml +4 -4
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/cli.py +4 -8
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/constants.py +7 -6
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/completion.py +6 -1
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/__init__.py +4 -1
- stewbeet-2.2.18/stewbeet/plugins/ingame_manual/assets/book.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/craft_content.py +25 -5
- stewbeet-2.2.18/stewbeet/plugins/ingame_manual/dialog.py +140 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/main.py +85 -54
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/shared_import.py +15 -13
- stewbeet-2.2.18/stewbeet/plugins/ingame_manual/templates/book.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/initialize/__init__.py +71 -30
- {stewbeet-2.2.17 → stewbeet-2.2.18}/.gitignore +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/LICENSE +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/README.md +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/__main__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/all.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/continuous_delivery/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/continuous_delivery/cd_utils.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/continuous_delivery/github.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/continuous_delivery/modrinth.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/continuous_delivery/pmc.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/continuous_delivery/smithed.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/balancing.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/batteries.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/cables.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_d.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_de.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dn.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dne.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dns.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnse.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnsw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dnw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ds.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dse.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dsw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_dw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_e.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_n.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ne.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_new.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ns.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nse.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nsw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_nw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_s.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_se.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_sw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_u.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ud.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ude.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udn.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udne.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udns.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnse.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnsw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udnw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uds.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udse.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udsw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_udw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_ue.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_un.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_une.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uns.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unse.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unsw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_unw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_us.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_use.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usew.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_usw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_uw.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_cable_models/variant_w.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/energy_lib_calls.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/gui.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/item_cable_models/cable.bbmodel +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/item_cable_models/cable_base.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/py.typed +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/base_block.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/base_item.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_block.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_connected.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/extract_item.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_block.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_connected.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/servo_mechanism_models/insert_item.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/contrib/simplenergy/wrench.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/__memory__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/equipments.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/materials.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/records.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/simplenergy.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/smart_ore_generation.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/definitions_helper/text.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/ingredients.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/utils/io.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/core/utils/sounds.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/bookshelf.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/bookshelf_config.json +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Bitwise.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Block.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Color.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Dump.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Environment.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Generation.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Health.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Hitbox.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Id.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Interaction.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Link.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Log.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Math.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Move.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Position.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Random.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Raycast.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Schedule.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Sidebar.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Spline.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf String.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Time.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Tree.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Vector.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf View.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Bookshelf Xp.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Common Signals.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Furnace NBT Recipes.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/ItemIO.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/SmartOreGeneration.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Smithed Crafter.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/datapack/Smithed Custom Block.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/dependencies/resource_pack/Smithed Crafter.zip +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/archive/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/auto/headers/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/auto/headers/context_analyzer.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/auto/headers/execution_parser.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/auto/headers/function_analyzer.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/auto/headers/object.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/auto/lang_file/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/auto/lang_file/utils.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/compatibilities/neo_enchant/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/compatibilities/simpledrawer/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/compute_sha1/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/copy_to_destination/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/custom_paintings/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/custom_recipes/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/custom_recipes/furnace.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/custom_recipes/pulverizer.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/custom_recipes/smithed.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/custom_recipes/vanilla.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/custom_blocks/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/loading/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/loot_tables/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/sorters/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/sorters/constants.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/sorters/extend_datapack.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/sorters/match.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/sorters/mod.mcdoc +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/sorters/quick_sort.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/datapack/sorters/selection_sort.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/finalyze/basic_datapack_structure/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/finalyze/check_unused_textures/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/finalyze/custom_blocks_ticking/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/finalyze/dependencies/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/finalyze/last_final/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/furnace.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/heavy_workbench.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/invisible_item.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/invisible_item_release.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/minecraft_font.ttf +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/mining.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/none.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/none_release.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/pulverizing.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/shaped_2x2.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/shaped_3x3.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/simple_case_no_border.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/stonecutting.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/wiki_information.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/wiki_ingredient_of_craft_template.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/wiki_mining_template.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/assets/wiki_result_of_craft.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/book_components.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/book_optimizer.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/image_utils.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/iso_renders.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/other_utils.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/page_font.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/showcase_image.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/.gitignore +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/_README.md +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/furnace.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/heavy_workbench.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/invisible_item.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/invisible_item_release.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/minecraft_font.ttf +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/mining.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/none.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/none_release.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/pulverizing.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/shaped_2x2.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/shaped_3x3.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/simple_case_no_border.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/stonecutting.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/wiki_information.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/wiki_ingredient_of_craft_template.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/wiki_mining_template.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/templates/wiki_result_of_craft.png +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/ingame_manual/text_components.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/initialize/source_lore_font.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/merge_smithed_weld/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/merge_smithed_weld/weld.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/resource_pack/check_power_of_2/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/resource_pack/item_models/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/resource_pack/item_models/object.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/resource_pack/sounds/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/plugins/verify_definitions/__init__.py +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/stewbeet/py.typed +0 -0
- {stewbeet-2.2.17 → stewbeet-2.2.18}/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.18
|
|
4
4
|
Summary: Beet Framework made to help generating advanced Minecraft datapack contents
|
|
5
5
|
Project-URL: Homepage, https://github.com/Stoupy51/stewbeet
|
|
6
6
|
Project-URL: Issues, https://github.com/Stoupy51/stewbeet/issues
|
|
@@ -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.
|
|
14
|
+
Requires-Dist: beet>=0.112.0
|
|
15
15
|
Requires-Dist: bolt>=0.49.2
|
|
16
16
|
Requires-Dist: mecha>=0.99.0
|
|
17
|
-
Requires-Dist: model-resolver>=1.11.
|
|
17
|
+
Requires-Dist: model-resolver>=1.11.1
|
|
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.
|
|
21
|
+
Requires-Dist: stouputils>=1.4.1
|
|
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.2.
|
|
8
|
+
version = "2.2.18"
|
|
9
9
|
description = "Beet Framework made to help generating advanced Minecraft datapack contents"
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
license = "MIT"
|
|
@@ -16,9 +16,9 @@ classifiers = [
|
|
|
16
16
|
"Operating System :: OS Independent",
|
|
17
17
|
]
|
|
18
18
|
dependencies = [
|
|
19
|
-
"stouputils>=1.
|
|
20
|
-
"model_resolver>=1.11.
|
|
21
|
-
"beet>=0.
|
|
19
|
+
"stouputils>=1.4.1",
|
|
20
|
+
"model_resolver>=1.11.1",
|
|
21
|
+
"beet>=0.112.0",
|
|
22
22
|
"bolt>=0.49.2",
|
|
23
23
|
"mecha>=0.99.0",
|
|
24
24
|
"smithed>=0.19.0",
|
|
@@ -5,27 +5,23 @@ import os
|
|
|
5
5
|
import shutil
|
|
6
6
|
import subprocess
|
|
7
7
|
import sys
|
|
8
|
-
from importlib.metadata import version
|
|
9
8
|
|
|
10
9
|
from beet import ProjectConfig
|
|
11
10
|
from stouputils.decorators import LogLevels, handle_error
|
|
12
|
-
from stouputils.print import GREEN, RED,
|
|
11
|
+
from stouputils.print import GREEN, RED, info, show_version
|
|
13
12
|
|
|
14
13
|
from .utils import get_project_config
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
@handle_error(message="Error while running 'stewbeet'")
|
|
18
17
|
def main():
|
|
19
|
-
second_arg: str = sys.argv[1] if len(sys.argv) == 2 else ""
|
|
18
|
+
second_arg: str = sys.argv[1].lower() if len(sys.argv) == 2 else ""
|
|
20
19
|
if second_arg == "" and len(sys.argv) == 1:
|
|
21
20
|
sys.argv.append("build")
|
|
22
21
|
|
|
23
22
|
# Print the version of stewbeet, beet, bolt, mecha, and stouputils
|
|
24
|
-
if second_arg
|
|
25
|
-
|
|
26
|
-
v: str = version(pkg).split("version: ")[-1]
|
|
27
|
-
print(f"{RED}{pkg} {GREEN}v{v}{RESET}")
|
|
28
|
-
return
|
|
23
|
+
if second_arg in ("--version", "-v", "version"):
|
|
24
|
+
return show_version("stewbeet", primary_color=RED, secondary_color=GREEN)
|
|
29
25
|
|
|
30
26
|
# Try to find and load the beet configuration file
|
|
31
27
|
cfg: ProjectConfig = get_project_config()
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
# Imports
|
|
4
4
|
from beet.core.utils import JsonDict
|
|
5
5
|
from beet.library import base
|
|
6
|
+
from beet.toolchain.config import FormatSpecifier
|
|
6
7
|
|
|
7
8
|
from ..dependencies.bookshelf import BOOKSHELF_MODULES
|
|
8
9
|
|
|
9
10
|
# Minecraft version specific constants
|
|
10
|
-
MORE_DATA_PACK_FORMATS: dict[tuple[int, ...],
|
|
11
|
+
MORE_DATA_PACK_FORMATS: dict[tuple[int, ...], FormatSpecifier] = {
|
|
11
12
|
(1, 21): 48,
|
|
12
13
|
(1, 21, 0): 48,
|
|
13
14
|
(1, 21, 1): 48,
|
|
@@ -18,10 +19,10 @@ MORE_DATA_PACK_FORMATS: dict[tuple[int, ...], int] = {
|
|
|
18
19
|
(1, 21, 6): 80,
|
|
19
20
|
(1, 21, 7): 81,
|
|
20
21
|
(1, 21, 8): 81,
|
|
21
|
-
(1, 21, 9): 88,
|
|
22
|
-
(1, 21, 10): 88,
|
|
22
|
+
(1, 21, 9): (88, 0),
|
|
23
|
+
(1, 21, 10): (88, 0),
|
|
23
24
|
}
|
|
24
|
-
MORE_ASSETS_PACK_FORMATS: dict[tuple[int, ...],
|
|
25
|
+
MORE_ASSETS_PACK_FORMATS: dict[tuple[int, ...], FormatSpecifier] = {
|
|
25
26
|
(1, 21): 34,
|
|
26
27
|
(1, 21, 0): 34,
|
|
27
28
|
(1, 21, 1): 34,
|
|
@@ -32,8 +33,8 @@ MORE_ASSETS_PACK_FORMATS: dict[tuple[int, ...], int] = {
|
|
|
32
33
|
(1, 21, 6): 63,
|
|
33
34
|
(1, 21, 7): 64,
|
|
34
35
|
(1, 21, 8): 64,
|
|
35
|
-
(1, 21, 9): 69,
|
|
36
|
-
(1, 21, 10): 69,
|
|
36
|
+
(1, 21, 9): (69, 0),
|
|
37
|
+
(1, 21, 10): (69, 0),
|
|
37
38
|
}
|
|
38
39
|
MORE_DATA_VERSIONS: dict[tuple[int, ...], int] = {
|
|
39
40
|
(1, 21): 3953,
|
|
@@ -78,13 +78,18 @@ def add_item_name_and_lore_if_missing(is_external: bool = False, black_list: lis
|
|
|
78
78
|
return
|
|
79
79
|
|
|
80
80
|
# Add private custom data for namespace
|
|
81
|
-
def add_private_custom_data_for_namespace(is_external: bool = False) -> None:
|
|
81
|
+
def add_private_custom_data_for_namespace(is_external: bool = False, black_list: list[str] | None = None) -> None:
|
|
82
82
|
""" Add private custom data for namespace to all items in the definitions if they are missing.
|
|
83
83
|
|
|
84
84
|
Args:
|
|
85
85
|
is_external (bool): Whether the definitions is the external one or not (meaning the namespace is in the item name).
|
|
86
|
+
black_list (list[str]): The list of items to ignore.
|
|
86
87
|
"""
|
|
88
|
+
if black_list is None:
|
|
89
|
+
black_list = []
|
|
87
90
|
for item, data in Mem.definitions.items():
|
|
91
|
+
if item in black_list:
|
|
92
|
+
continue
|
|
88
93
|
if not data.get("custom_data"):
|
|
89
94
|
data["custom_data"] = cast(JsonDict, {})
|
|
90
95
|
if is_external and ":" in item:
|
|
@@ -36,7 +36,7 @@ def beet_default(ctx: Context):
|
|
|
36
36
|
stewbeet: JsonDict = ctx.meta.get("stewbeet", {})
|
|
37
37
|
assert stewbeet, "stewbeet configuration is not set. Please set it in the project configuration."
|
|
38
38
|
assert stewbeet.get("textures_folder"), "Textures folder is not set. Please set it in the project configuration."
|
|
39
|
-
manual_config = stewbeet.get("manual", {})
|
|
39
|
+
manual_config: JsonDict = stewbeet.get("manual", {})
|
|
40
40
|
assert manual_config, "Manual configuration is not set. Please set it in the project configuration."
|
|
41
41
|
|
|
42
42
|
# Set up manual path
|
|
@@ -46,6 +46,9 @@ def beet_default(ctx: Context):
|
|
|
46
46
|
# Set up high resolution in the shared_import module
|
|
47
47
|
SharedMemory.high_resolution = manual_config.get("high_resolution", True)
|
|
48
48
|
|
|
49
|
+
# Set up use_dialog in the shared_import module
|
|
50
|
+
SharedMemory.use_dialog = manual_config.get("use_dialog", 0)
|
|
51
|
+
|
|
49
52
|
# Call the main manual generation function
|
|
50
53
|
manual_main()
|
|
51
54
|
|
|
Binary file
|
|
@@ -8,11 +8,11 @@ from ...core.ingredients import FURNACES_RECIPES_TYPES, ingr_to_id
|
|
|
8
8
|
from .book_components import get_item_component
|
|
9
9
|
from .other_utils import convert_shapeless_to_shaped, high_res_font_from_craft
|
|
10
10
|
from .page_font import generate_page_font
|
|
11
|
-
from .shared_import import FONT_FILE, INVISIBLE_ITEM_WIDTH, MICRO_NONE_FONT, SMALL_NONE_FONT, VERY_SMALL_NONE_FONT, SharedMemory
|
|
11
|
+
from .shared_import import FONT_FILE, INVISIBLE_ITEM_WIDTH, MICRO_NONE_FONT, NONE_FONT, SMALL_NONE_FONT, VERY_SMALL_NONE_FONT, SharedMemory
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
# Generate all craft types content
|
|
15
|
-
def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[TextComponent]:
|
|
15
|
+
def generate_craft_content(craft: JsonDict, name: str, page_font: str, in_lore: bool = False) -> list[TextComponent]:
|
|
16
16
|
""" Generate the content for the craft type
|
|
17
17
|
Args:
|
|
18
18
|
craft (JsonDict): The craft dictionary, ex: {"type": "crafting_shaped","result_count": 1,"category": "equipment","shape": ["XXX","X X"],"ingredients": {"X": {"components": {"custom_data": {"iyc": {"adamantium": true}}}}}}
|
|
@@ -32,11 +32,13 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
32
32
|
# If high resolution, get proper page font
|
|
33
33
|
if SharedMemory.high_resolution:
|
|
34
34
|
page_font = high_res_font_from_craft(craft)
|
|
35
|
+
use_dialog: bool = SharedMemory.use_dialog > 0 and not in_lore # In lore, we don't need to re-align the content
|
|
35
36
|
|
|
36
37
|
# Show up item title and page font
|
|
37
38
|
titled = name.replace("_", " ").title() + "\n"
|
|
38
39
|
content.append({"text": titled, "font": "minecraft:default", "color": "black", "underlined": True})
|
|
39
|
-
|
|
40
|
+
padding: str = MICRO_NONE_FONT if use_dialog else ""
|
|
41
|
+
content.append(SMALL_NONE_FONT + padding + page_font + "\n")
|
|
40
42
|
|
|
41
43
|
# Generate the image for the page
|
|
42
44
|
generate_page_font(name, page_font, craft)
|
|
@@ -55,6 +57,7 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
55
57
|
# If the craft is shaped
|
|
56
58
|
if craft_type == "crafting_shaped":
|
|
57
59
|
shape: list[str] = craft["shape"]
|
|
60
|
+
is_small_craft: bool = len(shape) <= 2 and all(len(x) <= 2 for x in shape)
|
|
58
61
|
|
|
59
62
|
# Convert each ingredients to its text component
|
|
60
63
|
formatted_ingredients: dict[str, JsonDict] = {}
|
|
@@ -72,7 +75,7 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
72
75
|
shape = [" " + line + " " for line in shape]
|
|
73
76
|
|
|
74
77
|
# Add each ingredient to the craft
|
|
75
|
-
for line in shape:
|
|
78
|
+
for index, line in enumerate(shape):
|
|
76
79
|
for i in range(2): # We need two lines to make a square, otherwise it will be a rectangle
|
|
77
80
|
content.append(SMALL_NONE_FONT)
|
|
78
81
|
for k in line:
|
|
@@ -85,13 +88,16 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
85
88
|
copy = formatted_ingredients[k].copy()
|
|
86
89
|
copy["text"] = INVISIBLE_ITEM_WIDTH
|
|
87
90
|
content.append(copy)
|
|
91
|
+
if use_dialog and index != 1 and (not is_small_craft or i != 1):
|
|
92
|
+
content.append(INVISIBLE_ITEM_WIDTH * max(0, (2 if is_small_craft else 3) - len(line)))
|
|
93
|
+
content.append(NONE_FONT * 2)
|
|
88
94
|
content.append("\n")
|
|
89
95
|
if len(shape) == 1 and len(shape[0]) < 3:
|
|
90
96
|
content.append("\n")
|
|
91
97
|
pass
|
|
92
98
|
|
|
93
99
|
# Add the result to the craft
|
|
94
|
-
if
|
|
100
|
+
if is_small_craft:
|
|
95
101
|
|
|
96
102
|
# First layer of the square
|
|
97
103
|
len_1 = len(shape[0])
|
|
@@ -99,6 +105,9 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
99
105
|
break_line_pos = content.index("\n", content.index("\n") + 1) # Find the second line break
|
|
100
106
|
content.insert(break_line_pos, (INVISIBLE_ITEM_WIDTH * offset_1))
|
|
101
107
|
content.insert(break_line_pos + 1, result_component)
|
|
108
|
+
if use_dialog:
|
|
109
|
+
content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
|
|
110
|
+
break_line_pos += 1
|
|
102
111
|
|
|
103
112
|
# Second layer of the square
|
|
104
113
|
len_2 = len(shape[1]) if len(shape) > 1 else 0
|
|
@@ -110,6 +119,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
110
119
|
copy = result_component.copy()
|
|
111
120
|
copy["text"] = INVISIBLE_ITEM_WIDTH
|
|
112
121
|
content.insert(break_line_pos + 1, copy)
|
|
122
|
+
if use_dialog:
|
|
123
|
+
content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
|
|
113
124
|
else:
|
|
114
125
|
# First layer of the square
|
|
115
126
|
len_line = len(shape[1]) if len(shape) > 1 else 0
|
|
@@ -122,6 +133,9 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
122
133
|
break_line_pos = len(content)
|
|
123
134
|
content.insert(break_line_pos, (INVISIBLE_ITEM_WIDTH * (offset - 1) + SMALL_NONE_FONT * 2))
|
|
124
135
|
content.insert(break_line_pos + 1, result_component)
|
|
136
|
+
if use_dialog:
|
|
137
|
+
content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
|
|
138
|
+
break_line_pos += 1
|
|
125
139
|
|
|
126
140
|
# Second layer of the square
|
|
127
141
|
try:
|
|
@@ -133,6 +147,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
133
147
|
copy = result_component.copy()
|
|
134
148
|
copy["text"] = INVISIBLE_ITEM_WIDTH
|
|
135
149
|
content.insert(break_line_pos + 1, copy)
|
|
150
|
+
if use_dialog:
|
|
151
|
+
content.insert(break_line_pos + 2, VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
|
|
136
152
|
|
|
137
153
|
# Add break lines for the third layer of a 3x3 craft
|
|
138
154
|
if len(shape) < 3 and len(shape[0]) == 3:
|
|
@@ -167,6 +183,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
167
183
|
copy = result_component.copy()
|
|
168
184
|
copy["text"] = INVISIBLE_ITEM_WIDTH
|
|
169
185
|
content.append(copy)
|
|
186
|
+
if use_dialog:
|
|
187
|
+
content.append(VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
|
|
170
188
|
content.append("\n")
|
|
171
189
|
content.append("\n\n")
|
|
172
190
|
|
|
@@ -291,6 +309,8 @@ def generate_craft_content(craft: JsonDict, name: str, page_font: str) -> list[T
|
|
|
291
309
|
copy = result_component.copy()
|
|
292
310
|
copy["text"] = INVISIBLE_ITEM_WIDTH
|
|
293
311
|
content.append(copy)
|
|
312
|
+
if use_dialog:
|
|
313
|
+
content.append(VERY_SMALL_NONE_FONT + MICRO_NONE_FONT)
|
|
294
314
|
content.append("\n")
|
|
295
315
|
content.append("\n")
|
|
296
316
|
pass
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Handles generation of dialogs based of book content
|
|
3
|
+
"""
|
|
4
|
+
from beet import Advancement, Dialog, DialogTag
|
|
5
|
+
from beet.core.utils import JsonDict, TextComponent
|
|
6
|
+
|
|
7
|
+
from ...core import Mem, set_json_encoder, write_function, write_load_file
|
|
8
|
+
from .shared_import import BOOK_FONT, NONE_FONT, SharedMemory
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Utility Function
|
|
12
|
+
def change_page_to_show_dialog(element: TextComponent, ns: str) -> None:
|
|
13
|
+
if isinstance(element, dict) and "click_event" in element and element["click_event"]["action"] == "change_page":
|
|
14
|
+
change_page: int = element["click_event"]["page"]
|
|
15
|
+
element["click_event"] = {"action": "show_dialog", "dialog": f"{ns}:manual/page_{change_page}"}
|
|
16
|
+
elif isinstance(element, list):
|
|
17
|
+
for sub_element in element:
|
|
18
|
+
change_page_to_show_dialog(sub_element, ns)
|
|
19
|
+
|
|
20
|
+
# Function
|
|
21
|
+
def generate_dialogs(book_content: list[list[TextComponent]]) -> None:
|
|
22
|
+
ns: str = Mem.ctx.project_id
|
|
23
|
+
|
|
24
|
+
# Generate dialogs for each page
|
|
25
|
+
dialog_ids: list[str] = []
|
|
26
|
+
for page_index, page in enumerate(book_content):
|
|
27
|
+
dialog_id: str = f"manual/page_{page_index + 1}"
|
|
28
|
+
dialog_ids.append(f"{ns}:{dialog_id}")
|
|
29
|
+
|
|
30
|
+
# Previous and next page indexes
|
|
31
|
+
prev_index: int = page_index - 1 if page_index > 0 else 0
|
|
32
|
+
next_index: int = page_index + 1 if page_index + 1 < len(book_content) else page_index
|
|
33
|
+
prev_dialog_id: str = f"{ns}:manual/page_{prev_index + 1}"
|
|
34
|
+
next_dialog_id: str = f"{ns}:manual/page_{next_index + 1}"
|
|
35
|
+
|
|
36
|
+
# Get title
|
|
37
|
+
title: TextComponent = page[1]
|
|
38
|
+
if isinstance(title, dict):
|
|
39
|
+
title = str(title.get("text", "")).replace("\n", "")
|
|
40
|
+
else:
|
|
41
|
+
title = str(title).replace("\n", "")
|
|
42
|
+
if len(title.strip()) < 2:
|
|
43
|
+
title = page[2]
|
|
44
|
+
if isinstance(title, dict):
|
|
45
|
+
title = str(title.get("text", "")).replace("\n", "")
|
|
46
|
+
page = page[:1] + page[2:] # Remove title from body if taken from body
|
|
47
|
+
|
|
48
|
+
# Generate the new body content
|
|
49
|
+
new_content: list[TextComponent] = [{"text":"","font": f"{ns}:manual", "color": "white", "shadow_color": [0]*4}] # Initial font and color
|
|
50
|
+
if len(page) > 2:
|
|
51
|
+
page = page[2:] # Remove first two elements
|
|
52
|
+
|
|
53
|
+
# Modify click events to show dialog instead of changing page
|
|
54
|
+
change_page_to_show_dialog(page, ns)
|
|
55
|
+
|
|
56
|
+
# Add to new content
|
|
57
|
+
new_content.extend(page)
|
|
58
|
+
|
|
59
|
+
# Add padding to avoid texture cutoff
|
|
60
|
+
def count_breaklines(element: TextComponent) -> int:
|
|
61
|
+
if isinstance(element, dict):
|
|
62
|
+
return count_breaklines(element.get("text", ""))
|
|
63
|
+
elif isinstance(element, list):
|
|
64
|
+
return sum(count_breaklines(sub_element) for sub_element in element)
|
|
65
|
+
return str(element).count("\n")
|
|
66
|
+
nb_breaklines_to_add: int = max(0, 20 - count_breaklines(new_content))
|
|
67
|
+
if nb_breaklines_to_add > 0:
|
|
68
|
+
new_content.append("\n"*nb_breaklines_to_add)
|
|
69
|
+
|
|
70
|
+
# Create dialog
|
|
71
|
+
dialog: JsonDict = {
|
|
72
|
+
"type": "minecraft:notice",
|
|
73
|
+
"title": {"text": title, "underlined": True},
|
|
74
|
+
"body": [
|
|
75
|
+
{
|
|
76
|
+
"type": "minecraft:plain_message",
|
|
77
|
+
"contents": [
|
|
78
|
+
{"text": BOOK_FONT + NONE_FONT*3, "font": f"{ns}:manual", "color": "white"},
|
|
79
|
+
*(2 * [
|
|
80
|
+
{"text": "\n" + NONE_FONT*3, "click_event": {"action": "show_dialog", "dialog": prev_dialog_id},
|
|
81
|
+
"hover_event": {"action": "show_text", "value": [{"text": "Go to previous page"}, {"text": f" ({prev_index + 1})"}]}},
|
|
82
|
+
NONE_FONT,
|
|
83
|
+
{"text": NONE_FONT*3, "click_event": {"action": "show_dialog", "dialog": next_dialog_id},
|
|
84
|
+
"hover_event": {"action": "show_text", "value": [{"text": "Go to next page"}, {"text": f" ({next_index + 1})"}]}}
|
|
85
|
+
])
|
|
86
|
+
],
|
|
87
|
+
"width": 400
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"type": "minecraft:plain_message",
|
|
91
|
+
"contents": new_content,
|
|
92
|
+
"width": 150
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
}
|
|
96
|
+
Mem.ctx.data[ns].dialogs[dialog_id] = set_json_encoder(Dialog(dialog), max_level=4)
|
|
97
|
+
pass
|
|
98
|
+
|
|
99
|
+
# Generate an advancement detecting when the manual is opened
|
|
100
|
+
if SharedMemory.use_dialog != 2:
|
|
101
|
+
write_load_file(f"# Opening manual detection\nscoreboard objectives add {ns}.open_manual minecraft.used:minecraft.written_book")
|
|
102
|
+
Mem.ctx.data[ns].advancements["open_manual"] = set_json_encoder(Advancement({
|
|
103
|
+
"criteria": {
|
|
104
|
+
"requirement": {
|
|
105
|
+
"trigger": "minecraft:tick",
|
|
106
|
+
"conditions": {
|
|
107
|
+
"player": [
|
|
108
|
+
{
|
|
109
|
+
"condition": "minecraft:entity_scores",
|
|
110
|
+
"entity": "this",
|
|
111
|
+
"scores": {f"{ns}.open_manual": {"min": 1}}
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"rewards": {
|
|
118
|
+
"function": f"{ns}:advancements/open_manual"
|
|
119
|
+
}
|
|
120
|
+
}), max_level=-1)
|
|
121
|
+
write_function(f"{ns}:advancements/open_manual", f"""
|
|
122
|
+
# Revoke advancement and reset score
|
|
123
|
+
advancement revoke @s only {ns}:open_manual
|
|
124
|
+
scoreboard players set @s {ns}.open_manual 0
|
|
125
|
+
|
|
126
|
+
# Show manual dialog if holding the manual
|
|
127
|
+
execute if items entity @s weapon.* *[custom_data~{{{ns}:{{manual:true}}}}] run dialog show @s {ns}:manual/page_1
|
|
128
|
+
""")
|
|
129
|
+
|
|
130
|
+
# Generate main dialog to open the manual
|
|
131
|
+
Mem.ctx.data["minecraft"].dialogs_tags["quick_actions"] = set_json_encoder(
|
|
132
|
+
DialogTag({"replace": False, "values": [f"{ns}:all_manual"]})
|
|
133
|
+
)
|
|
134
|
+
Mem.ctx.data[ns].dialogs["all_manual"] = set_json_encoder(Dialog({
|
|
135
|
+
"type": "minecraft:dialog_list",
|
|
136
|
+
"title": {"text": f"{Mem.ctx.project_name} Manual"},
|
|
137
|
+
"dialogs": dialog_ids,
|
|
138
|
+
"exit_action": {"label": {"translate": "gui.back"}, "width": 200}
|
|
139
|
+
}))
|
|
140
|
+
|