From a90c6db7ad28e137d45a33c4048d1e1e6e406cfe Mon Sep 17 00:00:00 2001 From: SupremeMortal <6178101+SupremeMortal@users.noreply.github.com> Date: Thu, 23 Dec 2021 14:07:37 +0000 Subject: [PATCH] Fix SubChunkPacket serialization --- .../v471/serializer/SubChunkSerializer_v471.java | 10 ++++++---- .../v475/serializer/SubChunkSerializer_v475.java | 7 +++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/bedrock/bedrock-v471/src/main/java/com/nukkitx/protocol/bedrock/v471/serializer/SubChunkSerializer_v471.java b/bedrock/bedrock-v471/src/main/java/com/nukkitx/protocol/bedrock/v471/serializer/SubChunkSerializer_v471.java index ed708f8e7..742d58535 100644 --- a/bedrock/bedrock-v471/src/main/java/com/nukkitx/protocol/bedrock/v471/serializer/SubChunkSerializer_v471.java +++ b/bedrock/bedrock-v471/src/main/java/com/nukkitx/protocol/bedrock/v471/serializer/SubChunkSerializer_v471.java @@ -12,8 +12,11 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class SubChunkSerializer_v471 implements BedrockPacketSerializer { + public static final SubChunkSerializer_v471 INSTANCE = new SubChunkSerializer_v471(); + protected static final int HEIGHT_MAP_LENGTH = 256; + @Override public void serialize(ByteBuf buffer, BedrockPacketHelper helper, SubChunkPacket packet) { VarInts.writeInt(buffer, packet.getDimension()); @@ -21,7 +24,7 @@ public void serialize(ByteBuf buffer, BedrockPacketHelper helper, SubChunkPacket helper.writeByteArray(buffer, packet.getData()); VarInts.writeInt(buffer, packet.getResult().ordinal()); buffer.writeByte(packet.getHeightMapType().ordinal()); - buffer.writeBytes(packet.getHeightMapData()); + buffer.writeBytes(packet.getHeightMapData(), 0, HEIGHT_MAP_LENGTH); } @Override @@ -32,9 +35,8 @@ public void deserialize(ByteBuf buffer, BedrockPacketHelper helper, SubChunkPack packet.setResult(SubChunkRequestResult.values()[VarInts.readInt(buffer)]); packet.setHeightMapType(HeightMapDataType.values()[buffer.readByte()]); - ByteBuf heightMapBuffer = buffer.readBytes(buffer.readableBytes()); - byte[] heightMap = new byte[heightMapBuffer.readableBytes()]; - heightMapBuffer.readBytes(heightMap); + byte[] heightMap = new byte[HEIGHT_MAP_LENGTH]; + buffer.readBytes(heightMap); packet.setHeightMapData(heightMap); } diff --git a/bedrock/bedrock-v475/src/main/java/com/nukkitx/protocol/bedrock/v475/serializer/SubChunkSerializer_v475.java b/bedrock/bedrock-v475/src/main/java/com/nukkitx/protocol/bedrock/v475/serializer/SubChunkSerializer_v475.java index c9eee2d70..27764e05a 100644 --- a/bedrock/bedrock-v475/src/main/java/com/nukkitx/protocol/bedrock/v475/serializer/SubChunkSerializer_v475.java +++ b/bedrock/bedrock-v475/src/main/java/com/nukkitx/protocol/bedrock/v475/serializer/SubChunkSerializer_v475.java @@ -20,7 +20,7 @@ public void serialize(ByteBuf buffer, BedrockPacketHelper helper, SubChunkPacket buffer.writeByte(packet.getHeightMapType().ordinal()); if (packet.getHeightMapType() == HeightMapDataType.HAS_DATA) { byte[] heightMapBuf = packet.getHeightMapData(); - buffer.writeBytes(heightMapBuf); + buffer.writeBytes(heightMapBuf, 0, HEIGHT_MAP_LENGTH); } buffer.writeBoolean(packet.isCacheEnabled()); if (packet.isCacheEnabled()) { @@ -37,9 +37,8 @@ public void deserialize(ByteBuf buffer, BedrockPacketHelper helper, SubChunkPack packet.setHeightMapType(HeightMapDataType.values()[buffer.readByte()]); if (packet.getHeightMapType() == HeightMapDataType.HAS_DATA) { - ByteBuf heightMapBuffer = buffer.readBytes(buffer.readableBytes()); - byte[] heightMap = new byte[heightMapBuffer.readableBytes()]; - heightMapBuffer.readBytes(heightMap); + byte[] heightMap = new byte[HEIGHT_MAP_LENGTH]; + buffer.readBytes(heightMap); } packet.setCacheEnabled(buffer.readBoolean()); if (packet.isCacheEnabled()) {