1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use crate::internal_prelude::*;

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct Recipe {
    pub group: Option<String>,

    #[serde(flatten)]
    pub variant: RecipeVariant,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct CookingRecipeCommon {
    pub ingredient: NamespacedId,
    pub result: NamespacedId,
    pub experience: f64,
    #[serde(rename = "cookingtime")]
    pub cooking_time: Option<i32>,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct CraftingShapedRecipe {
    pub pattern: (String, String, String),
    pub ingredients: Vec<NamespacedId>,
    pub key: HashMap<char, NamespacedId>,
    pub result: RecipeResultWithCount,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct CraftingShapelessRecipe {
    pub ingredients: Vec<NamespacedId>,
    pub result: RecipeResultWithCount,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct RecipeResultWithCount {
    pub count: Option<i32>,
    pub item: NamespacedId,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct SmithingRecipe {
    pub base: NamespacedId,
    pub addition: NamespacedId,
    pub result: NamespacedId,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct StonecuttingRecipe {
    pub ingredient: NamespacedId,
    pub result: NamespacedId,
    pub count: i32,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(tag = "type")]
pub enum RecipeVariant {
    #[serde(rename = "blasting")]
    Blasting(CookingRecipeCommon),
    #[serde(rename = "campfire_cooking")]
    CampfireCooking(CookingRecipeCommon),
    #[serde(rename = "crafting_shaped")]
    CraftingShaped(CraftingShapedRecipe),
    #[serde(rename = "crafting_shapeless")]
    CraftingShapeless(CraftingShapelessRecipe),
    #[serde(rename = "smelting")]
    Smelting(CookingRecipeCommon),
    #[serde(rename = "smithing")]
    Smithing(SmithingRecipe),
    #[serde(rename = "smoking")]
    Smoking(CookingRecipeCommon),
    #[serde(rename = "stonecutting")]
    Stonecutting(StonecuttingRecipe),
    #[serde(rename = "crafting_special_armordye")]
    CraftingSpecialArmorDye,
    #[serde(rename = "crafting_special_bannerduplicate")]
    CraftingSpecialBannerDuplicate,
    #[serde(rename = "crafting_special_bookcloning")]
    CraftingSpecialBookCloning,
    #[serde(rename = "crafting_special_firework_rocket")]
    CraftingSpecialFireworkRocket,
    #[serde(rename = "crafting_special_firework_star")]
    CraftingSpecialFireworkStar,
    #[serde(rename = "crafting_special_firework_star_fade")]
    CraftingSpecialFireworkStarFade,
    #[serde(rename = "crafting_special_mapcloning")]
    CraftingSpecialMapCloning,
    #[serde(rename = "crafting_special_mapextending")]
    CraftingSpecialMapExtending,
    #[serde(rename = "crafting_special_repairitem")]
    CraftingSpecialRepairItem,
    #[serde(rename = "crafting_special_shielddecoration")]
    CraftingSpecialShieldDecoration,
    #[serde(rename = "crafting_special_shulkerboxcoloring")]
    CraftingSpecialShulkerBoxColoring,
    #[serde(rename = "crafting_special_tippedarrow")]
    CraftingSpecialTippedArrow,
    #[serde(rename = "crafting_special_suspiciousstew")]
    CraftingSpecialSuspiciousStew,
}