1use azalea_buf::AzBuf;
2use azalea_inventory::ItemStack;
3use azalea_registry::{HolderSet, builtin::ItemKind, identifier::Identifier};
4
5#[derive(Clone, Debug, AzBuf, PartialEq)]
7pub enum RecipeDisplayData {
8 Shapeless(ShapelessCraftingRecipeDisplay),
9 Shaped(ShapedCraftingRecipeDisplay),
10 Furnace(FurnaceRecipeDisplay),
11 Stonecutter(StonecutterRecipeDisplay),
12 Smithing(SmithingRecipeDisplay),
13}
14
15#[derive(Clone, Debug, AzBuf, PartialEq)]
16pub struct ShapelessCraftingRecipeDisplay {
17 pub ingredients: Vec<SlotDisplayData>,
18 pub result: SlotDisplayData,
19 pub crafting_station: SlotDisplayData,
20}
21#[derive(Clone, Debug, AzBuf, PartialEq)]
22pub struct ShapedCraftingRecipeDisplay {
23 #[var]
24 pub width: u32,
25 #[var]
26 pub height: u32,
27 pub ingredients: Vec<SlotDisplayData>,
28 pub result: SlotDisplayData,
29 pub crafting_station: SlotDisplayData,
30}
31#[derive(Clone, Debug, AzBuf, PartialEq)]
32pub struct FurnaceRecipeDisplay {
33 pub ingredient: SlotDisplayData,
34 pub fuel: SlotDisplayData,
35 pub result: SlotDisplayData,
36 pub crafting_station: SlotDisplayData,
37 #[var]
38 pub duration: u32,
39 pub experience: f32,
40}
41#[derive(Clone, Debug, AzBuf, PartialEq)]
42pub struct StonecutterRecipeDisplay {
43 pub input: SlotDisplayData,
44 pub result: SlotDisplayData,
45 pub crafting_station: SlotDisplayData,
46}
47#[derive(Clone, Debug, AzBuf, PartialEq)]
48pub struct SmithingRecipeDisplay {
49 pub template: SlotDisplayData,
50 pub base: SlotDisplayData,
51 pub addition: SlotDisplayData,
52 pub result: SlotDisplayData,
53 pub crafting_station: SlotDisplayData,
54}
55
56#[derive(Clone, Debug, PartialEq, AzBuf)]
57pub struct Ingredient {
58 pub allowed: HolderSet<ItemKind, Identifier>,
59}
60
61#[derive(Clone, Debug, PartialEq, AzBuf)]
63pub enum SlotDisplayData {
64 Empty,
65 AnyFuel,
66 ItemKind(ItemStackDisplay),
67 ItemStack(ItemStackSlotDisplay),
68 Tag(Identifier),
69 SmithingTrim(Box<SmithingTrimDemoSlotDisplay>),
70 WithRemainder(Box<WithRemainderSlotDisplay>),
71 Composite(CompositeSlotDisplay),
72}
73
74#[derive(Clone, Debug, PartialEq, AzBuf)]
75pub struct ItemStackDisplay {
76 pub item: ItemKind,
77}
78#[derive(Clone, Debug, PartialEq, AzBuf)]
79pub struct ItemStackSlotDisplay {
80 pub stack: ItemStack,
81}
82#[derive(Clone, Debug, PartialEq, AzBuf)]
83pub struct TagSlotDisplay {
84 pub tag: ItemKind,
85}
86#[derive(Clone, Debug, PartialEq, AzBuf)]
87pub struct SmithingTrimDemoSlotDisplay {
88 pub base: SlotDisplayData,
89 pub material: SlotDisplayData,
90 pub pattern: SlotDisplayData,
91}
92#[derive(Clone, Debug, PartialEq, AzBuf)]
93pub struct WithRemainderSlotDisplay {
94 pub input: SlotDisplayData,
95 pub remainder: SlotDisplayData,
96}
97#[derive(Clone, Debug, PartialEq, AzBuf)]
98pub struct CompositeSlotDisplay {
99 pub contents: Vec<SlotDisplayData>,
100}