diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/types/Chunk1_13Type.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/types/Chunk1_13Type.java index 804d69531..7c972abeb 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/types/Chunk1_13Type.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/types/Chunk1_13Type.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.BitSet; import java.util.List; +import java.util.logging.Level; public class Chunk1_13Type extends PartialType { public Chunk1_13Type(ClientWorld param) { @@ -30,7 +31,7 @@ public class Chunk1_13Type extends PartialType { boolean groundUp = input.readBoolean(); int primaryBitmask = Type.VAR_INT.read(input); - Type.VAR_INT.read(input); + ByteBuf data = input.readSlice(Type.VAR_INT.read(input)); BitSet usedSections = new BitSet(16); ChunkSection[] sections = new ChunkSection[16]; @@ -44,18 +45,23 @@ public class Chunk1_13Type extends PartialType { // Read sections for (int i = 0; i < 16; i++) { if (!usedSections.get(i)) continue; // Section not set - ChunkSection section = Types1_13.CHUNK_SECTION.read(input); + ChunkSection section = Types1_13.CHUNK_SECTION.read(data); sections[i] = section; - section.readBlockLight(input); + section.readBlockLight(data); if (world.getEnvironment() == Environment.NORMAL) { - section.readSkyLight(input); + section.readSkyLight(data); } } int[] biomeData = groundUp ? new int[256] : null; if (groundUp) { - for (int i = 0; i < 256; i++) { - biomeData[i] = input.readInt(); + try { + for (int i = 0; i < 256; i++) { + biomeData[i] = data.readInt(); + } + } catch (IndexOutOfBoundsException e) { + // Some plugin isn't sending biome data while groundUp is true, see #1312 + Via.getPlatform().getLogger().log(Level.WARNING, "IndexOutOfBoundsException while trying to read biome data", e); } }