Pumpkin/crates/pumpkin-protocol/src/java/client/play/set_container_slot.rs
2026-08-21 16:24:22 +02:00

54 lines
1.3 KiB
Rust

use std::io::Write;
use crate::VarInt;
use crate::codec::item_stack_seralizer::ItemStackSerializer;
use crate::{ClientPacket, WritingError, ser::NetworkWriteExt};
use pumpkin_data::packet::clientbound::play::CONTAINER_SET_SLOT;
use pumpkin_macros::java_packet;
use pumpkin_util::version::JavaMinecraftVersion;
#[java_packet(CONTAINER_SET_SLOT)]
pub struct CSetContainerSlot<'a> {
pub window_id: i8,
pub state_id: VarInt,
pub slot: i16,
pub slot_data: &'a ItemStackSerializer<'a>,
}
impl<'a> CSetContainerSlot<'a> {
#[must_use]
pub fn new(
window_id: i8,
state_id: i32,
slot: i16,
slot_data: &'a ItemStackSerializer<'a>,
) -> Self {
Self {
window_id,
state_id: state_id.into(),
slot,
slot_data,
}
}
}
impl ClientPacket for CSetContainerSlot<'_> {
fn write_packet_data(
&self,
write: impl Write,
version: &JavaMinecraftVersion,
) -> Result<(), WritingError> {
let mut write = write;
write.write_container_id(&VarInt(i32::from(self.window_id)), version)?;
if *version >= JavaMinecraftVersion::V_1_17_1 {
write.write_var_int(&self.state_id)?;
}
write.write_i16_be(self.slot)?;
self.slot_data.write_with_version(&mut write, version)?;
Ok(())
}
}