Skip to main content

azalea_protocol/common/
recipe.rs

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/// [`azalea_registry::builtin::RecipeDisplay`]
11#[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/// [`azalea_registry::builtin::SlotDisplay`]
67#[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}