use basalt_derive::{Decode, Encode, EncodedSize};
use basalt_types::{Slot, Vec3f64};
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum RecipeDisplay {
#[variant(id = 0)]
CraftingShapeless {
#[field(length = "varint")]
ingredients: Vec<crate::packets::play::types::SlotDisplay>,
result: crate::packets::play::types::SlotDisplay,
crafting_station: crate::packets::play::types::SlotDisplay,
},
#[variant(id = 1)]
CraftingShaped {
#[field(varint)]
width: i32,
#[field(varint)]
height: i32,
#[field(length = "varint")]
ingredients: Vec<crate::packets::play::types::SlotDisplay>,
result: crate::packets::play::types::SlotDisplay,
crafting_station: crate::packets::play::types::SlotDisplay,
},
#[variant(id = 2)]
Furnace {
ingredient: crate::packets::play::types::SlotDisplay,
fuel: crate::packets::play::types::SlotDisplay,
result: crate::packets::play::types::SlotDisplay,
crafting_station: crate::packets::play::types::SlotDisplay,
#[field(varint)]
duration: i32,
experience: f32,
},
#[variant(id = 3)]
Stonecutter {
ingredient: crate::packets::play::types::SlotDisplay,
result: crate::packets::play::types::SlotDisplay,
crafting_station: crate::packets::play::types::SlotDisplay,
},
#[variant(id = 4)]
Smithing {
template: crate::packets::play::types::SlotDisplay,
base: crate::packets::play::types::SlotDisplay,
addition: crate::packets::play::types::SlotDisplay,
result: crate::packets::play::types::SlotDisplay,
crafting_station: crate::packets::play::types::SlotDisplay,
},
}
impl Default for RecipeDisplay {
fn default() -> Self {
Self::CraftingShapeless {
ingredients: Default::default(),
result: Default::default(),
crafting_station: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub enum SlotDisplay {
#[variant(id = 0)]
#[default]
Empty,
#[variant(id = 1)]
AnyFuel,
#[variant(id = 2)]
Item {
#[field(varint)]
data: i32,
},
#[variant(id = 3)]
ItemStack { data: Slot },
#[variant(id = 4)]
Tag { data: String },
#[variant(id = 5)]
SmithingTrim {
base: Box<SlotDisplay>,
material: Box<SlotDisplay>,
pattern: Box<SlotDisplay>,
},
#[variant(id = 6)]
WithRemainder {
input: Box<SlotDisplay>,
remainder: Box<SlotDisplay>,
},
#[variant(id = 7)]
Composite {
#[field(length = "varint")]
data: Vec<SlotDisplay>,
},
}
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum Particle {
#[variant(id = 1)]
Block {
#[field(varint)]
data: i32,
},
#[variant(id = 2)]
BlockMarker {
#[field(varint)]
data: i32,
},
#[variant(id = 13)]
Dust {
red: f32,
green: f32,
blue: f32,
scale: f32,
},
#[variant(id = 14)]
DustColorTransition {
from_red: f32,
from_green: f32,
from_blue: f32,
scale: f32,
to_red: f32,
to_green: f32,
to_blue: f32,
},
#[variant(id = 20)]
EntityEffect { data: i32 },
#[variant(id = 28)]
FallingDust {
#[field(varint)]
data: i32,
},
#[variant(id = 36)]
SculkCharge { data: f32 },
#[variant(id = 45)]
Item { data: Slot },
#[variant(id = 46)]
Vibration {
#[field(varint)]
position_type: i32,
position: Vec<u8>,
#[field(varint)]
ticks: i32,
},
#[variant(id = 47)]
Trail { target: Vec3f64, color: u8 },
#[variant(id = 101)]
Shriek {
#[field(varint)]
data: i32,
},
#[variant(id = 107)]
DustPillar {
#[field(varint)]
data: i32,
},
#[variant(id = 111)]
BlockCrumble {
#[field(varint)]
data: i32,
},
}
impl Default for Particle {
fn default() -> Self {
Self::Block {
data: Default::default(),
}
}
}