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