From 5c439cb2a358db871be4c1bc88ac1e79c71b9a20 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Sat, 24 Oct 2020 22:48:17 +0100 Subject: [PATCH] Add better redirection based on the clients connecting IP --- src/main/java/org/geysermc/connect/PacketHandler.java | 4 ++++ src/main/java/org/geysermc/connect/utils/Player.java | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/geysermc/connect/PacketHandler.java b/src/main/java/org/geysermc/connect/PacketHandler.java index f8acce9..c04dd67 100644 --- a/src/main/java/org/geysermc/connect/PacketHandler.java +++ b/src/main/java/org/geysermc/connect/PacketHandler.java @@ -46,6 +46,7 @@ import org.geysermc.connect.ui.UIHandler; import org.geysermc.connect.utils.Player; import org.geysermc.connector.entity.attribute.AttributeType; import org.geysermc.connector.network.BedrockProtocol; +import org.geysermc.connector.network.session.auth.BedrockClientData; import org.geysermc.connector.utils.AttributeUtils; import org.geysermc.connector.utils.LanguageUtils; @@ -146,6 +147,9 @@ public class PacketHandler implements BedrockPacketHandler { player = new Player(extraData, session); masterServer.getPlayers().put(player.getXuid(), player); + // Store the full client data + player.setClientData(OBJECT_MAPPER.convertValue(OBJECT_MAPPER.readTree(skinData.getPayload().toBytes()), BedrockClientData.class)); + // Tell the client we have logged in successfully PlayStatusPacket playStatusPacket = new PlayStatusPacket(); playStatusPacket.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS); diff --git a/src/main/java/org/geysermc/connect/utils/Player.java b/src/main/java/org/geysermc/connect/utils/Player.java index cf3ac12..d38ffc3 100644 --- a/src/main/java/org/geysermc/connect/utils/Player.java +++ b/src/main/java/org/geysermc/connect/utils/Player.java @@ -43,6 +43,7 @@ import org.geysermc.common.window.FormWindow; import org.geysermc.connect.MasterServer; import org.geysermc.connect.ui.FormID; import org.geysermc.connect.ui.UIHandler; +import org.geysermc.connector.network.session.auth.BedrockClientData; import java.util.ArrayList; import java.util.List; @@ -66,6 +67,9 @@ public class Player { @Setter private Server currentServer; + @Setter + private BedrockClientData clientData; + public Player(JsonNode extraData, BedrockServerSession session) { this.xuid = extraData.get("XUID").asText(); this.identity = UUID.fromString(extraData.get("identity").asText()); @@ -189,7 +193,12 @@ public class Player { * Send the player to the Geyser proxy server or straight to the bedrock server if it is */ public void connectToProxy() { - String address = MasterServer.getInstance().getGeyserConnectConfig().getRemoteAddress(); + // Use the clients connecting IP then fallback to the remote address from config + String address = clientData.getServerAddress().split(":")[0].trim(); + if (address.isEmpty()) { + address = MasterServer.getInstance().getGeyserConnectConfig().getRemoteAddress(); + } + int port = MasterServer.getInstance().getGeyserConnectConfig().getGeyser().getPort(); if (currentServer.isBedrock()) {