valence_protocol/packets/play/
chunk_delta_update_s2c.rs
1use std::borrow::Cow;
2use std::io::Write;
3
4use bitfield_struct::bitfield;
5
6use crate::chunk_section_pos::ChunkSectionPos;
7use crate::{Decode, Encode, Packet, VarLong};
8
9#[derive(Clone, Debug, Encode, Decode, Packet)]
10pub struct ChunkDeltaUpdateS2c<'a> {
11 pub chunk_sect_pos: ChunkSectionPos,
12 pub blocks: Cow<'a, [ChunkDeltaUpdateEntry]>,
13}
14
15#[bitfield(u64)]
16#[derive(PartialEq, Eq)]
17pub struct ChunkDeltaUpdateEntry {
18 #[bits(4)]
19 pub off_y: u8,
20 #[bits(4)]
21 pub off_z: u8,
22 #[bits(4)]
23 pub off_x: u8,
24 pub block_state: u32,
25 #[bits(20)]
26 _pad: u32,
27}
28
29impl Encode for ChunkDeltaUpdateEntry {
30 fn encode(&self, w: impl Write) -> anyhow::Result<()> {
31 VarLong(self.0 as i64).encode(w)
32 }
33}
34
35impl Decode<'_> for ChunkDeltaUpdateEntry {
36 fn decode(r: &mut &[u8]) -> anyhow::Result<Self> {
37 Ok(ChunkDeltaUpdateEntry(VarLong::decode(r)?.0 as u64))
38 }
39}