Skip to main content

steel_protocol/packets/game/chunk/
data.rs

1use steel_macros::{ClientPacket, WriteTo};
2use steel_registry::packets::play::C_LEVEL_CHUNK_WITH_LIGHT;
3use steel_utils::serial::OptionalNbt;
4use steel_utils::{PackedChunkLocalXZ, codec::BitSet};
5
6#[derive(WriteTo, Copy, Clone, Debug)]
7#[write(as = VarInt)]
8pub enum HeightmapType {
9    WorldSurface = 1,
10    MotionBlocking = 4,
11    MotionBlockingNoLeaves = 5,
12}
13
14#[derive(Debug, Clone, WriteTo)]
15pub struct Heightmaps {
16    pub heightmaps: Vec<(HeightmapType, Vec<i64>)>,
17}
18
19#[derive(Debug, Clone, WriteTo)]
20pub struct BlockEntityInfo {
21    pub packed_xz: PackedChunkLocalXZ,
22    pub y: i16,
23    #[write(as = VarInt)]
24    pub type_id: i32,
25    pub data: OptionalNbt,
26}
27
28#[derive(Debug, Clone, WriteTo)]
29pub struct ChunkPacketData {
30    pub heightmaps: Heightmaps,
31    #[write(as = Prefixed(VarInt), bound = 2097152)]
32    pub data: Vec<u8>,
33    pub block_entities: Vec<BlockEntityInfo>,
34}
35
36#[derive(Debug, Clone, WriteTo)]
37pub struct LightUpdatePacketData {
38    pub sky_y_mask: BitSet,
39    pub block_y_mask: BitSet,
40    pub empty_sky_y_mask: BitSet,
41    pub empty_block_y_mask: BitSet,
42    pub sky_updates: Vec<Vec<u8>>,
43    pub block_updates: Vec<Vec<u8>>,
44}
45
46#[derive(ClientPacket, Debug, Clone, WriteTo)]
47#[packet_id(Play = C_LEVEL_CHUNK_WITH_LIGHT)]
48pub struct CLevelChunkWithLight {
49    pub x: i32,
50    pub z: i32,
51    pub chunk_data: ChunkPacketData,
52    pub light_data: LightUpdatePacketData,
53}