From 8c95e261894ece2d8c6c6bd791c082d079eeb3ca Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 29 Jul 2021 14:35:03 -0400 Subject: [PATCH] Fix experimental toggle'd biomes not accounting for chunk offset --- .../java/world/JavaChunkDataTranslator.java | 14 +++++++++++++- .../org/geysermc/connector/utils/ChunkUtils.java | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java index 45a9e45f5..2ec3a15fc 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaChunkDataTranslator.java @@ -43,6 +43,9 @@ import org.geysermc.connector.network.translators.world.chunk.ChunkSection; import org.geysermc.connector.network.translators.world.BiomeTranslator; import org.geysermc.connector.utils.ChunkUtils; +import static org.geysermc.connector.utils.ChunkUtils.MINIMUM_ACCEPTED_HEIGHT; +import static org.geysermc.connector.utils.ChunkUtils.MINIMUM_ACCEPTED_HEIGHT_OVERWORLD; + @Translator(packet = ServerChunkDataPacket.class) public class JavaChunkDataTranslator extends PacketTranslator { // Caves and cliffs supports 3D biomes by implementing a very similar palette system to blocks @@ -100,8 +103,17 @@ public class JavaChunkDataTranslator extends PacketTranslator> 4; for (int i = 0; i < sectionCount; i++) { - BiomeTranslator.toNewBedrockBiome(session, column.getBiomeData(), i).writeToNetwork(byteBuf); + int biomeYOffset = dimensionOffset + i; + if (biomeYOffset < yOffset) { + // Ignore this biome section since it goes below the height of the Java world + byteBuf.writeBytes(ChunkUtils.EMPTY_BIOME_DATA); + continue; + } + BiomeTranslator.toNewBedrockBiome(session, column.getBiomeData(), i + (dimensionOffset - yOffset)).writeToNetwork(byteBuf); } // As of 1.17.10, Bedrock hardcodes to always read 32 biome sections diff --git a/connector/src/main/java/org/geysermc/connector/utils/ChunkUtils.java b/connector/src/main/java/org/geysermc/connector/utils/ChunkUtils.java index 528fdbdf6..932950240 100644 --- a/connector/src/main/java/org/geysermc/connector/utils/ChunkUtils.java +++ b/connector/src/main/java/org/geysermc/connector/utils/ChunkUtils.java @@ -73,9 +73,9 @@ public class ChunkUtils { /** * The minimum height Bedrock Edition will accept. */ - private static final int MINIMUM_ACCEPTED_HEIGHT = 0; + public static final int MINIMUM_ACCEPTED_HEIGHT = 0; private static final int CAVES_AND_CLIFFS_MINIMUM_HEIGHT = -64; - private static final int MINIMUM_ACCEPTED_HEIGHT_OVERWORLD = GeyserConnector.getInstance().getConfig().isExtendedWorldHeight() ? + public static final int MINIMUM_ACCEPTED_HEIGHT_OVERWORLD = GeyserConnector.getInstance().getConfig().isExtendedWorldHeight() ? CAVES_AND_CLIFFS_MINIMUM_HEIGHT : MINIMUM_ACCEPTED_HEIGHT; /** * The maximum chunk height Bedrock Edition will accept, from the lowest point to the highest.