azalea_protocol/common/
recipe.rs

1use azalea_buf::AzBuf;
2use azalea_inventory::ItemStack;
3use azalea_registry::{HolderSet, builtin::ItemKind, identifier::Identifier};
4
5/// [`azalea_registry::RecipeDisplay`]
6#[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/// [`azalea_registry::SlotDisplay`]
62#[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}