From c454e443df0fc2829732d8b44d425619be79e44a Mon Sep 17 00:00:00 2001 From: rtm516 Date: Mon, 6 Jul 2020 23:36:31 +0100 Subject: [PATCH] Fix maps with negative IDs causing out of bounds errors --- .../bedrock/BedrockMapInfoRequestTranslator.java | 8 ++++++-- .../translators/java/world/JavaMapDataTranslator.java | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java index 3c7efa18..247021f1 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMapInfoRequestTranslator.java @@ -39,12 +39,16 @@ public class BedrockMapInfoRequestTranslator extends PacketTranslator { - session.sendUpstreamPacket(session.getStoredMaps().get(mapID)); - session.getStoredMaps().remove(mapID); + session.sendUpstreamPacket(session.getStoredMaps().get(finalMapID)); + session.getStoredMaps().remove(finalMapID); }, 100, TimeUnit.MILLISECONDS); } } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java index 2aee7bc0..12ef1053 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaMapDataTranslator.java @@ -85,7 +85,11 @@ public class JavaMapDataTranslator extends PacketTranslator // Store the map to send when the client requests it, as bedrock expects the data after a MapInfoRequestPacket if (shouldStore) { - session.getStoredMaps().put(mapItemDataPacket.getUniqueMapId(), mapItemDataPacket); + long uniqueMapId = mapItemDataPacket.getUniqueMapId(); + if (uniqueMapId <= -1l) { + uniqueMapId = 0l; + } + session.getStoredMaps().put(uniqueMapId, mapItemDataPacket); } // Send anyway just in case