mirror of
https://github.com/italicsjenga/valence.git
synced 2024-12-23 14:31:30 +11:00
change Slot
enum into alias of Option<ItemStack>
(#107)
This commit is contained in:
parent
82323eaa12
commit
0652fa13a4
|
@ -302,7 +302,7 @@ impl<C: Config> Client<C> {
|
|||
.with_created_this_tick(true),
|
||||
player_data: Player::new(),
|
||||
entity_events: Vec::new(),
|
||||
cursor_held_item: Slot::Empty,
|
||||
cursor_held_item: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -785,12 +785,10 @@ impl<C: Config> Client<C> {
|
|||
C2sPlayPacket::ClickContainer(p) => {
|
||||
if p.slot_idx == -999 {
|
||||
// client is trying to drop the currently held stack
|
||||
let held = std::mem::replace(&mut self.cursor_held_item, Slot::Empty);
|
||||
let held = std::mem::replace(&mut self.cursor_held_item, None);
|
||||
match held {
|
||||
Slot::Empty => {}
|
||||
Slot::Present(stack) => {
|
||||
self.events.push_back(ClientEvent::DropItemStack { stack })
|
||||
}
|
||||
None => {}
|
||||
Some(stack) => self.events.push_back(ClientEvent::DropItemStack { stack }),
|
||||
}
|
||||
} else {
|
||||
self.cursor_held_item = p.carried_item.clone();
|
||||
|
@ -971,12 +969,10 @@ impl<C: Config> Client<C> {
|
|||
if e.slot == -1 {
|
||||
// The client is trying to drop a stack of items
|
||||
match e.clicked_item {
|
||||
Slot::Empty => log::warn!(
|
||||
None => log::warn!(
|
||||
"Invalid packet, creative client tried to drop a stack of nothing."
|
||||
),
|
||||
Slot::Present(stack) => {
|
||||
self.events.push_back(ClientEvent::DropItemStack { stack })
|
||||
}
|
||||
Some(stack) => self.events.push_back(ClientEvent::DropItemStack { stack }),
|
||||
}
|
||||
} else {
|
||||
self.events.push_back(ClientEvent::SetSlotCreative {
|
||||
|
|
|
@ -9,18 +9,13 @@ use crate::protocol::{Decode, Encode};
|
|||
pub type SlotId = i16;
|
||||
|
||||
/// Represents a slot in an inventory.
|
||||
#[derive(Clone, Default, Debug)]
|
||||
pub enum Slot {
|
||||
#[default]
|
||||
Empty,
|
||||
Present(ItemStack),
|
||||
}
|
||||
pub type Slot = Option<ItemStack>;
|
||||
|
||||
impl Encode for Slot {
|
||||
fn encode(&self, w: &mut impl Write) -> anyhow::Result<()> {
|
||||
match self {
|
||||
Slot::Empty => false.encode(w),
|
||||
Slot::Present(s) => {
|
||||
None => false.encode(w),
|
||||
Some(s) => {
|
||||
true.encode(w)?;
|
||||
s.item.encode(w)?;
|
||||
s.item_count.encode(w)?;
|
||||
|
@ -37,9 +32,9 @@ impl Decode for Slot {
|
|||
fn decode(r: &mut &[u8]) -> anyhow::Result<Self> {
|
||||
let present = bool::decode(r)?;
|
||||
if !present {
|
||||
return Ok(Slot::Empty);
|
||||
return Ok(None);
|
||||
}
|
||||
Ok(Slot::Present(ItemStack {
|
||||
Ok(Some(ItemStack {
|
||||
item: ItemKind::decode(r)?,
|
||||
item_count: u8::decode(r)?,
|
||||
nbt: if r.first() == Some(&0) {
|
||||
|
@ -51,23 +46,3 @@ impl Decode for Slot {
|
|||
}))
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Option<ItemStack>> for Slot {
|
||||
fn from(s: Option<ItemStack>) -> Self {
|
||||
if let Some(s) = s {
|
||||
Slot::Present(s)
|
||||
} else {
|
||||
Slot::Empty
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Slot> for Option<ItemStack> {
|
||||
fn from(s: Slot) -> Self {
|
||||
if let Slot::Present(s) = s {
|
||||
Some(s)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue