88import org .cloudburstmc .nbt .NbtMap ;
99import org .geysermc .mcprotocollib .protocol .codec .MinecraftPacket ;
1010import org .geysermc .mcprotocollib .protocol .codec .MinecraftTypes ;
11+ import org .geysermc .mcprotocollib .protocol .data .game .level .HeightmapTypes ;
1112import org .geysermc .mcprotocollib .protocol .data .game .level .LightUpdateData ;
1213import org .geysermc .mcprotocollib .protocol .data .game .level .block .BlockEntityInfo ;
1314import org .geysermc .mcprotocollib .protocol .data .game .level .block .BlockEntityType ;
1415
16+ import java .util .EnumMap ;
17+ import java .util .Map ;
18+
1519@ Data
1620@ With
1721@ AllArgsConstructor
1822public class ClientboundLevelChunkWithLightPacket implements MinecraftPacket {
1923 private final int x ;
2024 private final int z ;
2125 private final byte @ NonNull [] chunkData ;
22- private final @ NonNull NbtMap heightMaps ;
26+ private final @ NonNull Map < HeightmapTypes , long []> heightMaps ;
2327 private final @ NonNull BlockEntityInfo @ NonNull [] blockEntities ;
2428 private final @ NonNull LightUpdateData lightData ;
2529
2630 public ClientboundLevelChunkWithLightPacket (ByteBuf in ) {
2731 this .x = in .readInt ();
2832 this .z = in .readInt ();
29- this .heightMaps = MinecraftTypes .readCompoundTagOrThrow (in );
33+
34+ this .heightMaps = new EnumMap <>(HeightmapTypes .class );
35+ int length = MinecraftTypes .readVarInt (in );
36+ for (int i = 0 ; i < length ; i ++) {
37+ this .heightMaps .put (HeightmapTypes .from (MinecraftTypes .readVarInt (in )), MinecraftTypes .readLongArray (in ));
38+ }
39+
3040 this .chunkData = MinecraftTypes .readByteArray (in );
3141
3242 this .blockEntities = new BlockEntityInfo [MinecraftTypes .readVarInt (in )];
@@ -47,7 +57,13 @@ public ClientboundLevelChunkWithLightPacket(ByteBuf in) {
4757 public void serialize (ByteBuf out ) {
4858 out .writeInt (this .x );
4959 out .writeInt (this .z );
50- MinecraftTypes .writeAnyTag (out , this .heightMaps );
60+
61+ MinecraftTypes .writeVarInt (out , this .heightMaps .size ());
62+ for (Map .Entry <HeightmapTypes , long []> entry : this .heightMaps .entrySet ()) {
63+ MinecraftTypes .writeVarInt (out , entry .getKey ().ordinal ());
64+ MinecraftTypes .writeLongArray (out , entry .getValue ());
65+ }
66+
5167 MinecraftTypes .writeVarInt (out , this .chunkData .length );
5268 out .writeBytes (this .chunkData );
5369
0 commit comments