package protocolsupport.protocol.packet.middle.clientbound.play; import io.netty.buffer.ByteBuf; import protocolsupport.protocol.ConnectionImpl; import protocolsupport.protocol.packet.middle.ClientBoundMiddlePacket; import protocolsupport.protocol.serializer.ArraySerializer; import protocolsupport.protocol.serializer.PositionSerializer; import protocolsupport.protocol.serializer.VarNumberSerializer; import protocolsupport.protocol.types.ChunkCoord; import protocolsupport.protocol.types.chunk.ChunkConstants; import protocolsupport.utils.BitUtils; public abstract class MiddleChunkLight extends ClientBoundMiddlePacket { public MiddleChunkLight(ConnectionImpl connection) { super(connection); } protected ChunkCoord coord; protected boolean trustEdges; protected int setSkyLightMask; protected int setBlockLightMask; protected int emptySkyLightMask; protected int emptyBlockLightMask; protected final byte[][] skyLight = new byte[ChunkConstants.SECTION_COUNT_LIGHT][]; protected final byte[][] blockLight = new byte[ChunkConstants.SECTION_COUNT_LIGHT][]; @Override protected void readServerData(ByteBuf serverdata) { coord = PositionSerializer.readVarIntChunkCoord(serverdata); trustEdges = serverdata.readBoolean(); setSkyLightMask = VarNumberSerializer.readVarInt(serverdata); setBlockLightMask = VarNumberSerializer.readVarInt(serverdata); emptySkyLightMask = VarNumberSerializer.readVarInt(serverdata); emptyBlockLightMask = VarNumberSerializer.readVarInt(serverdata); for (int sectionNumber = 0; sectionNumber < ChunkConstants.SECTION_COUNT_LIGHT; sectionNumber++) { skyLight[sectionNumber] = BitUtils.isIBitSet(setSkyLightMask, sectionNumber) ? ArraySerializer.readVarIntByteArray(serverdata) : null; } for (int sectionNumber = 0; sectionNumber < ChunkConstants.SECTION_COUNT_LIGHT; sectionNumber++) { blockLight[sectionNumber] = BitUtils.isIBitSet(setBlockLightMask, sectionNumber) ? ArraySerializer.readVarIntByteArray(serverdata) : null; } } }