Skip to main content

pumpkinplus/modules/recipes/
wood_log.rs

1//! Wood block to log conversion recipes.
2//!
3//! Provides shapeless crafting recipes that convert wood/hyphae blocks
4//! back into 4 logs/stems. Covers all vanilla wood types including stripped
5//! variants.
6//!
7//! ## Recipe
8//!
9//! | Input (1×)            | Output (4×)          |
10//! |-----------------------|----------------------|
11//! | `oak_wood`            | `oak_log`            |
12//! | `spruce_wood`         | `spruce_log`         |
13//! | `birch_wood`          | `birch_log`          |
14//! | `jungle_wood`         | `jungle_log`         |
15//! | `acacia_wood`         | `acacia_log`         |
16//! | `dark_oak_wood`       | `dark_oak_log`       |
17//! | `mangrove_wood`       | `mangrove_log`       |
18//! | `cherry_wood`         | `cherry_log`         |
19//! | `pale_oak_wood`       | `pale_oak_log`       |
20//! | `crimson_hyphae`      | `crimson_stem`       |
21//! | `warped_hyphae`       | `warped_stem`        |
22//! | `stripped_oak_wood`   | `stripped_oak_log`   |
23//! | `stripped_spruce_wood`| `stripped_spruce_log`|
24//! | ... (all stripped)    | ...                  |
25
26use crate::modules::recipes::recipe::{Ingredient, ItemStack, Recipe, ShapelessRecipe};
27
28/// Handles wood-to-log shapeless conversion recipes.
29#[derive(Default)]
30pub struct WoodLog;
31
32impl Recipe for WoodLog {
33    fn shapeless(&self) -> Vec<ShapelessRecipe> {
34        let pairs: Vec<(&str, &str)> = vec![
35            // Regular
36            ("minecraft:oak_wood", "minecraft:oak_log"),
37            ("minecraft:spruce_wood", "minecraft:spruce_log"),
38            ("minecraft:birch_wood", "minecraft:birch_log"),
39            ("minecraft:jungle_wood", "minecraft:jungle_log"),
40            ("minecraft:acacia_wood", "minecraft:acacia_log"),
41            ("minecraft:dark_oak_wood", "minecraft:dark_oak_log"),
42            ("minecraft:mangrove_wood", "minecraft:mangrove_log"),
43            ("minecraft:cherry_wood", "minecraft:cherry_log"),
44            ("minecraft:pale_oak_wood", "minecraft:pale_oak_log"),
45            ("minecraft:crimson_hyphae", "minecraft:crimson_stem"),
46            ("minecraft:warped_hyphae", "minecraft:warped_stem"),
47            // Stripped
48            ("minecraft:stripped_oak_wood", "minecraft:stripped_oak_log"),
49            (
50                "minecraft:stripped_spruce_wood",
51                "minecraft:stripped_spruce_log",
52            ),
53            (
54                "minecraft:stripped_birch_wood",
55                "minecraft:stripped_birch_log",
56            ),
57            (
58                "minecraft:stripped_jungle_wood",
59                "minecraft:stripped_jungle_log",
60            ),
61            (
62                "minecraft:stripped_acacia_wood",
63                "minecraft:stripped_acacia_log",
64            ),
65            (
66                "minecraft:stripped_dark_oak_wood",
67                "minecraft:stripped_dark_oak_log",
68            ),
69            (
70                "minecraft:stripped_mangrove_wood",
71                "minecraft:stripped_mangrove_log",
72            ),
73            (
74                "minecraft:stripped_cherry_wood",
75                "minecraft:stripped_cherry_log",
76            ),
77            (
78                "minecraft:stripped_pale_oak_wood",
79                "minecraft:stripped_pale_oak_log",
80            ),
81            (
82                "minecraft:stripped_crimson_hyphae",
83                "minecraft:stripped_crimson_stem",
84            ),
85            (
86                "minecraft:stripped_warped_hyphae",
87                "minecraft:stripped_warped_stem",
88            ),
89        ];
90
91        pairs
92            .into_iter()
93            .map(|(wood, log)| {
94                let name = log.rsplit_once(':').map(|(_, s)| s).unwrap_or(log);
95                ShapelessRecipe {
96                    id: format!("pumpkinplus:{}_from_wood", name),
97                    ingredients: vec![Ingredient::Item { id: wood.into() }],
98                    result: ItemStack {
99                        id: log.into(),
100                        count: 4,
101                    },
102                }
103            })
104            .collect()
105    }
106}