diff --git a/core/src/main/java/mc/core/world/block/BlockLocation.java b/core/src/main/java/mc/core/world/block/BlockLocation.java index e5220c5..a4bfc49 100644 --- a/core/src/main/java/mc/core/world/block/BlockLocation.java +++ b/core/src/main/java/mc/core/world/block/BlockLocation.java @@ -23,9 +23,17 @@ public class BlockLocation implements Cloneable { public BlockLocation toGlobal(ChunkSection chunkSection) { return new BlockLocation( - (chunkSection.getX() << 8) + x, - (chunkSection.getY() << 8) + y, - (chunkSection.getZ() << 8) + z + (chunkSection.getX() << 4) + x, + (chunkSection.getY() << 4) + y, + (chunkSection.getZ() << 4) + z + ); + } + + public BlockLocation toLocal() { + return new BlockLocation( + x - (x >> 4 << 4), + y - (y >> 4 << 4), + z - (z >> 4 << 4) ); } 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 86ea7d7..2223ad9 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 @@ -184,14 +184,12 @@ public class ChunkDataPacket implements SCPacket { private TIntList palette = new TIntArrayList(); private int dataItems = 0; private ByteArrayOutputNetStream dataArray = new ByteArrayOutputNetStream(); - private ByteArrayOutputNetStream blockLight = new ByteArrayOutputNetStream(); + private NibbleArray blockLight = new NibbleArray(); private NibbleArray skyLight = new NibbleArray(); private int idxHalfLong = 0; - private int idxHalfByte1 = 0; private long dataValueCompacted = 0; - private int blockLightCompacted = 0; private int serializeBlockState(BlockType blockType) { return (blockType.getId() << 4) | blockType.getMeta(); @@ -230,14 +228,7 @@ public class ChunkDataPacket implements SCPacket { } // block light data - if (idxHalfByte1 == 0) { - blockLightCompacted = block.getLight(); - idxHalfByte1++; - } else { - blockLightCompacted = (blockLightCompacted << 4) | block.getLight(); - blockLight.writeByte(blockLightCompacted); - idxHalfByte1 = 0; - } + blockLight.set(block.getLocation().toLocal(), block.getLight()); } void addSkyLight(int x, int y, int z, int value) { @@ -256,7 +247,7 @@ public class ChunkDataPacket implements SCPacket { netOutputStream.writeBytes(dataArray.toByteArray()); // Data Array // // - netOutputStream.writeBytes(blockLight.toByteArray()); + netOutputStream.writeBytes(blockLight.getRawData()); // // netOutputStream.writeBytes(skyLight.getRawData());