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