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}