From d436362a8d5f4cf47f03284141d77dd4285d5ccb Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 9 Jan 2022 19:10:25 -0500 Subject: [PATCH] Consolidated crafting UI for the primnary component of modular weapons. --- assets/common/component_recipe_book.ron | 4544 +++++++++++++++++++++++ assets/common/recipe_book.ron | 2490 ------------- client/src/lib.rs | 32 +- common/net/src/msg/server.rs | 3 +- common/src/comp/controller.rs | 12 +- common/src/recipe.rs | 416 ++- server/src/events/inventory_manip.rs | 62 +- server/src/lib.rs | 3 +- voxygen/src/hud/crafting.rs | 1533 ++++---- voxygen/src/hud/mod.rs | 21 + voxygen/src/hud/slots.rs | 6 +- voxygen/src/session/mod.rs | 43 + 12 files changed, 5952 insertions(+), 3213 deletions(-) create mode 100644 assets/common/component_recipe_book.ron diff --git a/assets/common/component_recipe_book.ron b/assets/common/component_recipe_book.ron new file mode 100644 index 0000000000..e7a77460a5 --- /dev/null +++ b/assets/common/component_recipe_book.ron @@ -0,0 +1,4544 @@ +{ +/// MODULAR WEAPONS/HAMMERS/PRIMARY COMPONENTS + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bronze", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.hammer", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.iron", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.hammer", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.steel", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.hammer", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.cobalt", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.hammer", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bloodsteel", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.hammer", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.orichalcum", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.hammer", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.spikedmace", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.spikedmace", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.spikedmace", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.spikedmace", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.spikedmace", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.spikedmace", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.warhammer", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.warhammer", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.warhammer", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.warhammer", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.warhammer", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.warhammer", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.maul", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.maul", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.maul", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.maul", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.maul", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.maul", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greatmace", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greatmace", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greatmace", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greatmace", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greatmace", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greatmace", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greathammer", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greathammer", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greathammer", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greathammer", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greathammer", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.greathammer", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.ornate", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.ornate", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.ornate", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.ornate", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.ornate", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Hammer, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.hammer.ornate", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), +/// MODULAR WEAPONS/SWORDS/PRIMARY COMPONENTS + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bronze", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.longsword", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.iron", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.longsword", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.steel", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.longsword", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.cobalt", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.longsword", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bloodsteel", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.longsword", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.orichalcum", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.longsword", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sawblade", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sawblade", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sawblade", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sawblade", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sawblade", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sawblade", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.katana", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.katana", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.katana", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.katana", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.katana", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.katana", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.zweihander", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.zweihander", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.zweihander", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.zweihander", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.zweihander", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.zweihander", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sabre", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sabre", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sabre", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sabre", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sabre", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.sabre", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.greatsword", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.greatsword", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.greatsword", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.greatsword", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.greatsword", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.greatsword", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.ornate", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.ornate", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.ornate", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.ornate", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.ornate", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Sword, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sword.ornate", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), +/// MODULAR WEAPONS/AXES/PRIMARY COMPONENTS + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bronze", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.axe", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.iron", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.axe", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.steel", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.axe", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.cobalt", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.axe", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bloodsteel", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.axe", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.orichalcum", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.axe", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.jagged", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.jagged", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.jagged", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.jagged", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.jagged", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.jagged", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.battleaxe", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.battleaxe", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.battleaxe", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.battleaxe", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.battleaxe", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.battleaxe", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.poleaxe", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.poleaxe", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.poleaxe", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.poleaxe", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.poleaxe", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.poleaxe", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.labrys", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.labrys", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.labrys", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.labrys", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.labrys", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.labrys", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.greataxe", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.greataxe", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.greataxe", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.greataxe", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.greataxe", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.greataxe", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bronze", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.ornate", + components: [ + "common.items.mineral.ingot.bronze" + ], + ), + material: (Item("common.items.mineral.ingot.bronze"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.iron", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.ornate", + components: [ + "common.items.mineral.ingot.iron" + ], + ), + material: (Item("common.items.mineral.ingot.iron"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.steel", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.ornate", + components: [ + "common.items.mineral.ingot.steel" + ], + ), + material: (Item("common.items.mineral.ingot.steel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.cobalt", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.ornate", + components: [ + "common.items.mineral.ingot.cobalt" + ], + ), + material: (Item("common.items.mineral.ingot.cobalt"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.bloodsteel", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.ornate", + components: [ + "common.items.mineral.ingot.bloodsteel" + ], + ), + material: (Item("common.items.mineral.ingot.bloodsteel"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), + ( + toolkind: Axe, + material: "common.items.mineral.ingot.orichalcum", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.axe.ornate", + components: [ + "common.items.mineral.ingot.orichalcum" + ], + ), + material: (Item("common.items.mineral.ingot.orichalcum"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50)), + additional_inputs: [ + (Item("common.items.tool.craftsman_hammer"), 0), + ], + craft_sprite: Some(Anvil), + ), +/// MODULAR WEAPONS/BOWS/PRIMARY COMPONENTS + ( + toolkind: Bow, + material: "common.items.log.wood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.bow", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.bamboo", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.bow", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.hardwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.bow", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.ironwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.bow", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.frostwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.bow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.eldwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.bow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.composite", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.composite", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.composite", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.composite", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.composite", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.composite", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.greatbow", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.greatbow", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.greatbow", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.greatbow", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.greatbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.greatbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.longbow", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.longbow", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.longbow", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.longbow", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.longbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.longbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.ornate", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.ornate", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.ornate", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.ornate", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.ornate", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.ornate", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.shortbow", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.shortbow", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.shortbow", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.shortbow", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.shortbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.shortbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.warbow", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.warbow", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.warbow", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.warbow", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.warbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Bow, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.bow.warbow", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.sticky_thread"), 3), + ], + craft_sprite: Some(CraftingBench), + ), +/// MODULAR WEAPONS/FIRE STAFFS/PRIMARY COMPONENTS + ( + toolkind: Staff, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.brand", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.brand", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.brand", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.brand", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.brand", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.brand", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.grandstaff", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.grandstaff", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.grandstaff", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.grandstaff", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.grandstaff", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.grandstaff", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.longpole", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.longpole", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.longpole", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.longpole", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.longpole", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.longpole", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.ornate", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.ornate", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.ornate", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.ornate", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.ornate", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.ornate", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.pole", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.pole", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.pole", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.pole", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.pole", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.pole", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.rod", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.rod", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.rod", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.rod", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.rod", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.rod", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.wood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.staff", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.bamboo", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.staff", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.hardwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.staff", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.ironwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.staff", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.frostwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.staff", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Staff, + material: "common.items.log.eldwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.staff.staff", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), +/// MODULAR WEAPONS/NATURE SCEPTRES/PRIMARY COMPONENTS + ( + toolkind: Sceptre, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.arbor", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.arbor", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.arbor", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.arbor", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.arbor", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.long_tusk"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.arbor", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.long_tusk"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.cane", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.cane", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.cane", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.cane", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.cane", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.strong_pincer"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.cane", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crook", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crook", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crook", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crook", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crook", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.sharp_fang"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crook", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crozier", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crozier", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crozier", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crozier", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crozier", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.claw"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.crozier", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.claw"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.grandsceptre", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.grandsceptre", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.grandsceptre", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.grandsceptre", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.grandsceptre", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.large_horn"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.grandsceptre", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.large_horn"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.wood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.ornate", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.bamboo", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.ornate", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.hardwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.ornate", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.ironwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.ornate", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.frostwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.ornate", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.eldwood", + modifier: Some("common.items.crafting_ing.animal_misc.elegant_crest"), + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.ornate", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: Some((Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50)), + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.wood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.sceptre", + components: [ + "common.items.log.wood" + ], + ), + material: (Item("common.items.log.wood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.bamboo", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.sceptre", + components: [ + "common.items.log.bamboo" + ], + ), + material: (Item("common.items.log.bamboo"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.hardwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.sceptre", + components: [ + "common.items.log.hardwood" + ], + ), + material: (Item("common.items.log.hardwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.ironwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.sceptre", + components: [ + "common.items.log.ironwood" + ], + ), + material: (Item("common.items.log.ironwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.frostwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.sceptre", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), + ( + toolkind: Sceptre, + material: "common.items.log.eldwood", + modifier: None, + ): ( + output: ItemComponents( + item: "common.items.crafting_ing.modular.primary.sceptre.sceptre", + components: [ + "common.items.log.frostwood" + ], + ), + material: (Item("common.items.log.frostwood"), 5), + modifier: None, + additional_inputs: [ + (Item("common.items.crafting_ing.leather.leather_strips"), 2), + ], + craft_sprite: Some(CraftingBench), + ), +} \ No newline at end of file diff --git a/assets/common/recipe_book.ron b/assets/common/recipe_book.ron index cc32101165..edc9f85aa8 100644 --- a/assets/common/recipe_book.ron +++ b/assets/common/recipe_book.ron @@ -1880,421 +1880,6 @@ ], craft_sprite: Some(CraftingBench), ), -/// MODULAR WEAPONS/SWORDS/PRIMARY COMPONENTS - "bronze longsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.longsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron longsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.longsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel longsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.longsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt longsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.longsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel longsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.longsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum longsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.longsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze sawblade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sawblade", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron sawblade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sawblade", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel sawblade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sawblade", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt sawblade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sawblade", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel sawblade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sawblade", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum sawblade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sawblade", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze katana blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.katana", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron katana blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.katana", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel katana blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.katana", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt katana blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.katana", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel katana blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.katana", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum katana blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.katana", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze zweihander blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.zweihander", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron zweihander blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.zweihander", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel zweihander blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.zweihander", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt zweihander blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.zweihander", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel zweihander blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.zweihander", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum zweihander blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.zweihander", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze sabre blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sabre", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron sabre blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sabre", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel sabre blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sabre", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt sabre blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sabre", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel sabre blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sabre", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum sabre blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.sabre", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze greatsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.greatsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron greatsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.greatsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel greatsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.greatsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt greatsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.greatsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel greatsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.greatsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum greatsword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.greatsword", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze ornate sword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron ornate sword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel ornate sword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt ornate sword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel ornate sword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum ornate sword blade": ( - output: ("common.items.crafting_ing.modular.primary.sword.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), /// MODULAR WEAPONS/SWORDS/SECONDARY COMPONENTS "one-handed hilt": ( output: ("common.items.crafting_ing.modular.secondary.sword.one-handed", 1), @@ -2323,421 +1908,6 @@ craft_sprite: Some(CraftingBench), is_recycling: false, ), -/// MODULAR WEAPONS/HAMMERS/PRIMARY COMPONENTS - "bronze hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.hammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.hammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.hammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.hammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.hammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.hammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze spiked mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.spikedmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron spiked mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.spikedmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel spiked mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.spikedmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt spiked mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.spikedmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel spiked mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.spikedmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum spiked mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.spikedmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze warhammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.warhammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron warhammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.warhammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel warhammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.warhammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt warhammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.warhammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel warhammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.warhammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum warhammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.warhammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze maul head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.maul", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron maul head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.maul", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel maul head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.maul", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt maul head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.maul", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel maul head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.maul", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum maul head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.maul", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze great mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greatmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron great mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greatmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel great mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greatmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt great mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greatmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel great mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greatmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum great mace head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greatmace", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze greathammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greathammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron greathammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greathammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel greathammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greathammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt greathammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greathammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel greathammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greathammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum greathammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.greathammer", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze ornate hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron ornate hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel ornate hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt ornate hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel ornate hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum ornate hammer head": ( - output: ("common.items.crafting_ing.modular.primary.hammer.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), /// MODULAR WEAPONS/HAMMERS/SECONDARY COMPONENTS "short hammer haft": ( output: ("common.items.crafting_ing.modular.secondary.hammer.short", 1), @@ -2766,421 +1936,6 @@ craft_sprite: Some(CraftingBench), is_recycling: false, ), -/// MODULAR WEAPONS/AXES/PRIMARY COMPONENTS - "bronze axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.axe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.axe", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.axe", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.axe", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.axe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.axe", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze jagged axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.jagged", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron jagged axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.jagged", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel jagged axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.jagged", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt jagged axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.jagged", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel jagged axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.jagged", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum jagged axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.jagged", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze battleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.battleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron battleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.battleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel battleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.battleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt battleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.battleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel battleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.battleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum battleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.battleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze poleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.poleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron poleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.poleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel poleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.poleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt poleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.poleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel poleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.poleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum poleaxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.poleaxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze labrys axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.labrys", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron labrys axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.labrys", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel labrys axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.labrys", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt labrys axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.labrys", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel labrys axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.labrys", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum labrys axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.labrys", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze greataxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.greataxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron greataxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.greataxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel greataxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.greataxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt greataxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.greataxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel greataxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.greataxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum greataxe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.greataxe", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bronze ornate axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.bronze"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "iron ornate axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.iron"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "steel ornate axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.steel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "cobalt ornate axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.cobalt"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "bloodsteel ornate axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.bloodsteel"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), - "orichalcum ornate axe head": ( - output: ("common.items.crafting_ing.modular.primary.axe.ornate", 1), - inputs: [ - (Item("common.items.mineral.ingot.orichalcum"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50, false), - (Item("common.items.tool.craftsman_hammer"), 0, false), - ], - craft_sprite: Some(Anvil), - is_recycling: false, - ), /// MODULAR WEAPONS/AXES/SECONDARY COMPONENTS "short axe haft": ( output: ("common.items.crafting_ing.modular.secondary.axe.short", 1), @@ -3209,421 +1964,6 @@ craft_sprite: Some(CraftingBench), is_recycling: false, ), -/// MODULAR WEAPONS/BOWS/PRIMARY COMPONENTS - "wood bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.bow", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.bow", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.bow", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.bow", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.bow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.bow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood composite bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.composite", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo composite bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.composite", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood composite bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.composite", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood composite bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.composite", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood composite bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.composite", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood composite bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.composite", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood greatbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.greatbow", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 1, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo greatbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.greatbow", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 2, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood greatbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.greatbow", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 5, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood greatbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.greatbow", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 10, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood greatbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.greatbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 20, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood greatbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.greatbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 50, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood longbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.longbow", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 1, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo longbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.longbow", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 2, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood longbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.longbow", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 5, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood longbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.longbow", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 10, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood longbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.longbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 20, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood longbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.longbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 50, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood ornate bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.ornate", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo ornate bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.ornate", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood ornate bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.ornate", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood ornate bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.ornate", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood ornate bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.ornate", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood ornate bow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.ornate", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood shortbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.shortbow", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 1, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo shortbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.shortbow", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 2, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood shortbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.shortbow", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 5, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood shortbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.shortbow", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 10, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood shortbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.shortbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 20, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood shortbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.shortbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 50, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood warbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.warbow", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo warbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.warbow", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood warbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.warbow", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood warbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.warbow", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood warbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.warbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood warbow limbs": ( - output: ("common.items.crafting_ing.modular.primary.bow.warbow", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50, false), - (Item("common.items.crafting_ing.sticky_thread"), 3, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), /// MODULAR WEAPONS/BOWS/SECONDARY COMPONENTS "medium bow grip": ( output: ("common.items.crafting_ing.modular.secondary.bow.medium", 1), @@ -3652,421 +1992,6 @@ craft_sprite: Some(CraftingBench), is_recycling: false, ), -/// MODULAR WEAPONS/FIRE STAFFS/PRIMARY COMPONENTS - "wood brand shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.brand", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo brand shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.brand", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood brand shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.brand", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood brand shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.brand", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood brand shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.brand", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood brand shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.brand", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood grandstaff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.grandstaff", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo grandstaff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.grandstaff", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood grandstaff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.grandstaff", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood grandstaff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.grandstaff", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood grandstaff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.grandstaff", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood grandstaff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.grandstaff", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood longpole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.longpole", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo longpole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.longpole", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood longpole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.longpole", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood longpole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.longpole", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood longpole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.longpole", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood longpole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.longpole", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood ornate staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.ornate", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo ornate staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.ornate", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood ornate staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.ornate", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood ornate staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.ornate", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood ornate staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.ornate", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood ornate staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.ornate", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood pole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.pole", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo pole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.pole", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood pole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.pole", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood pole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.pole", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood pole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.pole", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood pole shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.pole", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood rod shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.rod", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo rod shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.rod", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood rod shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.rod", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood rod shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.rod", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood rod shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.rod", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood rod shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.rod", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.staff", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.staff", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.staff", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.staff", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.staff", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood staff shaft": ( - output: ("common.items.crafting_ing.modular.primary.staff.staff", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), /// MODULAR WEAPONS/FIRE STAFFS/SECONDARY COMPONENTS "large fire core": ( output: ("common.items.crafting_ing.modular.secondary.staff.large", 1), @@ -4095,421 +2020,6 @@ craft_sprite: Some(CraftingBench), is_recycling: false, ), -/// MODULAR WEAPONS/NATURE SCEPTRES/PRIMARY COMPONENTS - "wood arbor shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.arbor", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo arbor shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.arbor", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood arbor shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.arbor", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood arbor shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.arbor", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood arbor shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.arbor", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood arbor shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.arbor", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.long_tusk"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood cane shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.cane", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo cane shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.cane", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood cane shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.cane", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood cane shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.cane", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood cane shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.cane", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood cane shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.cane", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.strong_pincer"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood crook shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crook", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo crook shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crook", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood crook shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crook", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood crook shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crook", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood crook shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crook", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood crook shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crook", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.sharp_fang"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood crozier shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crozier", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo crozier shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crozier", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood crozier shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crozier", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood crozier shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crozier", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood crozier shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crozier", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood crozier shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.crozier", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.claw"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood grandsceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.grandsceptre", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo grandsceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.grandsceptre", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood grandsceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.grandsceptre", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood grandsceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.grandsceptre", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood grandsceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.grandsceptre", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood grandsceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.grandsceptre", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.large_horn"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood ornate sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.ornate", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 1, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo ornate sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.ornate", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 2, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood ornate sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.ornate", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 5, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood ornate sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.ornate", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 10, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood ornate sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.ornate", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 20, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood ornate sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.ornate", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.animal_misc.elegant_crest"), 50, false), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "wood sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.sceptre", 1), - inputs: [ - (Item("common.items.log.wood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "bamboo sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.sceptre", 1), - inputs: [ - (Item("common.items.log.bamboo"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "hardwood sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.sceptre", 1), - inputs: [ - (Item("common.items.log.hardwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "ironwood sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.sceptre", 1), - inputs: [ - (Item("common.items.log.ironwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "frostwood sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.sceptre", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), - "eldwood sceptre shaft": ( - output: ("common.items.crafting_ing.modular.primary.sceptre.sceptre", 1), - inputs: [ - (Item("common.items.log.frostwood"), 5, true), - (Item("common.items.crafting_ing.leather.leather_strips"), 2, false), - ], - craft_sprite: Some(CraftingBench), - is_recycling: false, - ), /// MODULAR WEAPONS/NATURE SCEPTRES/SECONDARY COMPONENTS "large nature core": ( output: ("common.items.crafting_ing.modular.secondary.sceptre.large", 1), diff --git a/client/src/lib.rs b/client/src/lib.rs index 20bb2f4357..489cf9ff0b 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -25,7 +25,7 @@ use common::{ chat::{KillSource, KillType}, controller::CraftEvent, group, - inventory::item::{modular, ItemKind}, + inventory::item::{modular, tool, ItemKind}, invite::{InviteKind, InviteResponse}, skills::Skill, slot::{EquipSlot, InvSlotId, Slot}, @@ -39,7 +39,7 @@ use common::{ lod, mounting::Rider, outcome::Outcome, - recipe::RecipeBook, + recipe::{ComponentRecipeBook, RecipeBook}, resources::{PlayerEntity, TimeOfDay}, spiral::Spiral2d, terrain::{ @@ -173,6 +173,7 @@ pub struct Client { pois: Vec, pub chat_mode: ChatMode, recipe_book: RecipeBook, + component_recipe_book: ComponentRecipeBook, available_recipes: HashMap>, lod_zones: HashMap, lod::Zone>, lod_last_requested: Option, @@ -291,6 +292,7 @@ impl Client { sites, pois, recipe_book, + component_recipe_book, max_group_size, client_timeout, ) = match loop { @@ -306,6 +308,7 @@ impl Client { client_timeout, world_map, recipe_book, + component_recipe_book, material_stats, ability_map, } => { @@ -593,6 +596,7 @@ impl Client { world_map.sites, world_map.pois, recipe_book, + component_recipe_book, max_group_size, client_timeout, )) @@ -627,6 +631,7 @@ impl Client { .collect(), pois, recipe_book, + component_recipe_book, available_recipes: HashMap::default(), chat_mode: ChatMode::default(), @@ -1006,6 +1011,8 @@ impl Client { pub fn recipe_book(&self) -> &RecipeBook { &self.recipe_book } + pub fn component_recipe_book(&self) -> &ComponentRecipeBook { &self.component_recipe_book } + pub fn available_recipes(&self) -> &HashMap> { &self.available_recipes } @@ -1131,6 +1138,27 @@ impl Client { } } + pub fn craft_modular_weapon_component( + &mut self, + toolkind: tool::ToolKind, + material: InvSlotId, + modifier: Option, + slots: Vec<(u32, InvSlotId)>, + sprite_pos: Option>, + ) { + self.send_msg(ClientGeneral::ControlEvent(ControlEvent::InventoryEvent( + InventoryEvent::CraftRecipe { + craft_event: CraftEvent::ModularWeaponPrimaryComponent { + toolkind, + material, + modifier, + slots, + }, + craft_sprite: sprite_pos, + }, + ))); + } + fn update_available_recipes(&mut self) { self.available_recipes = self .recipe_book diff --git a/common/net/src/msg/server.rs b/common/net/src/msg/server.rs index c581874345..2223811301 100644 --- a/common/net/src/msg/server.rs +++ b/common/net/src/msg/server.rs @@ -9,7 +9,7 @@ use common::{ comp::{self, invite::InviteKind, item::MaterialStatManifest}, lod, outcome::Outcome, - recipe::RecipeBook, + recipe::{ComponentRecipeBook, RecipeBook}, resources::TimeOfDay, terrain::{Block, TerrainChunk, TerrainChunkMeta, TerrainChunkSize}, trade::{PendingTrade, SitePrices, TradeId, TradeResult}, @@ -61,6 +61,7 @@ pub enum ServerInit { client_timeout: Duration, world_map: crate::msg::world_msg::WorldMapMsg, recipe_book: RecipeBook, + component_recipe_book: ComponentRecipeBook, material_stats: MaterialStatManifest, ability_map: comp::item::tool::AbilityMap, }, diff --git a/common/src/comp/controller.rs b/common/src/comp/controller.rs index 09079668d4..90373207e2 100644 --- a/common/src/comp/controller.rs +++ b/common/src/comp/controller.rs @@ -1,7 +1,10 @@ use crate::{ comp::{ ability, - inventory::slot::{EquipSlot, InvSlotId, Slot}, + inventory::{ + item::tool::ToolKind, + slot::{EquipSlot, InvSlotId, Slot}, + }, invite::{InviteKind, InviteResponse}, BuffKind, }, @@ -103,6 +106,13 @@ pub enum CraftEvent { primary_component: InvSlotId, secondary_component: InvSlotId, }, + // TODO: Maybe try to consolidate into another? Otherwise eventually make more general. + ModularWeaponPrimaryComponent { + toolkind: ToolKind, + material: InvSlotId, + modifier: Option, + slots: Vec<(u32, InvSlotId)>, + }, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] diff --git a/common/src/recipe.rs b/common/src/recipe.rs index edef6e4daa..824cdf0c9c 100644 --- a/common/src/recipe.rs +++ b/common/src/recipe.rs @@ -3,7 +3,9 @@ use crate::{ comp::{ inventory::slot::InvSlotId, item::{ - modular, tool::AbilityMap, ItemBase, ItemDef, ItemKind, ItemTag, MaterialStatManifest, + modular, + tool::{AbilityMap, ToolKind}, + ItemBase, ItemDef, ItemKind, ItemTag, MaterialStatManifest, }, Inventory, Item, }, @@ -154,54 +156,67 @@ impl Recipe { .map(|(item_def, amount, is_mod_comp)| (item_def, *amount, *is_mod_comp)) } - /// Determine whether the inventory contains the ingredients for a recipe. - /// If it does, return a vec of inventory slots that contain the - /// ingredients needed, whose positions correspond to particular recipe - /// inputs. If items are missing, return the missing items, and how many - /// are missing. + /// Determines if the inventory contains the ingredients for a given recipe pub fn inventory_contains_ingredients( &self, inv: &Inventory, ) -> Result, Vec<(&RecipeInput, u32)>> { - // Hashmap tracking the quantity that needs to be removed from each slot (so - // that it doesn't think a slot can provide more items than it contains) - let mut slot_claims = HashMap::::new(); - // Important to be a vec and to remain separate from slot_claims as it must - // remain ordered, unlike the hashmap - let mut slots = Vec::<(u32, InvSlotId)>::new(); - // The inputs to a recipe that have missing items, and the amount missing - let mut missing = Vec::<(&RecipeInput, u32)>::new(); + inventory_contains_ingredients( + self.inputs() + .map(|(input, amount, _is_modular)| (input, amount)), + inv, + ) + } +} - for (i, (input, amount, _)) in self.inputs().enumerate() { - let mut needed = amount; - let mut contains_any = false; - // Checks through every slot, filtering to only those that contain items that - // can satisfy the input - for (inv_slot_id, slot) in inv.slots_with_id() { - if let Some(item) = slot - .as_ref() - .filter(|item| item.matches_recipe_input(&*input, amount)) - { - let claim = slot_claims.entry(inv_slot_id).or_insert(0); - slots.push((i as u32, inv_slot_id)); - let can_claim = (item.amount().saturating_sub(*claim)).min(needed); - *claim += can_claim; - needed -= can_claim; - contains_any = true; - } - } +/// Determine whether the inventory contains the ingredients for a recipe. +/// If it does, return a vec of inventory slots that contain the +/// ingredients needed, whose positions correspond to particular recipe +/// inputs. If items are missing, return the missing items, and how many +/// are missing. +#[allow(clippy::type_complexity)] +fn inventory_contains_ingredients<'a, 'b, I: Iterator>( + ingredients: I, + inv: &'b Inventory, +) -> Result, Vec<(&'a RecipeInput, u32)>> { + // Hashmap tracking the quantity that needs to be removed from each slot (so + // that it doesn't think a slot can provide more items than it contains) + let mut slot_claims = HashMap::::new(); + // Important to be a vec and to remain separate from slot_claims as it must + // remain ordered, unlike the hashmap + let mut slots = Vec::<(u32, InvSlotId)>::new(); + // The inputs to a recipe that have missing items, and the amount missing + let mut missing = Vec::<(&RecipeInput, u32)>::new(); - if needed > 0 || !contains_any { - missing.push((input, needed)); + for (i, (input, amount)) in ingredients.enumerate() { + let mut needed = amount; + let mut contains_any = false; + // Checks through every slot, filtering to only those that contain items that + // can satisfy the input + for (inv_slot_id, slot) in inv.slots_with_id() { + if let Some(item) = slot + .as_ref() + .filter(|item| item.matches_recipe_input(&*input, amount)) + { + let claim = slot_claims.entry(inv_slot_id).or_insert(0); + slots.push((i as u32, inv_slot_id)); + let can_claim = (item.amount().saturating_sub(*claim)).min(needed); + *claim += can_claim; + needed -= can_claim; + contains_any = true; } } - if missing.is_empty() { - Ok(slots) - } else { - Err(missing) + if needed > 0 || !contains_any { + missing.push((input, needed)); } } + + if missing.is_empty() { + Ok(slots) + } else { + Err(missing) + } } pub enum SalvageError { @@ -443,6 +458,331 @@ impl assets::Compound for RecipeBook { } } +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct ComponentRecipeBook { + recipes: HashMap, +} + +impl ComponentRecipeBook { + pub fn get(&self, key: &ComponentKey) -> Option<&ComponentRecipe> { self.recipes.get(key) } + + pub fn iter(&self) -> impl ExactSizeIterator { + self.recipes.iter() + } +} + +#[derive(Clone, Deserialize)] +#[serde(transparent)] +struct RawComponentRecipeBook(HashMap); + +impl assets::Asset for RawComponentRecipeBook { + type Loader = assets::RonLoader; + + const EXTENSION: &'static str = "ron"; +} + +#[derive(Clone, Debug, Serialize, Deserialize, Hash, Eq, PartialEq)] +pub struct ComponentKey { + // Can't use ItemDef here because hash needed, item definition id used instead + // TODO: Figure out how to get back to ItemDef maybe? + // Keeping under ComponentRecipe may be sufficient? + // TODO: Make more general for other things that have component inputs that should be tracked + // after item creation + pub toolkind: ToolKind, + pub material: String, + pub modifier: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct ComponentRecipe { + output: ComponentOutput, + material: (RecipeInput, u32), + modifier: Option<(RecipeInput, u32)>, + additional_inputs: Vec<(RecipeInput, u32)>, + pub craft_sprite: Option, +} + +impl ComponentRecipe { + /// Craft an itme that has components, returning a list of missing items on + /// failure + pub fn craft_component( + &self, + inv: &mut Inventory, + material_slot: InvSlotId, + modifier_slot: Option, + // Vec tying an input to a slot + slots: Vec<(u32, InvSlotId)>, + ability_map: &AbilityMap, + msm: &MaterialStatManifest, + ) -> Result, Vec<(&RecipeInput, u32)>> { + let mut slot_claims = HashMap::new(); + let mut unsatisfied_requirements = Vec::new(); + + fn handle_requirement<'a, 'b, I: Iterator>( + slot_claims: &mut HashMap, + unsatisfied_requirements: &mut Vec<(&'a RecipeInput, u32)>, + inv: &'b Inventory, + input: &'a RecipeInput, + amount: u32, + input_slots: I, + ) { + let mut required = amount; + // Check used for recipes that have an input that is not consumed, e.g. + // craftsman hammer + let mut contains_any = false; + // Goes through each slot and marks some amount from each slot as claimed + for slot in input_slots { + // Checks that the item in the slot can be used for the input + if let Some(item) = inv + .get(slot) + .filter(|item| item.matches_recipe_input(input, amount)) + { + // Gets the number of items claimed from the slot, or sets to 0 if slot has + // not been claimed by another input yet + let claimed = slot_claims.entry(slot).or_insert(0); + let available = item.amount().saturating_sub(*claimed); + let provided = available.min(required); + required -= provided; + *claimed += provided; + contains_any = true; + } + } + // If there were not sufficient items to cover requirement between all provided + // slots, or if non-consumed item was not present, mark input as not satisfied + if required > 0 || !contains_any { + unsatisfied_requirements.push((input, required)); + } + } + + // Checks each input against slots in the inventory. If the slots contain an + // item that fulfills the need of the input, marks some of the item as claimed + // up to quantity needed for the crafting input. If the item either + // cannot be used, or there is insufficient quantity, adds input and + // number of materials needed to unsatisfied requirements. + handle_requirement( + &mut slot_claims, + &mut unsatisfied_requirements, + inv, + &self.material.0, + self.material.1, + core::iter::once(material_slot), + ); + if let Some((modifier_input, modifier_amount)) = &self.modifier { + // TODO: Better way to get slot to use that ensures this requirement fails if no + // slot provided? + handle_requirement( + &mut slot_claims, + &mut unsatisfied_requirements, + inv, + modifier_input, + *modifier_amount, + core::iter::once(modifier_slot.unwrap_or(InvSlotId::new(0, 0))), + ); + } + self.additional_inputs + .iter() + .enumerate() + .for_each(|(i, (input, amount))| { + // Gets all slots provided for this input by the frontend + let input_slots = slots + .iter() + .filter_map(|(j, slot)| if i as u32 == *j { Some(slot) } else { None }) + .copied(); + // Checks if requirement is met, and if not marks it as unsatisfied + handle_requirement( + &mut slot_claims, + &mut unsatisfied_requirements, + inv, + input, + *amount, + input_slots, + ); + }); + + // If there are no unsatisfied requirements, create the items produced by the + // recipe in the necessary quantity and remove the items that the recipe + // consumes + if unsatisfied_requirements.is_empty() { + for (slot, to_remove) in slot_claims.iter() { + for _ in 0..*to_remove { + let _ = inv + .take(*slot, ability_map, msm) + .expect("Expected item to exist in the inventory"); + } + } + + let crafted_item = self.item_output(ability_map, msm); + + Ok(vec![crafted_item]) + } else { + Err(unsatisfied_requirements) + } + } + + #[allow(clippy::type_complexity)] + /// Determines if the inventory contains the ignredients for a given recipe + pub fn inventory_contains_additional_ingredients<'a>( + &self, + inv: &'a Inventory, + ) -> Result, Vec<(&RecipeInput, u32)>> { + inventory_contains_ingredients( + self.additional_inputs + .iter() + .map(|(input, amount)| (input, *amount)), + inv, + ) + } + + pub fn item_output(&self, ability_map: &AbilityMap, msm: &MaterialStatManifest) -> Item { + match &self.output { + ComponentOutput::Item(item_def) => Item::new_from_item_base( + ItemBase::Raw(Arc::clone(item_def)), + Vec::new(), + ability_map, + msm, + ), + ComponentOutput::ItemComponents { + item: item_def, + components, + } => { + let components = components + .iter() + .map(|item_def| { + Item::new_from_item_base( + ItemBase::Raw(Arc::clone(item_def)), + Vec::new(), + ability_map, + msm, + ) + }) + .collect::>(); + Item::new_from_item_base( + ItemBase::Raw(Arc::clone(item_def)), + components, + ability_map, + msm, + ) + }, + } + } +} + +#[derive(Clone, Deserialize)] +struct RawComponentRecipe { + output: RawComponentOutput, + material: (RawRecipeInput, u32), + modifier: Option<(RawRecipeInput, u32)>, + additional_inputs: Vec<(RawRecipeInput, u32)>, + craft_sprite: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +enum ComponentOutput { + Item(Arc), + ItemComponents { + item: Arc, + components: Vec>, + }, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +enum RawComponentOutput { + Item(String), + ItemComponents { + item: String, + components: Vec, + }, +} + +impl assets::Compound for ComponentRecipeBook { + fn load( + cache: &assets::AssetCache, + specifier: &str, + ) -> Result { + #[inline] + fn load_recipe_input( + (input, amount): &(RawRecipeInput, u32), + ) -> Result<(RecipeInput, u32), assets::Error> { + let def = match &input { + RawRecipeInput::Item(name) => RecipeInput::Item(Arc::::load_cloned(name)?), + RawRecipeInput::Tag(tag) => RecipeInput::Tag(*tag), + RawRecipeInput::TagSameItem(tag) => RecipeInput::TagSameItem(*tag), + RawRecipeInput::ListSameItem(list) => { + let assets = &ItemList::load_expect(list).read().0; + let items = assets + .iter() + .map(|asset| Arc::::load_expect_cloned(asset)) + .collect(); + RecipeInput::ListSameItem(items) + }, + }; + Ok((def, *amount)) + } + + #[inline] + fn load_recipe_output( + output: &RawComponentOutput, + ) -> Result { + let def = match &output { + RawComponentOutput::Item(def) => { + ComponentOutput::Item(Arc::::load_cloned(def)?) + }, + RawComponentOutput::ItemComponents { + item: def, + components: defs, + } => ComponentOutput::ItemComponents { + item: Arc::::load_cloned(def)?, + components: defs + .iter() + .map(|def| Arc::::load_cloned(def)) + .collect::, _>>()?, + }, + }; + Ok(def) + } + + let raw = cache.load::(specifier)?.cloned(); + + let recipes = raw + .0 + .iter() + .map( + |( + key, + RawComponentRecipe { + output, + material, + modifier, + additional_inputs, + craft_sprite, + }, + )| { + let additional_inputs = additional_inputs + .iter() + .map(load_recipe_input) + .collect::, _>>()?; + let material = load_recipe_input(material)?; + let modifier = modifier.as_ref().map(load_recipe_input).transpose()?; + let output = load_recipe_output(output)?; + Ok((key.clone(), ComponentRecipe { + output, + material, + modifier, + additional_inputs, + craft_sprite: *craft_sprite, + })) + }, + ) + .collect::>()?; + + Ok(ComponentRecipeBook { recipes }) + } +} + pub fn default_recipe_book() -> AssetHandle { RecipeBook::load_expect("common.recipe_book") } + +pub fn default_component_recipe_book() -> AssetHandle { + ComponentRecipeBook::load_expect("common.component_recipe_book") +} diff --git a/server/src/events/inventory_manip.rs b/server/src/events/inventory_manip.rs index a4f021cd6b..ab86349c73 100644 --- a/server/src/events/inventory_manip.rs +++ b/server/src/events/inventory_manip.rs @@ -11,7 +11,7 @@ use common::{ slot::{self, Slot}, }, consts::MAX_PICKUP_RANGE, - recipe::{self, default_recipe_book}, + recipe::{self, default_component_recipe_book, default_recipe_book}, terrain::SpriteKind, trade::Trades, uid::Uid, @@ -593,7 +593,9 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv craft_sprite, } => { use comp::controller::CraftEvent; + use recipe::ComponentKey; let recipe_book = default_recipe_book().read(); + let component_recipes = default_component_recipe_book().read(); let ability_map = &state.ecs().read_resource::(); let msm = state.ecs().read_resource::(); @@ -707,6 +709,64 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv None } }, + CraftEvent::ModularWeaponPrimaryComponent { + toolkind, + material, + modifier, + slots, + } => { + let item_id = |slot| inventory.get(slot).map(|item| item.item_definition_id()); + if let Some(material_item_id) = item_id(material) { + component_recipes + .get(&ComponentKey { + toolkind, + material: String::from(material_item_id), + modifier: modifier.and_then(item_id).map(String::from), + }) + .filter(|r| { + if let Some(needed_sprite) = r.craft_sprite { + let sprite = craft_sprite + .filter(|pos| { + let entity_cylinder = get_cylinder(state, entity); + if !within_pickup_range(entity_cylinder, || { + Some(find_dist::Cube { + min: pos.as_(), + side_length: 1.0, + }) + }) { + debug!( + ?entity_cylinder, + "Failed to craft recipe as not within range \ + of required sprite, sprite pos: {}", + pos + ); + false + } else { + true + } + }) + .and_then(|pos| state.terrain().get(pos).ok().copied()) + .and_then(|block| block.get_sprite()); + Some(needed_sprite) == sprite + } else { + true + } + }) + .and_then(|r| { + r.craft_component( + &mut inventory, + material, + modifier, + slots, + &state.ecs().read_resource::(), + &state.ecs().read_resource::(), + ) + .ok() + }) + } else { + None + } + }, }; // Attempt to insert items into inventory, dropping them if there is not enough diff --git a/server/src/lib.rs b/server/src/lib.rs index f7dd109548..23a5739920 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -75,7 +75,7 @@ use common::{ cmd::ChatCommand, comp, event::{EventBus, ServerEvent}, - recipe::default_recipe_book, + recipe::{default_component_recipe_book, default_recipe_book}, resources::{BattleMode, Time, TimeOfDay}, rtsim::RtSimEntity, slowjob::SlowJobPool, @@ -1087,6 +1087,7 @@ impl Server { client_timeout: self.settings().client_timeout, world_map: self.map.clone(), recipe_book: default_recipe_book().cloned(), + component_recipe_book: default_component_recipe_book().cloned(), material_stats: (&*self .state .ecs() diff --git a/voxygen/src/hud/crafting.rs b/voxygen/src/hud/crafting.rs index ff1d8e6da3..d7f7339c17 100644 --- a/voxygen/src/hud/crafting.rs +++ b/voxygen/src/hud/crafting.rs @@ -16,14 +16,17 @@ use common::{ assets::AssetExt, comp::inventory::{ item::{ - item_key::ItemKey, modular, modular::ModularComponent, tool::AbilityMap, Item, - ItemBase, ItemDef, ItemDesc, ItemKind, ItemTag, MaterialStatManifest, Quality, - TagExampleInfo, + item_key::ItemKey, + modular, + modular::ModularComponent, + tool::{AbilityMap, ToolKind}, + Item, ItemBase, ItemDef, ItemDesc, ItemKind, ItemTag, MaterialKind, + MaterialStatManifest, Quality, TagExampleInfo, }, slot::InvSlotId, Inventory, }, - recipe::{Recipe, RecipeInput}, + recipe::{ComponentKey, Recipe, RecipeInput}, terrain::SpriteKind, }; use conrod_core::{ @@ -34,7 +37,7 @@ use conrod_core::{ }; use hashbrown::HashMap; use i18n::Localization; -use std::{borrow::Cow, sync::Arc}; +use std::{collections::BTreeMap, sync::Arc}; use strum::{EnumIter, IntoEnumIterator}; use vek::*; @@ -99,10 +102,16 @@ pub enum Event { primary_slot: InvSlotId, secondary_slot: InvSlotId, }, + CraftModularWeaponComponent { + toolkind: ToolKind, + material: InvSlotId, + modifier: Option, + }, ChangeCraftingTab(CraftingTab), Close, Focus(widget::Id), SearchRecipe(Option), + ClearRecipeInputs, } pub struct CraftingShow { @@ -489,19 +498,61 @@ impl<'a> Widget for Crafting<'a> { } }; - let (modular_entry_name, modular_entry_recipe) = { - let recipe = Recipe { - output: ( - Arc::::load_expect_cloned("common.items.weapons.empty.empty"), - 0, - ), - inputs: Vec::new(), - craft_sprite: Some(SpriteKind::CraftingBench), - }; - ( + let weapon_recipe = Recipe { + output: ( + Arc::::load_expect_cloned("common.items.weapons.empty.empty"), + 0, + ), + inputs: Vec::new(), + craft_sprite: Some(SpriteKind::CraftingBench), + }; + let metal_comp_recipe = Recipe { + output: ( + Arc::::load_expect_cloned("common.items.weapons.empty.empty"), + 0, + ), + inputs: Vec::new(), + craft_sprite: Some(SpriteKind::Anvil), + }; + let wood_comp_recipe = Recipe { + output: ( + Arc::::load_expect_cloned("common.items.weapons.empty.empty"), + 0, + ), + inputs: Vec::new(), + craft_sprite: Some(SpriteKind::CraftingBench), + }; + let modular_entries = { + let mut modular_entries = BTreeMap::new(); + modular_entries.insert( String::from("veloren.core.pseudo_recipe.modular_weapon"), - recipe, - ) + (&weapon_recipe, "Modular Weapon"), + ); + modular_entries.insert( + String::from("veloren.core.pseudo_recipe.modular_weapon_component.sword"), + (&metal_comp_recipe, "Sword Blade"), + ); + modular_entries.insert( + String::from("veloren.core.pseudo_recipe.modular_weapon_component.axe"), + (&metal_comp_recipe, "Axe Head"), + ); + modular_entries.insert( + String::from("veloren.core.pseudo_recipe.modular_weapon_component.hammer"), + (&metal_comp_recipe, "Hammer Head"), + ); + modular_entries.insert( + String::from("veloren.core.pseudo_recipe.modular_weapon_component.bow"), + (&wood_comp_recipe, "Bow Limbs"), + ); + modular_entries.insert( + String::from("veloren.core.pseudo_recipe.modular_weapon_component.staff"), + (&wood_comp_recipe, "Staff Shaft"), + ); + modular_entries.insert( + String::from("veloren.core.pseudo_recipe.modular_weapon_component.sceptre"), + (&wood_comp_recipe, "Sceptre Shaft"), + ); + modular_entries }; // First available recipes, then ones with available materials, @@ -553,14 +604,17 @@ impl<'a> Widget for Crafting<'a> { }) .chain( matches!(sel_crafting_tab, CraftingTab::Weapon | CraftingTab::All) - .then_some(( - &modular_entry_name, - &modular_entry_recipe, - self.show.crafting_fields.craft_sprite.map(|(_, s)| s) - == modular_entry_recipe.craft_sprite, - true, - )) - .into_iter(), + .then_some(modular_entries.iter().map(|(recipe_name, (recipe, _))| { + ( + recipe_name, + *recipe, + self.show.crafting_fields.craft_sprite.map(|(_, s)| s) + == recipe.craft_sprite, + true, + ) + })) + .into_iter() + .flatten(), ) .collect(); ordered_recipes.sort_by_key(|(_, recipe, is_craftable, has_materials)| { @@ -573,9 +627,7 @@ impl<'a> Widget for Crafting<'a> { }); // Recipe list - // 1 added for modular weapon fake recipe entry - // TODO: Some better automated way of doing this - let recipe_list_length = self.client.recipe_book().iter().len() + 1; + let recipe_list_length = self.client.recipe_book().iter().len() + modular_entries.len(); if state.ids.recipe_list_btns.len() < recipe_list_length { state.update(|state| { state @@ -630,12 +682,13 @@ impl<'a> Widget for Crafting<'a> { .press_image(self.imgs.selection_press) .image_color(color::rgba(1.0, 0.82, 0.27, 1.0)); - let recipe_name = match name.as_str() { - "veloren.core.pseudo_recipe.modular_weapon" => Cow::Borrowed("Modular Weapon"), - _ => recipe.output.0.name(), + let recipe_name = if let Some((_recipe, modular_name)) = modular_entries.get(name) { + *modular_name + } else { + &recipe.output.0.name }; - let text = Text::new(&recipe_name) + let text = Text::new(recipe_name) .color(if is_craftable { TEXT_COLOR } else { @@ -672,6 +725,7 @@ impl<'a> Widget for Crafting<'a> { } state.update(|s| s.selected_recipe = Some(name.clone())); } + events.push(Event::ClearRecipeInputs); } // set the text here so that the correct position of the button is retrieved text.set(state.ids.recipe_list_labels[i], ui); @@ -739,19 +793,26 @@ impl<'a> Widget for Crafting<'a> { // Selected Recipe if let Some((recipe_name, recipe)) = match state.selected_recipe.as_deref() { - Some("veloren.core.pseudo_recipe.modular_weapon") => { - Some((modular_entry_name.as_str(), &modular_entry_recipe)) - }, - sel_recipe => { - sel_recipe.and_then(|rn| self.client.recipe_book().get(rn).map(|r| (rn, r))) + Some(selected_recipe) => { + if let Some((modular_recipe, _modular_name)) = modular_entries.get(selected_recipe) + { + Some((selected_recipe, *modular_recipe)) + } else { + self.client + .recipe_book() + .get(selected_recipe) + .map(|r| (selected_recipe, r)) + } }, + None => None, } { - let title = match recipe_name { - "veloren.core.pseudo_recipe.modular_weapon" => Cow::Borrowed("Modular Weapon"), - _ => recipe.output.0.name(), + let title = if let Some((_recipe, modular_name)) = modular_entries.get(recipe_name) { + *modular_name + } else { + &recipe.output.0.name }; // Title - Text::new(&title) + Text::new(title) .mid_top_with_margin_on(state.ids.align_ing, -22.0) .font_id(self.fonts.cyri.conrod_id) .font_size(self.fonts.cyri.scale(14)) @@ -759,44 +820,74 @@ impl<'a> Widget for Crafting<'a> { .parent(state.ids.window) .set(state.ids.title_ing, ui); - match recipe_name { - "veloren.core.pseudo_recipe.modular_weapon" => { - let mut slot_maker = SlotMaker { - empty_slot: self.imgs.inv_slot, - filled_slot: self.imgs.inv_slot, - selected_slot: self.imgs.inv_slot_sel, - background_color: Some(UI_MAIN), - content_size: ContentSize { - width_height_ratio: 1.0, - max_fraction: 0.75, - }, - selected_content_scale: 1.067, - amount_font: self.fonts.cyri.conrod_id, - amount_margins: Vec2::new(-4.0, 0.0), - amount_font_size: self.fonts.cyri.scale(12), - amount_text_color: TEXT_COLOR, - content_source: self.inventory, - image_source: self.item_imgs, - slot_manager: Some(self.slot_manager), - pulse: self.pulse, - }; + if modular_entries.get(recipe_name).is_some() { + #[derive(Clone, Copy, Debug)] + enum RecipeKind { + ModularWeapon, + Component(ToolKind), + } - if state.ids.modular_inputs.len() < 2 { - state.update(|s| { - s.ids - .modular_inputs - .resize(2, &mut ui.widget_id_generator()); - }); - } - // Modular Weapon Crafting BG-Art - Image::new(self.imgs.crafting_modular_art) - .mid_top_with_margin_on(state.ids.align_ing, 55.0) - .w_h(168.0, 250.0) - .set(state.ids.modular_art, ui); - let primary_slot = CraftSlot { - index: 0, - invslot: self.show.crafting_fields.recipe_inputs.get(&0).copied(), - requirement: |inv, slot| { + let recipe_kind = match recipe_name { + "veloren.core.pseudo_recipe.modular_weapon" => Some(RecipeKind::ModularWeapon), + "veloren.core.pseudo_recipe.modular_weapon_component.sword" => { + Some(RecipeKind::Component(ToolKind::Sword)) + }, + "veloren.core.pseudo_recipe.modular_weapon_component.axe" => { + Some(RecipeKind::Component(ToolKind::Axe)) + }, + "veloren.core.pseudo_recipe.modular_weapon_component.hammer" => { + Some(RecipeKind::Component(ToolKind::Hammer)) + }, + "veloren.core.pseudo_recipe.modular_weapon_component.bow" => { + Some(RecipeKind::Component(ToolKind::Bow)) + }, + "veloren.core.pseudo_recipe.modular_weapon_component.staff" => { + Some(RecipeKind::Component(ToolKind::Staff)) + }, + "veloren.core.pseudo_recipe.modular_weapon_component.sceptre" => { + Some(RecipeKind::Component(ToolKind::Sceptre)) + }, + _ => None, + }; + + let mut slot_maker = SlotMaker { + empty_slot: self.imgs.inv_slot, + filled_slot: self.imgs.inv_slot, + selected_slot: self.imgs.inv_slot_sel, + background_color: Some(UI_MAIN), + content_size: ContentSize { + width_height_ratio: 1.0, + max_fraction: 0.75, + }, + selected_content_scale: 1.067, + amount_font: self.fonts.cyri.conrod_id, + amount_margins: Vec2::new(-4.0, 0.0), + amount_font_size: self.fonts.cyri.scale(12), + amount_text_color: TEXT_COLOR, + content_source: self.inventory, + image_source: self.item_imgs, + slot_manager: Some(self.slot_manager), + pulse: self.pulse, + }; + + if state.ids.modular_inputs.len() < 2 { + state.update(|s| { + s.ids + .modular_inputs + .resize(2, &mut ui.widget_id_generator()); + }); + } + // Modular Weapon Crafting BG-Art + Image::new(self.imgs.crafting_modular_art) + .mid_top_with_margin_on(state.ids.align_ing, 55.0) + .w_h(168.0, 250.0) + .set(state.ids.modular_art, ui); + + let primary_slot = CraftSlot { + index: 0, + invslot: self.show.crafting_fields.recipe_inputs.get(&0).copied(), + requirement: match recipe_kind { + Some(RecipeKind::ModularWeapon) => |inv, slot| { inv.and_then(|inv| inv.get(slot)).map_or(false, |item| { matches!( &*item.kind(), @@ -806,50 +897,88 @@ impl<'a> Widget for Crafting<'a> { ) }) }, - required_amount: 1, - }; + // TODO: Maybe try to figure out way to get this to work? + // Captures self and toolkind which prevents it from becoming a function + // Some(RecipeKind::Component(toolkind)) => |inv, slot| { + // inv.and_then(|inv| inv.get(slot)).map_or(false, |item| { + // self.client.component_recipe_book().iter().filter(|(key, + // _recipe)| key.toolkind == toolkind).any(|(key, _recipe)| key.material == + // item.item_definition_id()) }) + // }, + Some(RecipeKind::Component( + ToolKind::Sword | ToolKind::Axe | ToolKind::Hammer, + )) => |inv, slot| { + inv.and_then(|inv| inv.get(slot)).map_or(false, |item| { + matches!(&*item.kind(), ItemKind::Ingredient { .. }) + && item + .tags() + .contains(&ItemTag::MaterialKind(MaterialKind::Metal)) + && item + .tags() + .iter() + .any(|tag| matches!(tag, ItemTag::Material(_))) + }) + }, + Some(RecipeKind::Component( + ToolKind::Bow | ToolKind::Staff | ToolKind::Sceptre, + )) => |inv, slot| { + inv.and_then(|inv| inv.get(slot)).map_or(false, |item| { + matches!(&*item.kind(), ItemKind::Ingredient { .. }) + && item + .tags() + .contains(&ItemTag::MaterialKind(MaterialKind::Wood)) + && item + .tags() + .iter() + .any(|tag| matches!(tag, ItemTag::Material(_))) + }) + }, + Some(RecipeKind::Component(_)) | None => |_, _| false, + }, + }; - let primary_slot_widget = slot_maker - .fabricate(primary_slot, [40.0; 2]) - .top_left_with_margins_on(state.ids.modular_art, 4.0, 4.0) - .parent(state.ids.align_ing); + let primary_slot_widget = slot_maker + .fabricate(primary_slot, [40.0; 2]) + .top_left_with_margins_on(state.ids.modular_art, 4.0, 4.0) + .parent(state.ids.align_ing); - if let Some(slot) = primary_slot.invslot { - if let Some(item) = self.inventory.get(slot) { - primary_slot_widget - .with_item_tooltip( - self.item_tooltip_manager, - core::iter::once(item as &dyn ItemDesc), - &None, - &item_tooltip, - ) - .set(state.ids.modular_inputs[0], ui); - } else { - primary_slot_widget.set(state.ids.modular_inputs[0], ui); - } + if let Some(slot) = primary_slot.invslot { + if let Some(item) = self.inventory.get(slot) { + primary_slot_widget + .with_item_tooltip( + self.item_tooltip_manager, + core::iter::once(item as &dyn ItemDesc), + &None, + &item_tooltip, + ) + .set(state.ids.modular_inputs[0], ui); } else { primary_slot_widget.set(state.ids.modular_inputs[0], ui); } + } else { + primary_slot_widget.set(state.ids.modular_inputs[0], ui); + } - // Not sure why it doesn't work, maybe revisit later? - // if let Some(item) = primary_slot.invslot.and_then(|slot| - // self.inventory.get(slot)) { primary_slot_widget - // .with_item_tooltip( - // self.item_tooltip_manager, - // core::iter::once(item as &dyn ItemDesc), - // &None, - // &item_tooltip, - // ) - // .set(state.ids.modular_inputs[0], ui); - // } else { - // primary_slot_widget - // .set(state.ids.modular_inputs[0], ui); - // } + // Not sure why it doesn't work, maybe revisit later? + // if let Some(item) = primary_slot.invslot.and_then(|slot| + // self.inventory.get(slot)) { primary_slot_widget + // .with_item_tooltip( + // self.item_tooltip_manager, + // core::iter::once(item as &dyn ItemDesc), + // &None, + // &item_tooltip, + // ) + // .set(state.ids.modular_inputs[0], ui); + // } else { + // primary_slot_widget + // .set(state.ids.modular_inputs[0], ui); + // } - let secondary_slot = CraftSlot { - index: 1, - invslot: self.show.crafting_fields.recipe_inputs.get(&1).copied(), - requirement: |inv, slot| { + let secondary_slot = CraftSlot { + index: 1, + invslot: self.show.crafting_fields.recipe_inputs.get(&1).copied(), + requirement: match recipe_kind { + Some(RecipeKind::ModularWeapon) => |inv, slot| { inv.and_then(|inv| inv.get(slot)).map_or(false, |item| { matches!( &*item.kind(), @@ -859,224 +988,550 @@ impl<'a> Widget for Crafting<'a> { ) }) }, - required_amount: 1, - }; + // TODO: Maybe try to figure out way to get this to work? + // Captures self and toolkind which prevents it from becoming a function + // Some(RecipeKind::Component(toolkind)) => |inv, slot| { + // inv.and_then(|inv| inv.get(slot)).map_or(false, |item| { + // self.client.component_recipe_book().iter().filter(|(key, + // _recipe)| key.toolkind == toolkind).any(|(key, _recipe)| key.modifier == + // Some(item.item_definition_id())) }) + // }, + Some(RecipeKind::Component(_)) => |inv, slot| { + inv.and_then(|inv| inv.get(slot)).map_or(false, |item| { + item.item_definition_id() + .starts_with("common.items.crafting_ing.animal_misc") + }) + }, + None => |_, _| false, + }, + }; - let secondary_slot_widget = slot_maker - .fabricate(secondary_slot, [40.0; 2]) - .top_right_with_margins_on(state.ids.modular_art, 4.0, 4.0) - .parent(state.ids.align_ing); + let secondary_slot_widget = slot_maker + .fabricate(secondary_slot, [40.0; 2]) + .top_right_with_margins_on(state.ids.modular_art, 4.0, 4.0) + .parent(state.ids.align_ing); - if let Some(slot) = secondary_slot.invslot { - if let Some(item) = self.inventory.get(slot) { - secondary_slot_widget - .with_item_tooltip( - self.item_tooltip_manager, - core::iter::once(item as &dyn ItemDesc), - &None, - &item_tooltip, - ) - .set(state.ids.modular_inputs[1], ui); - } else { - secondary_slot_widget.set(state.ids.modular_inputs[1], ui); - } + if let Some(slot) = secondary_slot.invslot { + if let Some(item) = self.inventory.get(slot) { + secondary_slot_widget + .with_item_tooltip( + self.item_tooltip_manager, + core::iter::once(item as &dyn ItemDesc), + &None, + &item_tooltip, + ) + .set(state.ids.modular_inputs[1], ui); } else { secondary_slot_widget.set(state.ids.modular_inputs[1], ui); } + } else { + secondary_slot_widget.set(state.ids.modular_inputs[1], ui); + } - // if let Some(item) = secondary_slot.invslot.and_then(|slot| - // self.inventory.get(slot)) { secondary_slot_widget - // .with_item_tooltip( - // self.item_tooltip_manager, - // core::iter::once(item as &dyn ItemDesc), - // &None, - // &item_tooltip, - // ) - // .set(state.ids.modular_inputs[1], ui); - // } else { - // secondary_slot_widget - // .set(state.ids.modular_inputs[1], ui); - // } + // if let Some(item) = secondary_slot.invslot.and_then(|slot| + // self.inventory.get(slot)) { secondary_slot_widget + // .with_item_tooltip( + // self.item_tooltip_manager, + // core::iter::once(item as &dyn ItemDesc), + // &None, + // &item_tooltip, + // ) + // .set(state.ids.modular_inputs[1], ui); + // } else { + // secondary_slot_widget + // .set(state.ids.modular_inputs[1], ui); + // } - let can_perform = - primary_slot.invslot.is_some() && secondary_slot.invslot.is_some(); + let can_perform = match recipe_kind { + Some(RecipeKind::ModularWeapon) => { + primary_slot.invslot.is_some() && secondary_slot.invslot.is_some() + }, + Some(RecipeKind::Component(_)) => primary_slot.invslot.is_some(), + None => false, + }; - let prim_item_placed = primary_slot.invslot.is_some(); - let sec_item_placed = secondary_slot.invslot.is_some(); + let prim_item_placed = primary_slot.invslot.is_some(); + let sec_item_placed = secondary_slot.invslot.is_some(); - // Craft button - if Button::image(self.imgs.button) - .w_h(105.0, 25.0) - .hover_image( - can_perform - .then_some(self.imgs.button_hover) - .unwrap_or(self.imgs.button), - ) - .press_image( - can_perform - .then_some(self.imgs.button_press) - .unwrap_or(self.imgs.button), - ) - .label(self.localized_strings.get("hud.crafting.craft")) - .label_y(conrod_core::position::Relative::Scalar(1.0)) - .label_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) - .label_font_size(self.fonts.cyri.scale(12)) - .label_font_id(self.fonts.cyri.conrod_id) - .image_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) - .mid_bottom_with_margin_on(state.ids.align_ing, -31.0) - .parent(state.ids.window_frame) - .set(state.ids.btn_craft, ui) - .was_clicked() - { - if let (Some(primary_slot), Some(secondary_slot)) = - (primary_slot.invslot, secondary_slot.invslot) + // Craft button + if Button::image(self.imgs.button) + .w_h(105.0, 25.0) + .hover_image( + can_perform + .then_some(self.imgs.button_hover) + .unwrap_or(self.imgs.button), + ) + .press_image( + can_perform + .then_some(self.imgs.button_press) + .unwrap_or(self.imgs.button), + ) + .label(self.localized_strings.get("hud.crafting.craft")) + .label_y(conrod_core::position::Relative::Scalar(1.0)) + .label_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) + .label_font_size(self.fonts.cyri.scale(12)) + .label_font_id(self.fonts.cyri.conrod_id) + .image_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) + .mid_bottom_with_margin_on(state.ids.align_ing, -31.0) + .parent(state.ids.window_frame) + .set(state.ids.btn_craft, ui) + .was_clicked() + { + match recipe_kind { + Some(RecipeKind::ModularWeapon) => { + if let (Some(primary_slot), Some(secondary_slot)) = + (primary_slot.invslot, secondary_slot.invslot) + { + events.push(Event::CraftModularWeapon { + primary_slot, + secondary_slot, + }); + } + }, + Some(RecipeKind::Component(toolkind)) => { + if let Some(primary_slot) = primary_slot.invslot { + events.push(Event::CraftModularWeaponComponent { + toolkind, + material: primary_slot, + modifier: secondary_slot.invslot, + }); + } + }, + None => {}, + } + } + + // Output Image + Image::new(self.imgs.inv_slot) + .w_h(80.0, 80.0) + .mid_bottom_with_margin_on(state.ids.align_ing, 50.0) + .parent(state.ids.align_ing) + .set(state.ids.output_img_frame, ui); + let bg_col = Color::Rgba(1.0, 1.0, 1.0, 0.4); + if !prim_item_placed { + Image::new(self.imgs.ing_ico_prim) + .middle_of(state.ids.modular_inputs[0]) + .color(Some(bg_col)) + .w_h(34.0, 34.0) + .graphics_for(state.ids.modular_inputs[0]) + .set(state.ids.modular_wep_ing_1_bg, ui); + } + if !sec_item_placed { + Image::new(self.imgs.ing_ico_sec) + .middle_of(state.ids.modular_inputs[1]) + .color(Some(bg_col)) + .w_h(50.0, 50.0) + .graphics_for(state.ids.modular_inputs[1]) + .set(state.ids.modular_wep_ing_2_bg, ui); + } + + let ability_map = &AbilityMap::load().read(); + let msm = &MaterialStatManifest::load().read(); + + if let Some(output_item) = match recipe_kind { + Some(RecipeKind::ModularWeapon) => { + if let Some((primary_comp, toolkind)) = primary_slot + .invslot + .and_then(|slot| self.inventory.get(slot)) + .and_then(|item| { + if let ItemKind::ModularComponent( + ModularComponent::ToolPrimaryComponent { toolkind, .. }, + ) = &*item.kind() + { + Some((item, *toolkind)) + } else { + None + } + }) { - events.push(Event::CraftModularWeapon { - primary_slot, - secondary_slot, - }); - } - } - - // Output Image - Image::new(self.imgs.inv_slot) - .w_h(80.0, 80.0) - .mid_bottom_with_margin_on(state.ids.align_ing, 50.0) - .parent(state.ids.align_ing) - .set(state.ids.output_img_frame, ui); - let bg_col = Color::Rgba(1.0, 1.0, 1.0, 0.4); - if !prim_item_placed { - Image::new(self.imgs.ing_ico_prim) - .middle_of(state.ids.modular_inputs[0]) - .color(Some(bg_col)) - .w_h(34.0, 34.0) - .graphics_for(state.ids.modular_inputs[0]) - .set(state.ids.modular_wep_ing_1_bg, ui); - } - if !sec_item_placed { - Image::new(self.imgs.ing_ico_sec) - .middle_of(state.ids.modular_inputs[1]) - .color(Some(bg_col)) - .w_h(50.0, 50.0) - .graphics_for(state.ids.modular_inputs[1]) - .set(state.ids.modular_wep_ing_2_bg, ui); - } - - if let (Some(primary_comp), Some(secondary_comp)) = ( - primary_slot - .invslot - .and_then(|slot| self.inventory.get(slot)) - .filter(|item| { - matches!( - &*item.kind(), - ItemKind::ModularComponent( - ModularComponent::ToolPrimaryComponent { .. } + secondary_slot + .invslot + .and_then(|slot| self.inventory.get(slot)) + .filter(|item| { + matches!( + &*item.kind(), + ItemKind::ModularComponent( + ModularComponent::ToolSecondaryComponent { toolkind: toolkind_b, .. } + ) if toolkind == *toolkind_b ) - ) - }), - secondary_slot - .invslot - .and_then(|slot| self.inventory.get(slot)) - .filter(|item| { - matches!( - &*item.kind(), - ItemKind::ModularComponent( - ModularComponent::ToolSecondaryComponent { .. } - ) - ) - }), - ) { - let ability_map = &AbilityMap::load().read(); - let msm = &MaterialStatManifest::load().read(); - let output_item = Item::new_from_item_base( - ItemBase::Modular(modular::ModularBase::Tool), - vec![ - primary_comp.duplicate(ability_map, msm), - secondary_comp.duplicate(ability_map, msm), - ], - ability_map, - msm, - ); - - Button::image(animate_by_pulse( - &self - .item_imgs - .img_ids_or_not_found_img(ItemKey::ModularWeapon( - modular::weapon_to_key(&output_item), - )), - self.pulse, - )) - .w_h(55.0, 55.0) - .label(&output_item.name()) - .label_color(TEXT_COLOR) - .label_font_size(self.fonts.cyri.scale(14)) - .label_font_id(self.fonts.cyri.conrod_id) - .label_y(conrod_core::position::Relative::Scalar(-64.0)) - .label_x(conrod_core::position::Relative::Scalar(0.0)) - .middle_of(state.ids.output_img_frame) - .with_item_tooltip( - self.item_tooltip_manager, - core::iter::once(&output_item as &dyn ItemDesc), - &None, - &item_tooltip, - ) - .set(state.ids.output_img, ui); - } else { - Text::new(self.localized_strings.get("hud.crafting.modular_desc")) - .mid_top_with_margin_on(state.ids.modular_art, -25.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(13)) - .color(TEXT_COLOR) - .set(state.ids.title_main, ui); - Image::new(self.imgs.wep_ico) - .middle_of(state.ids.output_img_frame) - .color(Some(bg_col)) - .w_h(70.0, 70.0) - .graphics_for(state.ids.output_img) - .set(state.ids.modular_wep_empty_bg, ui); - } - }, - _ => { - let can_perform = - self.client - .available_recipes() - .get(recipe_name) - .map_or(false, |cs| { - cs.map_or(true, |cs| { - Some(cs) - == self.show.crafting_fields.craft_sprite.map(|(_, s)| s) }) - }); + .map(|secondary_comp| { + Item::new_from_item_base( + ItemBase::Modular(modular::ModularBase::Tool), + vec![ + primary_comp.duplicate(ability_map, msm), + secondary_comp.duplicate(ability_map, msm), + ], + ability_map, + msm, + ) + }) + } else { + None + } + }, + Some(RecipeKind::Component(toolkind)) => { + if let Some(material) = primary_slot + .invslot + .and_then(|slot| self.inventory.get(slot)) + .map(|item| String::from(item.item_definition_id())) + { + let component_key = ComponentKey { + toolkind, + material, + modifier: secondary_slot + .invslot + .and_then(|slot| self.inventory.get(slot)) + .map(|item| String::from(item.item_definition_id())), + }; + self.client.component_recipe_book().get(&component_key).map( + |component_recipe| component_recipe.item_output(ability_map, msm), + ) + } else { + None + } + }, + None => None, + } { + Button::image(animate_by_pulse( + &self + .item_imgs + .img_ids_or_not_found_img(ItemKey::from(&output_item)), + self.pulse, + )) + .w_h(55.0, 55.0) + .label(&output_item.name()) + .label_color(TEXT_COLOR) + .label_font_size(self.fonts.cyri.scale(14)) + .label_font_id(self.fonts.cyri.conrod_id) + .label_y(conrod_core::position::Relative::Scalar(-64.0)) + .label_x(conrod_core::position::Relative::Scalar(0.0)) + .middle_of(state.ids.output_img_frame) + .with_item_tooltip( + self.item_tooltip_manager, + core::iter::once(&output_item as &dyn ItemDesc), + &None, + &item_tooltip, + ) + .set(state.ids.output_img, ui); + } else { + Text::new(self.localized_strings.get("hud.crafting.modular_desc")) + .mid_top_with_margin_on(state.ids.modular_art, -25.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(13)) + .color(TEXT_COLOR) + .set(state.ids.title_main, ui); + Image::new(self.imgs.wep_ico) + .middle_of(state.ids.output_img_frame) + .color(Some(bg_col)) + .w_h(70.0, 70.0) + .graphics_for(state.ids.output_img) + .set(state.ids.modular_wep_empty_bg, ui); + } + } else { + let can_perform = + self.client + .available_recipes() + .get(recipe_name) + .map_or(false, |cs| { + cs.map_or(true, |cs| { + Some(cs) == self.show.crafting_fields.craft_sprite.map(|(_, s)| s) + }) + }); - // Craft button - if Button::image(self.imgs.button) - .w_h(105.0, 25.0) - .hover_image( - can_perform - .then_some(self.imgs.button_hover) - .unwrap_or(self.imgs.button), + // Craft button + if Button::image(self.imgs.button) + .w_h(105.0, 25.0) + .hover_image( + can_perform + .then_some(self.imgs.button_hover) + .unwrap_or(self.imgs.button), + ) + .press_image( + can_perform + .then_some(self.imgs.button_press) + .unwrap_or(self.imgs.button), + ) + .label(self.localized_strings.get("hud.crafting.craft")) + .label_y(conrod_core::position::Relative::Scalar(1.0)) + .label_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) + .label_font_size(self.fonts.cyri.scale(12)) + .label_font_id(self.fonts.cyri.conrod_id) + .image_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) + .mid_bottom_with_margin_on(state.ids.align_ing, -31.0) + .parent(state.ids.window_frame) + .set(state.ids.btn_craft, ui) + .was_clicked() + { + events.push(Event::CraftRecipe(String::from(recipe_name))); + } + + // Output Image Frame + let quality_col_img = match recipe.output.0.quality() { + Quality::Low => self.imgs.inv_slot_grey, + Quality::Common => self.imgs.inv_slot, + Quality::Moderate => self.imgs.inv_slot_green, + Quality::High => self.imgs.inv_slot_blue, + Quality::Epic => self.imgs.inv_slot_purple, + Quality::Legendary => self.imgs.inv_slot_gold, + Quality::Artifact => self.imgs.inv_slot_orange, + _ => self.imgs.inv_slot_red, + }; + + Image::new(quality_col_img) + .w_h(60.0, 60.0) + .top_right_with_margins_on(state.ids.align_ing, 15.0, 10.0) + .parent(state.ids.align_ing) + .set(state.ids.output_img_frame, ui); + + let output_text = format!("x{}", &recipe.output.1.to_string()); + // Output Image + Button::image(animate_by_pulse( + &self + .item_imgs + .img_ids_or_not_found_img((&*recipe.output.0).into()), + self.pulse, + )) + .w_h(55.0, 55.0) + .label(&output_text) + .label_color(TEXT_COLOR) + .label_font_size(self.fonts.cyri.scale(14)) + .label_font_id(self.fonts.cyri.conrod_id) + .label_y(conrod_core::position::Relative::Scalar(-24.0)) + .label_x(conrod_core::position::Relative::Scalar(24.0)) + .middle_of(state.ids.output_img_frame) + .with_item_tooltip( + self.item_tooltip_manager, + core::iter::once(&*recipe.output.0 as &dyn ItemDesc), + &None, + &item_tooltip, + ) + .set(state.ids.output_img, ui); + + // Tags + if state.ids.tags_ing.len() < CraftingTab::iter().len() { + state.update(|state| { + state + .ids + .tags_ing + .resize(CraftingTab::iter().len(), &mut ui.widget_id_generator()) + }); + } + for (row, chunk) in CraftingTab::iter() + .filter(|crafting_tab| match crafting_tab { + CraftingTab::All => false, + _ => crafting_tab.satisfies(recipe), + }) + .filter(|crafting_tab| crafting_tab != &self.show.crafting_fields.crafting_tab) + .collect::>() + .chunks(3) + .enumerate() + { + for (col, crafting_tab) in chunk.iter().rev().enumerate() { + let i = 3 * row + col; + let icon = Image::new(crafting_tab.img_id(self.imgs)) + .w_h(20.0, 20.0) + .parent(state.ids.window); + let icon = if col == 0 { + icon.bottom_right_with_margins_on( + state.ids.output_img_frame, + -24.0 - 24.0 * (row as f64), + 4.0, + ) + } else { + icon.left_from(state.ids.tags_ing[i - 1], 4.0) + }; + icon.with_tooltip( + self.tooltip_manager, + self.localized_strings.get(crafting_tab.name_key()), + "", + &tabs_tooltip, + TEXT_COLOR, ) - .press_image( - can_perform - .then_some(self.imgs.button_press) - .unwrap_or(self.imgs.button), - ) - .label(self.localized_strings.get("hud.crafting.craft")) - .label_y(conrod_core::position::Relative::Scalar(1.0)) - .label_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) - .label_font_size(self.fonts.cyri.scale(12)) - .label_font_id(self.fonts.cyri.conrod_id) - .image_color(can_perform.then_some(TEXT_COLOR).unwrap_or(TEXT_GRAY_COLOR)) - .mid_bottom_with_margin_on(state.ids.align_ing, -31.0) - .parent(state.ids.window_frame) - .set(state.ids.btn_craft, ui) - .was_clicked() - { - events.push(Event::CraftRecipe(String::from(recipe_name))); + .set(state.ids.tags_ing[i], ui); } + } + // Crafting Station Info + if recipe.craft_sprite.is_some() { + Text::new( + self.localized_strings + .get("hud.crafting.req_crafting_station"), + ) + .top_left_with_margins_on(state.ids.align_ing, 10.0, 5.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(18)) + .color(TEXT_COLOR) + .set(state.ids.req_station_title, ui); + let station_img = match recipe.craft_sprite { + Some(SpriteKind::Anvil) => "Anvil", + Some(SpriteKind::Cauldron) => "Cauldron", + Some(SpriteKind::CookingPot) => "CookingPot", + Some(SpriteKind::CraftingBench) => "CraftingBench", + Some(SpriteKind::Forge) => "Forge", + Some(SpriteKind::Loom) => "Loom", + Some(SpriteKind::SpinningWheel) => "SpinningWheel", + Some(SpriteKind::TanningRack) => "TanningRack", + Some(SpriteKind::DismantlingBench) => "DismantlingBench", + None => "CraftsmanHammer", + _ => "CraftsmanHammer", + }; + Image::new(animate_by_pulse( + &self + .item_imgs + .img_ids_or_not_found_img(ItemKey::Tool(station_img.to_string())), + self.pulse, + )) + .w_h(25.0, 25.0) + .down_from(state.ids.req_station_title, 10.0) + .parent(state.ids.align_ing) + .set(state.ids.req_station_img, ui); - // Output Image Frame - let quality_col_img = match recipe.output.0.quality() { + let station_name = match recipe.craft_sprite { + Some(SpriteKind::Anvil) => "hud.crafting.anvil", + Some(SpriteKind::Cauldron) => "hud.crafting.cauldron", + Some(SpriteKind::CookingPot) => "hud.crafting.cooking_pot", + Some(SpriteKind::CraftingBench) => "hud.crafting.crafting_bench", + Some(SpriteKind::Forge) => "hud.crafting.forge", + Some(SpriteKind::Loom) => "hud.crafting.loom", + Some(SpriteKind::SpinningWheel) => "hud.crafting.spinning_wheel", + Some(SpriteKind::TanningRack) => "hud.crafting.tanning_rack", + Some(SpriteKind::DismantlingBench) => "hud.crafting.salvaging_station", + _ => "", + }; + Text::new(self.localized_strings.get(station_name)) + .right_from(state.ids.req_station_img, 10.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(14)) + .color( + if self.show.crafting_fields.craft_sprite.map(|(_, s)| s) + == recipe.craft_sprite + { + TEXT_COLOR + } else { + TEXT_DULL_RED_COLOR + }, + ) + .set(state.ids.req_station_txt, ui); + } + // Ingredients Text + let mut ing_txt = Text::new(self.localized_strings.get("hud.crafting.ingredients")) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(18)) + .color(TEXT_COLOR); + if recipe.craft_sprite.is_some() { + ing_txt = ing_txt.down_from(state.ids.req_station_img, 10.0); + } else { + ing_txt = ing_txt.top_left_with_margins_on(state.ids.align_ing, 10.0, 5.0); + }; + ing_txt.set(state.ids.ingredients_txt, ui); + + // Ingredient images with tooltip + if state.ids.ingredient_frame.len() < recipe.inputs().len() { + state.update(|state| { + state + .ids + .ingredient_frame + .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) + }); + }; + if state.ids.ingredients.len() < recipe.inputs().len() { + state.update(|state| { + state + .ids + .ingredients + .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) + }); + }; + if state.ids.ingredient_btn.len() < recipe.inputs().len() { + state.update(|state| { + state + .ids + .ingredient_btn + .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) + }); + }; + if state.ids.ingredient_img.len() < recipe.inputs().len() { + state.update(|state| { + state + .ids + .ingredient_img + .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) + }); + }; + if state.ids.req_text.len() < recipe.inputs().len() { + state.update(|state| { + state + .ids + .req_text + .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) + }); + }; + + // Widget generation for every ingredient + for (i, (recipe_input, amount, _)) in recipe.inputs.iter().enumerate() { + let item_def = match recipe_input { + RecipeInput::Item(item_def) => Arc::clone(item_def), + RecipeInput::Tag(tag) | RecipeInput::TagSameItem(tag) => { + Arc::::load_expect_cloned( + self.inventory + .slots() + .find_map(|slot| { + slot.as_ref().and_then(|item| { + if item.matches_recipe_input(recipe_input, *amount) { + Some(item.item_definition_id()) + } else { + None + } + }) + }) + .unwrap_or_else(|| tag.exemplar_identifier()), + ) + }, + RecipeInput::ListSameItem(item_defs) => Arc::::load_expect_cloned( + self.inventory + .slots() + .find_map(|slot| { + slot.as_ref().and_then(|item| { + if item.matches_recipe_input(recipe_input, *amount) { + Some(item.item_definition_id()) + } else { + None + } + }) + }) + .unwrap_or_else(|| { + item_defs + .first() + .map(|i| i.item_definition_id()) + .unwrap_or("common.items.weapons.empty.empty") + }), + ), + }; + + // Grey color for images and text if their amount is too low to craft the + // item + let item_count_in_inventory = self.inventory.item_count(&*item_def); + let col = if item_count_in_inventory >= u64::from(*amount.max(&1)) { + TEXT_COLOR + } else { + TEXT_DULL_RED_COLOR + }; + // Slot BG + let frame_pos = if i == 0 { + state.ids.ingredients_txt + } else { + state.ids.ingredient_frame[i - 1] + }; + // add a larger offset for the the first ingredient and the "Required Text + // for Catalysts/Tools" + let frame_offset = if i == 0 { + 10.0 + } else if *amount == 0 { + 5.0 + } else { + 0.0 + }; + let quality_col_img = match &item_def.quality() { Quality::Low => self.imgs.inv_slot_grey, Quality::Common => self.imgs.inv_slot, Quality::Moderate => self.imgs.inv_slot_green, @@ -1086,373 +1541,101 @@ impl<'a> Widget for Crafting<'a> { Quality::Artifact => self.imgs.inv_slot_orange, _ => self.imgs.inv_slot_red, }; - - Image::new(quality_col_img) - .w_h(60.0, 60.0) - .top_right_with_margins_on(state.ids.align_ing, 15.0, 10.0) - .parent(state.ids.align_ing) - .set(state.ids.output_img_frame, ui); - - let output_text = format!("x{}", &recipe.output.1.to_string()); - // Output Image - Button::image(animate_by_pulse( - &self - .item_imgs - .img_ids_or_not_found_img((&*recipe.output.0).into()), - self.pulse, - )) - .w_h(55.0, 55.0) - .label(&output_text) - .label_color(TEXT_COLOR) - .label_font_size(self.fonts.cyri.scale(14)) - .label_font_id(self.fonts.cyri.conrod_id) - .label_y(conrod_core::position::Relative::Scalar(-24.0)) - .label_x(conrod_core::position::Relative::Scalar(24.0)) - .middle_of(state.ids.output_img_frame) - .with_item_tooltip( - self.item_tooltip_manager, - core::iter::once(&*recipe.output.0 as &dyn ItemDesc), - &None, - &item_tooltip, - ) - .set(state.ids.output_img, ui); - - // Tags - if state.ids.tags_ing.len() < CraftingTab::iter().len() { - state.update(|state| { - state - .ids - .tags_ing - .resize(CraftingTab::iter().len(), &mut ui.widget_id_generator()) - }); - } - for (row, chunk) in CraftingTab::iter() - .filter(|crafting_tab| match crafting_tab { - CraftingTab::All => false, - _ => crafting_tab.satisfies(recipe), - }) - .filter(|crafting_tab| { - crafting_tab != &self.show.crafting_fields.crafting_tab - }) - .collect::>() - .chunks(3) - .enumerate() - { - for (col, crafting_tab) in chunk.iter().rev().enumerate() { - let i = 3 * row + col; - let icon = Image::new(crafting_tab.img_id(self.imgs)) - .w_h(20.0, 20.0) - .parent(state.ids.window); - let icon = if col == 0 { - icon.bottom_right_with_margins_on( - state.ids.output_img_frame, - -24.0 - 24.0 * (row as f64), - 4.0, - ) - } else { - icon.left_from(state.ids.tags_ing[i - 1], 4.0) - }; - icon.with_tooltip( - self.tooltip_manager, - self.localized_strings.get(crafting_tab.name_key()), - "", - &tabs_tooltip, - TEXT_COLOR, - ) - .set(state.ids.tags_ing[i], ui); - } - } - // Crafting Station Info - if recipe.craft_sprite.is_some() { - Text::new( - self.localized_strings - .get("hud.crafting.req_crafting_station"), - ) - .top_left_with_margins_on(state.ids.align_ing, 10.0, 5.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(18)) - .color(TEXT_COLOR) - .set(state.ids.req_station_title, ui); - let station_img = match recipe.craft_sprite { - Some(SpriteKind::Anvil) => "Anvil", - Some(SpriteKind::Cauldron) => "Cauldron", - Some(SpriteKind::CookingPot) => "CookingPot", - Some(SpriteKind::CraftingBench) => "CraftingBench", - Some(SpriteKind::Forge) => "Forge", - Some(SpriteKind::Loom) => "Loom", - Some(SpriteKind::SpinningWheel) => "SpinningWheel", - Some(SpriteKind::TanningRack) => "TanningRack", - Some(SpriteKind::DismantlingBench) => "DismantlingBench", - None => "CraftsmanHammer", - _ => "CraftsmanHammer", - }; - Image::new(animate_by_pulse( - &self - .item_imgs - .img_ids_or_not_found_img(ItemKey::Tool(station_img.to_string())), - self.pulse, - )) - .w_h(25.0, 25.0) - .down_from(state.ids.req_station_title, 10.0) - .parent(state.ids.align_ing) - .set(state.ids.req_station_img, ui); - - let station_name = match recipe.craft_sprite { - Some(SpriteKind::Anvil) => "hud.crafting.anvil", - Some(SpriteKind::Cauldron) => "hud.crafting.cauldron", - Some(SpriteKind::CookingPot) => "hud.crafting.cooking_pot", - Some(SpriteKind::CraftingBench) => "hud.crafting.crafting_bench", - Some(SpriteKind::Forge) => "hud.crafting.forge", - Some(SpriteKind::Loom) => "hud.crafting.loom", - Some(SpriteKind::SpinningWheel) => "hud.crafting.spinning_wheel", - Some(SpriteKind::TanningRack) => "hud.crafting.tanning_rack", - Some(SpriteKind::DismantlingBench) => "hud.crafting.salvaging_station", - _ => "", - }; - Text::new(self.localized_strings.get(station_name)) - .right_from(state.ids.req_station_img, 10.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(14)) - .color( - if self.show.crafting_fields.craft_sprite.map(|(_, s)| s) - == recipe.craft_sprite - { - TEXT_COLOR - } else { - TEXT_DULL_RED_COLOR - }, - ) - .set(state.ids.req_station_txt, ui); - } - // Ingredients Text - let mut ing_txt = - Text::new(self.localized_strings.get("hud.crafting.ingredients")) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(18)) - .color(TEXT_COLOR); - if recipe.craft_sprite.is_some() { - ing_txt = ing_txt.down_from(state.ids.req_station_img, 10.0); + let frame = Image::new(quality_col_img).w_h(25.0, 25.0); + let frame = if *amount == 0 { + frame.down_from(state.ids.req_text[i], 10.0 + frame_offset) } else { - ing_txt = ing_txt.top_left_with_margins_on(state.ids.align_ing, 10.0, 5.0); + frame.down_from(frame_pos, 10.0 + frame_offset) }; - ing_txt.set(state.ids.ingredients_txt, ui); - - // Ingredient images with tooltip - if state.ids.ingredient_frame.len() < recipe.inputs().len() { - state.update(|state| { - state - .ids - .ingredient_frame - .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) - }); - }; - if state.ids.ingredients.len() < recipe.inputs().len() { - state.update(|state| { - state - .ids - .ingredients - .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) - }); - }; - if state.ids.ingredient_btn.len() < recipe.inputs().len() { - state.update(|state| { - state - .ids - .ingredient_btn - .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) - }); - }; - if state.ids.ingredient_img.len() < recipe.inputs().len() { - state.update(|state| { - state - .ids - .ingredient_img - .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) - }); - }; - if state.ids.req_text.len() < recipe.inputs().len() { - state.update(|state| { - state - .ids - .req_text - .resize(recipe.inputs().len(), &mut ui.widget_id_generator()) - }); - }; - - // Widget generation for every ingredient - for (i, (recipe_input, amount, _)) in recipe.inputs.iter().enumerate() { - let item_def = match recipe_input { - RecipeInput::Item(item_def) => Arc::clone(item_def), - RecipeInput::Tag(tag) | RecipeInput::TagSameItem(tag) => { - Arc::::load_expect_cloned( - self.inventory - .slots() - .find_map(|slot| { - slot.as_ref().and_then(|item| { - if item.matches_recipe_input(recipe_input, *amount) - { - Some(item.item_definition_id()) - } else { - None - } - }) - }) - .unwrap_or_else(|| tag.exemplar_identifier()), - ) - }, - RecipeInput::ListSameItem(item_defs) => { - Arc::::load_expect_cloned( - self.inventory - .slots() - .find_map(|slot| { - slot.as_ref().and_then(|item| { - if item.matches_recipe_input(recipe_input, *amount) - { - Some(item.item_definition_id()) - } else { - None - } - }) - }) - .unwrap_or_else(|| { - item_defs - .first() - .map(|i| i.item_definition_id()) - .unwrap_or("common.items.weapons.empty.empty") - }), - ) - }, - }; - - // Grey color for images and text if their amount is too low to craft the - // item - let item_count_in_inventory = self.inventory.item_count(&*item_def); - let col = if item_count_in_inventory >= u64::from(*amount.max(&1)) { - TEXT_COLOR - } else { - TEXT_DULL_RED_COLOR - }; - // Slot BG - let frame_pos = if i == 0 { - state.ids.ingredients_txt - } else { - state.ids.ingredient_frame[i - 1] - }; - // add a larger offset for the the first ingredient and the "Required Text - // for Catalysts/Tools" - let frame_offset = if i == 0 { - 10.0 - } else if *amount == 0 { - 5.0 - } else { - 0.0 - }; - let quality_col_img = match &item_def.quality() { - Quality::Low => self.imgs.inv_slot_grey, - Quality::Common => self.imgs.inv_slot, - Quality::Moderate => self.imgs.inv_slot_green, - Quality::High => self.imgs.inv_slot_blue, - Quality::Epic => self.imgs.inv_slot_purple, - Quality::Legendary => self.imgs.inv_slot_gold, - Quality::Artifact => self.imgs.inv_slot_orange, - _ => self.imgs.inv_slot_red, - }; - let frame = Image::new(quality_col_img).w_h(25.0, 25.0); - let frame = if *amount == 0 { - frame.down_from(state.ids.req_text[i], 10.0 + frame_offset) - } else { - frame.down_from(frame_pos, 10.0 + frame_offset) - }; - frame.set(state.ids.ingredient_frame[i], ui); - // Item button for auto search - if Button::image(self.imgs.wpn_icon_border) - .w_h(22.0, 22.0) - .middle_of(state.ids.ingredient_frame[i]) - .hover_image(self.imgs.wpn_icon_border_mo) - .with_item_tooltip( - self.item_tooltip_manager, - core::iter::once(&*item_def as &dyn ItemDesc), - &None, - &item_tooltip, - ) - .set(state.ids.ingredient_btn[i], ui) - .was_clicked() - { - events.push(Event::ChangeCraftingTab(CraftingTab::All)); - events.push(Event::SearchRecipe(Some(item_def.name().to_string()))); - } - // Item image - Image::new(animate_by_pulse( - &self.item_imgs.img_ids_or_not_found_img((&*item_def).into()), - self.pulse, - )) - .middle_of(state.ids.ingredient_btn[i]) - .w_h(20.0, 20.0) - .graphics_for(state.ids.ingredient_btn[i]) + frame.set(state.ids.ingredient_frame[i], ui); + // Item button for auto search + if Button::image(self.imgs.wpn_icon_border) + .w_h(22.0, 22.0) + .middle_of(state.ids.ingredient_frame[i]) + .hover_image(self.imgs.wpn_icon_border_mo) .with_item_tooltip( self.item_tooltip_manager, core::iter::once(&*item_def as &dyn ItemDesc), &None, &item_tooltip, ) - .set(state.ids.ingredient_img[i], ui); - - // Ingredients text and amount - // Don't show inventory amounts above 999 to avoid the widget clipping - let over9k = "99+"; - let in_inv: &str = &item_count_in_inventory.to_string(); - // Show Ingredients - // Align "Required" Text below last ingredient - if *amount == 0 { - // Catalysts/Tools - Text::new(self.localized_strings.get("hud.crafting.tool_cata")) - .down_from(state.ids.ingredient_frame[i - 1], 20.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(14)) - .color(TEXT_COLOR) - .set(state.ids.req_text[i], ui); - Text::new(&item_def.name()) - .right_from(state.ids.ingredient_frame[i], 10.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(14)) - .color(col) - .set(state.ids.ingredients[i], ui); - } else { - // Ingredients - let name = match recipe_input { - RecipeInput::Item(_) => item_def.name().to_string(), - RecipeInput::Tag(tag) | RecipeInput::TagSameItem(tag) => { - format!("Any {} item", tag.name()) - }, - RecipeInput::ListSameItem(item_defs) => { - format!( - "Any of {}", - item_defs.iter().map(|def| def.name()).collect::() - ) - }, - }; - let input = format!( - "{}x {} ({})", - amount, - name, - if item_count_in_inventory > 99 { - over9k - } else { - in_inv - } - ); - // Ingredient Text - Text::new(&input) - .right_from(state.ids.ingredient_frame[i], 10.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(12)) - .color(col) - .wrap_by_word() - .w(150.0) - .set(state.ids.ingredients[i], ui); - } + .set(state.ids.ingredient_btn[i], ui) + .was_clicked() + { + events.push(Event::ChangeCraftingTab(CraftingTab::All)); + events.push(Event::SearchRecipe(Some(item_def.name().to_string()))); } - }, + // Item image + Image::new(animate_by_pulse( + &self.item_imgs.img_ids_or_not_found_img((&*item_def).into()), + self.pulse, + )) + .middle_of(state.ids.ingredient_btn[i]) + .w_h(20.0, 20.0) + .graphics_for(state.ids.ingredient_btn[i]) + .with_item_tooltip( + self.item_tooltip_manager, + core::iter::once(&*item_def as &dyn ItemDesc), + &None, + &item_tooltip, + ) + .set(state.ids.ingredient_img[i], ui); + + // Ingredients text and amount + // Don't show inventory amounts above 999 to avoid the widget clipping + let over9k = "99+"; + let in_inv: &str = &item_count_in_inventory.to_string(); + // Show Ingredients + // Align "Required" Text below last ingredient + if *amount == 0 { + // Catalysts/Tools + Text::new(self.localized_strings.get("hud.crafting.tool_cata")) + .down_from(state.ids.ingredient_frame[i - 1], 20.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(14)) + .color(TEXT_COLOR) + .set(state.ids.req_text[i], ui); + Text::new(&item_def.name()) + .right_from(state.ids.ingredient_frame[i], 10.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(14)) + .color(col) + .set(state.ids.ingredients[i], ui); + } else { + // Ingredients + let name = match recipe_input { + RecipeInput::Item(_) => item_def.name().to_string(), + RecipeInput::Tag(tag) | RecipeInput::TagSameItem(tag) => { + format!("Any {} item", tag.name()) + }, + RecipeInput::ListSameItem(item_defs) => { + format!( + "Any of {}", + item_defs.iter().map(|def| def.name()).collect::() + ) + }, + }; + let input = format!( + "{}x {} ({})", + amount, + name, + if item_count_in_inventory > 99 { + over9k + } else { + in_inv + } + ); + // Ingredient Text + Text::new(&input) + .right_from(state.ids.ingredient_frame[i], 10.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(12)) + .color(col) + .wrap_by_word() + .w(150.0) + .set(state.ids.ingredients[i], ui); + } + } } } else if *sel_crafting_tab == CraftingTab::Dismantle { // Title diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 4e58e01fae..120000cbdb 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -538,6 +538,12 @@ pub enum Event { secondary_slot: InvSlotId, craft_sprite: Option<(Vec3, SpriteKind)>, }, + CraftModularWeaponComponent { + toolkind: ToolKind, + material: InvSlotId, + modifier: Option, + craft_sprite: Option<(Vec3, SpriteKind)>, + }, InviteMember(Uid), AcceptInvite, DeclineInvite, @@ -2959,6 +2965,18 @@ impl Hud { craft_sprite: self.show.crafting_fields.craft_sprite, }); }, + crafting::Event::CraftModularWeaponComponent { + toolkind, + material, + modifier, + } => { + events.push(Event::CraftModularWeaponComponent { + toolkind, + material, + modifier, + craft_sprite: self.show.crafting_fields.craft_sprite, + }); + }, crafting::Event::Close => { self.show.stats = false; self.show.crafting(false); @@ -2978,6 +2996,9 @@ impl Hud { crafting::Event::SearchRecipe(search_key) => { self.show.search_crafting_recipe(search_key); }, + crafting::Event::ClearRecipeInputs => { + self.show.crafting_fields.recipe_inputs.clear(); + }, } } } diff --git a/voxygen/src/hud/slots.rs b/voxygen/src/hud/slots.rs index bffdc49b5c..7267ec87b3 100644 --- a/voxygen/src/hud/slots.rs +++ b/voxygen/src/hud/slots.rs @@ -240,13 +240,11 @@ pub struct CraftSlot { pub index: u32, pub invslot: Option, pub requirement: fn(Option<&Inventory>, InvSlotId) -> bool, - pub required_amount: u32, } impl PartialEq for CraftSlot { fn eq(&self, other: &Self) -> bool { - (self.index, self.invslot, self.required_amount) - == (other.index, other.invslot, other.required_amount) + (self.index, self.invslot) == (other.index, other.invslot) } } @@ -266,7 +264,7 @@ impl SlotKey for CraftSlot { fn amount(&self, source: &Inventory) -> Option { self.invslot .and_then(|invslot| source.get(invslot)) - .map(|item| self.required_amount.min(item.amount())) + .map(|item| item.amount()) .filter(|amount| *amount > 1) } diff --git a/voxygen/src/session/mod.rs b/voxygen/src/session/mod.rs index 41c1055a38..145b236a34 100644 --- a/voxygen/src/session/mod.rs +++ b/voxygen/src/session/mod.rs @@ -25,6 +25,7 @@ use common::{ link::Is, mounting::Mount, outcome::Outcome, + recipe, terrain::{Block, BlockKind}, trade::TradeResult, util::{Dir, Plane}, @@ -1431,6 +1432,48 @@ impl PlayState for SessionState { craft_sprite.map(|(pos, _sprite)| pos), ); }, + HudEvent::CraftModularWeaponComponent { + toolkind, + material, + modifier, + craft_sprite, + } => { + let additional_slots = { + let client = self.client.borrow(); + let item_id = |slot| { + client + .inventories() + .get(client.entity()) + .and_then(|inv| inv.get(slot)) + .map(|item| String::from(item.item_definition_id())) + }; + if let Some(material_id) = item_id(material) { + let key = recipe::ComponentKey { + toolkind, + material: material_id, + modifier: modifier.and_then(item_id), + }; + if let Some(recipe) = client.component_recipe_book().get(&key) { + client.inventories().get(client.entity()).and_then(|inv| { + recipe.inventory_contains_additional_ingredients(inv).ok() + }) + } else { + None + } + } else { + None + } + }; + if let Some(additional_slots) = additional_slots { + self.client.borrow_mut().craft_modular_weapon_component( + toolkind, + material, + modifier, + additional_slots, + craft_sprite.map(|(pos, _sprite)| pos), + ); + } + }, HudEvent::SalvageItem { slot, salvage_pos } => { self.client.borrow_mut().salvage_item(slot, salvage_pos); },