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());