package net.minecraft.network.protocol.game; import java.util.BitSet; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.PacketType; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.lighting.LevelLightEngine; import org.jetbrains.annotations.Nullable; public class ClientboundLevelChunkWithLightPacket implements Packet { public static final StreamCodec STREAM_CODEC = Packet.codec( ClientboundLevelChunkWithLightPacket::write, ClientboundLevelChunkWithLightPacket::new ); private final int x; private final int z; private final ClientboundLevelChunkPacketData chunkData; private final ClientboundLightUpdatePacketData lightData; public ClientboundLevelChunkWithLightPacket(LevelChunk chunk, LevelLightEngine lightEngine, @Nullable BitSet skyLight, @Nullable BitSet blockLight) { ChunkPos chunkPos = chunk.getPos(); this.x = chunkPos.x; this.z = chunkPos.z; this.chunkData = new ClientboundLevelChunkPacketData(chunk); this.lightData = new ClientboundLightUpdatePacketData(chunkPos, lightEngine, skyLight, blockLight); } private ClientboundLevelChunkWithLightPacket(RegistryFriendlyByteBuf buffer) { this.x = buffer.readInt(); this.z = buffer.readInt(); this.chunkData = new ClientboundLevelChunkPacketData(buffer, this.x, this.z); this.lightData = new ClientboundLightUpdatePacketData(buffer, this.x, this.z); } private void write(RegistryFriendlyByteBuf buffer) { buffer.writeInt(this.x); buffer.writeInt(this.z); this.chunkData.write(buffer); this.lightData.write(buffer); } @Override public PacketType type() { return GamePacketTypes.CLIENTBOUND_LEVEL_CHUNK_WITH_LIGHT; } /** * Passes this Packet on to the PacketListener for processing. */ public void handle(ClientGamePacketListener handler) { handler.handleLevelChunkWithLight(this); } public int getX() { return this.x; } public int getZ() { return this.z; } public ClientboundLevelChunkPacketData getChunkData() { return this.chunkData; } public ClientboundLightUpdatePacketData getLightData() { return this.lightData; } }