Fix maps with negative IDs causing out of bounds errors

This commit is contained in:
rtm516 2020-07-06 23:36:31 +01:00
parent ba736575f7
commit c454e443df
2 changed files with 11 additions and 3 deletions

View file

@ -39,12 +39,16 @@ public class BedrockMapInfoRequestTranslator extends PacketTranslator<MapInfoReq
@Override @Override
public void translate(MapInfoRequestPacket packet, GeyserSession session) { public void translate(MapInfoRequestPacket packet, GeyserSession session) {
long mapID = packet.getUniqueMapId(); long mapID = packet.getUniqueMapId();
if (mapID <= -1l) {
mapID = 0l;
}
if (session.getStoredMaps().containsKey(mapID)) { if (session.getStoredMaps().containsKey(mapID)) {
// Delay the packet 100ms to prevent the client from ignoring the packet // Delay the packet 100ms to prevent the client from ignoring the packet
long finalMapID = mapID;
GeyserConnector.getInstance().getGeneralThreadPool().schedule(() -> { GeyserConnector.getInstance().getGeneralThreadPool().schedule(() -> {
session.sendUpstreamPacket(session.getStoredMaps().get(mapID)); session.sendUpstreamPacket(session.getStoredMaps().get(finalMapID));
session.getStoredMaps().remove(mapID); session.getStoredMaps().remove(finalMapID);
}, 100, TimeUnit.MILLISECONDS); }, 100, TimeUnit.MILLISECONDS);
} }
} }

View file

@ -85,7 +85,11 @@ public class JavaMapDataTranslator extends PacketTranslator<ServerMapDataPacket>
// Store the map to send when the client requests it, as bedrock expects the data after a MapInfoRequestPacket // Store the map to send when the client requests it, as bedrock expects the data after a MapInfoRequestPacket
if (shouldStore) { 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 // Send anyway just in case