From 3d50155ee3d7b4bb7ba0f08a3de16eed0fb42af4 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 31 Jul 2021 16:34:24 -0400 Subject: [PATCH] Handle the server sending invalid biome IDs in chunks Should hopefully address #2400 - the Java client handles invalid biome IDs and simply complains in its logs. --- .../network/translators/world/BiomeTranslator.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/world/BiomeTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/world/BiomeTranslator.java index e76d179bf..143b778c6 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/world/BiomeTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/world/BiomeTranslator.java @@ -92,9 +92,12 @@ public class BiomeTranslator { bedrockId = Registries.BIOME_IDENTIFIERS.get().getInt(replacementBiome); } - if (javaId != bedrockId) { - // When we see the Java ID, we should instead apply the Bedrock ID - biomeTranslations.put(javaId, bedrockId); + // When we see the Java ID, we should instead apply the Bedrock ID + biomeTranslations.put(javaId, bedrockId); + + if (javaId == 0) { + // Matches Java behavior when it sees an invalid biome - it just replaces it with ID 0 + biomeTranslations.defaultReturnValue(bedrockId); } } } @@ -132,8 +135,8 @@ public class BiomeTranslator { int x = i & 3; int y = (i >> 4) & 3; int z = (i >> 2) & 3; - // Get the Bedrock biome ID override, or this ID if it's the same - int biomeId = biomeTranslations.getOrDefault(javaId, javaId); + // Get the Bedrock biome ID override + int biomeId = biomeTranslations.get(javaId); int idx = storage.idFor(biomeId); // Convert biome coordinates into block coordinates // Bedrock expects a full 4096 blocks