From 574ebf9cf40e2b815395450ea72671c405abc891 Mon Sep 17 00:00:00 2001 From: Nesaak <52047222+Nesaak@users.noreply.github.com> Date: Wed, 2 Sep 2020 16:06:35 -0400 Subject: [PATCH] Use block index in chunk serialization --- .../net/minestom/server/instance/DynamicChunk.java | 5 ++--- .../java/net/minestom/server/reader/ChunkReader.java | 8 +++++--- .../net/minestom/server/utils/chunk/ChunkUtils.java | 12 ++++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index f2f693ea1..94afa86ff 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -12,6 +12,7 @@ import net.minestom.server.instance.block.UpdateConsumer; import net.minestom.server.network.packet.server.play.ChunkDataPacket; import net.minestom.server.utils.MathUtils; import net.minestom.server.utils.binary.BinaryWriter; +import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.world.biomes.Biome; import java.util.concurrent.CopyOnWriteArraySet; @@ -175,9 +176,7 @@ public class DynamicChunk extends Chunk { continue; // Chunk coordinates - binaryWriter.writeByte(x); - binaryWriter.writeShort(y); - binaryWriter.writeByte(z); + binaryWriter.writeShort((short) ChunkUtils.getBlockIndex(x, y, z)); // Block ids binaryWriter.writeShort(blockStateId); diff --git a/src/main/java/net/minestom/server/reader/ChunkReader.java b/src/main/java/net/minestom/server/reader/ChunkReader.java index 095af1335..2857f7f51 100644 --- a/src/main/java/net/minestom/server/reader/ChunkReader.java +++ b/src/main/java/net/minestom/server/reader/ChunkReader.java @@ -8,6 +8,7 @@ import net.minestom.server.instance.DynamicChunk; import net.minestom.server.instance.Instance; import net.minestom.server.instance.batch.ChunkBatch; import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.world.biomes.Biome; import net.minestom.server.world.biomes.BiomeManager; @@ -54,9 +55,10 @@ public class ChunkReader { while (true) { // Position - final byte x = binaryReader.readByte(); - final short y = binaryReader.readShort(); - final byte z = binaryReader.readByte(); + final short index = binaryReader.readShort(); + final byte x = ChunkUtils.blockIndexToChunkPositionX(index); + final short y = ChunkUtils.blockIndexToChunkPositionY(index); + final byte z = ChunkUtils.blockIndexToChunkPositionZ(index); // Block type final short blockStateId = binaryReader.readShort(); diff --git a/src/main/java/net/minestom/server/utils/chunk/ChunkUtils.java b/src/main/java/net/minestom/server/utils/chunk/ChunkUtils.java index 5da28381c..f17398d13 100644 --- a/src/main/java/net/minestom/server/utils/chunk/ChunkUtils.java +++ b/src/main/java/net/minestom/server/utils/chunk/ChunkUtils.java @@ -237,8 +237,8 @@ public final class ChunkUtils { * @param index an index computed from {@link #getBlockIndex(int, int, int)} * @return the chunk position X (O-15) of the specified index */ - public static int blockIndexToChunkPositionX(int index) { - return blockIndexToPositionX(index, 0); + public static byte blockIndexToChunkPositionX(int index) { + return (byte) blockIndexToPositionX(index, 0); } /** @@ -247,8 +247,8 @@ public final class ChunkUtils { * @param index an index computed from {@link #getBlockIndex(int, int, int)} * @return the chunk position Y (O-255) of the specified index */ - public static int blockIndexToChunkPositionY(int index) { - return blockIndexToPositionY(index); + public static short blockIndexToChunkPositionY(int index) { + return (short) blockIndexToPositionY(index); } /** @@ -257,8 +257,8 @@ public final class ChunkUtils { * @param index an index computed from {@link #getBlockIndex(int, int, int)} * @return the chunk position Z (O-15) of the specified index */ - public static int blockIndexToChunkPositionZ(int index) { - return blockIndexToPositionZ(index, 0); + public static byte blockIndexToChunkPositionZ(int index) { + return (byte) blockIndexToPositionZ(index, 0); } }