pumpkinplus/modules/recipes/diamond_recycle.rs
1//! Diamond armor/tool recycling recipes.
2//!
3//! Provides blast-furnace recipes that recycle damaged or unwanted diamond
4//! gear back into raw diamonds.
5//!
6//! ## Recipe
7//!
8//! | Input | Output | XP | Time (ticks) |
9//! |-------|--------|----|--------------|
10//! | Any diamond tool or armor (see list) | 1× Diamond | 1.0 | 100 |
11//!
12//! ## Supported Inputs
13//!
14//! `diamond_axe`, `diamond_boots`, `diamond_chestplate`, `diamond_helmet`,
15//! `diamond_hoe`, `diamond_horse_armor`, `diamond_leggings`,
16//! `diamond_nautilus_armor`, `diamond_pickaxe`, `diamond_shovel`,
17//! `diamond_spear`, `diamond_sword`
18
19use crate::modules::recipes::recipe::{CookingKind, CookingRecipe, Ingredient, ItemStack, Recipe};
20
21/// Handles diamond gear recycling via blast furnace.
22#[derive(Default)]
23pub struct DiamondRecycle;
24
25impl Recipe for DiamondRecycle {
26 fn cooking(&self) -> Vec<CookingRecipe> {
27 let inputs: Vec<&str> = vec![
28 "minecraft:diamond_axe",
29 "minecraft:diamond_boots",
30 "minecraft:diamond_chestplate",
31 "minecraft:diamond_helmet",
32 "minecraft:diamond_hoe",
33 "minecraft:diamond_horse_armor",
34 "minecraft:diamond_leggings",
35 "minecraft:diamond_nautilus_armor",
36 "minecraft:diamond_pickaxe",
37 "minecraft:diamond_shovel",
38 "minecraft:diamond_spear",
39 "minecraft:diamond_sword",
40 ];
41
42 inputs
43 .into_iter()
44 .map(|id| CookingRecipe {
45 id: format!(
46 "pumpkinplus:diamond_recycle_{}",
47 id.rsplit_once(':').map(|(_, s)| s).unwrap_or(id)
48 ),
49 ingredient: Ingredient::Item { id: id.into() },
50 result: ItemStack {
51 id: "minecraft:diamond".into(),
52 count: 1,
53 },
54 cook_time: 100,
55 experience: 1.0,
56 kind: CookingKind::Blasting,
57 })
58 .collect()
59 }
60}