steel_protocol/packets/game/chunk/
data.rs1use 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}