mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
54 lines
1.5 KiB
Rust
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)
|
|
}
|
|
}
|