From f12b1e1e58dfc0df3f6605960187d26a46b1e7cd Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 21 Oct 2021 11:12:52 +0200 Subject: [PATCH] Use a byte array to avoid synchronization Signed-off-by: TheMode --- .../net/minestom/server/instance/DynamicChunk.java | 2 +- .../network/packet/server/play/data/ChunkData.java | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index 2490ad6fb..932f84813 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -185,7 +185,7 @@ public class DynamicChunk extends Chunk { ChunkDataPacket packet = new ChunkDataPacket(); packet.chunkX = chunkX; packet.chunkZ = chunkZ; - packet.chunkData = new ChunkData(heightmapsNBT, writer.getBuffer().flip(), entries); + packet.chunkData = new ChunkData(heightmapsNBT, writer.toByteArray(), entries); packet.lightData = createLightData(); return packet; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/data/ChunkData.java b/src/main/java/net/minestom/server/network/packet/server/play/data/ChunkData.java index 30d0d0e85..2ce679b36 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/data/ChunkData.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/data/ChunkData.java @@ -10,28 +10,27 @@ import net.minestom.server.utils.chunk.ChunkUtils; import org.jetbrains.annotations.NotNull; import org.jglrxavpok.hephaistos.nbt.NBTCompound; -import java.nio.ByteBuffer; import java.util.Map; import java.util.Objects; public final class ChunkData implements Writeable { private final NBTCompound heightmaps; - private final ByteBuffer data; + private final byte[] data; private final Map blockEntities; - public ChunkData(NBTCompound heightmaps, ByteBuffer data, Map blockEntities) { + public ChunkData(NBTCompound heightmaps, byte[] data, Map blockEntities) { this.heightmaps = heightmaps.deepClone(); - this.data = data.asReadOnlyBuffer(); + this.data = data.clone(); this.blockEntities = Map.copyOf(blockEntities); } @Override - public synchronized void write(@NotNull BinaryWriter writer) { + public void write(@NotNull BinaryWriter writer) { // Heightmaps writer.writeNBT("", this.heightmaps); // Data - writer.writeVarInt(data.position(0).remaining()); - writer.write(data); + writer.writeVarInt(data.length); + writer.writeBytes(data); // Block entities writer.writeVarInt(blockEntities.size()); for (var entry : blockEntities.entrySet()) {