Files
Pumpkin/pumpkin-protocol/src/java/client/play/block_entity_data.rs
Alexander Medvedev 4afe60aca9 chore: i'm back
2026-02-21 20:52:37 +01:00

54 lines
1.5 KiB
Rust

use std::io::Write;
use pumpkin_data::packet::clientbound::PLAY_BLOCK_ENTITY_DATA;
use pumpkin_macros::java_packet;
use pumpkin_util::{math::position::BlockPos, version::MinecraftVersion};
use crate::{
ClientPacket, VarInt,
ser::{NetworkWriteExt, WritingError},
};
/// Updates the NBT data of a block entity (e.g., signs, chests, or banners).
///
/// This packet is sent by the server when a block entity's state changes
/// (like text on a sign) or when the block entity is loaded into the client's view.
#[java_packet(PLAY_BLOCK_ENTITY_DATA)]
pub struct CBlockEntityData {
/// The world coordinates of the block entity.
pub location: BlockPos,
/// The type of block entity being updated (e.g., Mob Spawner, Command Block).
pub r#type: VarInt,
/// The raw NBT payload containing the block's specific data.
pub nbt_data: Box<[u8]>,
}
impl CBlockEntityData {
#[must_use]
pub const fn new(location: BlockPos, r#type: VarInt, nbt_data: Box<[u8]>) -> Self {
Self {
location,
r#type,
nbt_data,
}
}
}
impl ClientPacket for CBlockEntityData {
fn write_packet_data(
&self,
write: impl Write,
_version: &MinecraftVersion,
) -> Result<(), WritingError> {
let mut write = write;
write.write_block_pos(&self.location)?;
write.write_var_int(&self.r#type)?;
write
.write_all(&self.nbt_data)
.map_err(WritingError::IoError)
}
}