diff --git a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java index c90651e..86ea7d7 100644 --- a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java +++ b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/ChunkDataPacket.java @@ -8,7 +8,10 @@ import lombok.extern.slf4j.Slf4j; import mc.core.network.NetOutputStream; import mc.core.network.SCPacket; import mc.core.network.proto_1_12_2.ByteArrayOutputNetStream; +import mc.core.utils.NibbleArray; +import mc.core.world.Biome; import mc.core.world.block.Block; +import mc.core.world.block.BlockLocation; import mc.core.world.block.BlockType; import mc.core.world.chunk.Chunk; import mc.core.world.chunk.ChunkSection; @@ -151,7 +154,7 @@ public class ChunkDataPacket implements SCPacket { for (int z = 0; z < 16; z++) { for (int x = 15; x >= 0; x--) { palettedChunkSection.addBlock(chunkSection.getBlockLocal(x, y, z)); - palettedChunkSection.addSkyLight(chunkSection.getSkyLightLocal(x, y, z)); + palettedChunkSection.addSkyLight(15-x, y, z, chunkSection.getSkyLightLocal(15-x, y, z)); if (biomeWrite) { biomes.writeByte(chunkSection.getBiomeLocal(x, z).getId()); @@ -182,15 +185,13 @@ public class ChunkDataPacket implements SCPacket { private int dataItems = 0; private ByteArrayOutputNetStream dataArray = new ByteArrayOutputNetStream(); private ByteArrayOutputNetStream blockLight = new ByteArrayOutputNetStream(); - private ByteArrayOutputNetStream skyLight = new ByteArrayOutputNetStream(); + private NibbleArray skyLight = new NibbleArray(); private int idxHalfLong = 0; private int idxHalfByte1 = 0; - private int idxHalfByte2 = 0; private long dataValueCompacted = 0; private int blockLightCompacted = 0; - private int skyLightCompacted = 0; private int serializeBlockState(BlockType blockType) { return (blockType.getId() << 4) | blockType.getMeta(); @@ -239,16 +240,9 @@ public class ChunkDataPacket implements SCPacket { } } - void addSkyLight(int value) { + void addSkyLight(int x, int y, int z, int value) { // sky light data - if (idxHalfByte2 == 0) { - skyLightCompacted = value; - idxHalfByte2++; - } else { - skyLightCompacted = (skyLightCompacted << 4) | value; - skyLight.writeByte(skyLightCompacted); - idxHalfByte2 = 0; - } + skyLight.set(x, y, z, value); } void writeToNetStream(final NetOutputStream netOutputStream) { @@ -265,7 +259,7 @@ public class ChunkDataPacket implements SCPacket { netOutputStream.writeBytes(blockLight.toByteArray()); // // - netOutputStream.writeBytes(skyLight.toByteArray()); + netOutputStream.writeBytes(skyLight.getRawData()); // } }