diff --git a/api/src/main/java/org/geysermc/floodgate/api/handshake/HandshakeData.java b/api/src/main/java/org/geysermc/floodgate/api/handshake/HandshakeData.java index b2ef4812..d152c20e 100644 --- a/api/src/main/java/org/geysermc/floodgate/api/handshake/HandshakeData.java +++ b/api/src/main/java/org/geysermc/floodgate/api/handshake/HandshakeData.java @@ -102,6 +102,22 @@ public interface HandshakeData { */ void setHostname(String hostname); + /** + * Returns the IP address of the Bedrock client. The initial value is {@link + * BedrockData#getIp()} (or null if BedrockData is null) but will return the changed IP if it + * has been changed using {@link #setBedrockIp(String)} + */ + String getBedrockIp(); + + /** + * Set the IP address of the Bedrock client. Floodgate doesn't perform any checks if the + * provided data is valid (hence one of the reasons why this class has been made for advanced + * users), thank you for not abusing Floodgate's trust in you :) + * + * @param address the IP address of the Bedrock client + */ + void setBedrockIp(String address); + /** * Returns the reason to disconnect the current player. */ diff --git a/common/src/main/java/org/geysermc/floodgate/addon/data/HandshakeDataImpl.java b/common/src/main/java/org/geysermc/floodgate/addon/data/HandshakeDataImpl.java index dada69a5..103e29fe 100644 --- a/common/src/main/java/org/geysermc/floodgate/addon/data/HandshakeDataImpl.java +++ b/common/src/main/java/org/geysermc/floodgate/addon/data/HandshakeDataImpl.java @@ -47,6 +47,7 @@ public class HandshakeDataImpl implements HandshakeData { @Setter private LinkedPlayer linkedPlayer; @Setter private RawSkin rawSkin; @Setter private String hostname; + @Setter private String bedrockIp; @Setter private String disconnectReason; public HandshakeDataImpl( @@ -69,7 +70,6 @@ public class HandshakeDataImpl implements HandshakeData { UUID javaUniqueId = null; if (bedrockData != null) { - String prefix = config.getUsernamePrefix(); int usernameLength = Math.min(bedrockData.getUsername().length(), 16 - prefix.length()); javaUsername = prefix + bedrockData.getUsername().substring(0, usernameLength); @@ -78,6 +78,7 @@ public class HandshakeDataImpl implements HandshakeData { } javaUniqueId = Utils.getJavaUuid(bedrockData.getXuid()); + this.bedrockIp = bedrockData.getIp(); } this.javaUsername = javaUsername; diff --git a/common/src/main/java/org/geysermc/floodgate/player/FloodgateHandshakeHandler.java b/common/src/main/java/org/geysermc/floodgate/player/FloodgateHandshakeHandler.java index 0e6da13c..1d3d99c6 100644 --- a/common/src/main/java/org/geysermc/floodgate/player/FloodgateHandshakeHandler.java +++ b/common/src/main/java/org/geysermc/floodgate/player/FloodgateHandshakeHandler.java @@ -149,7 +149,7 @@ public final class FloodgateHandshakeHandler { channel.attr(playerAttribute).set(player); int port = ((InetSocketAddress) channel.remoteAddress()).getPort(); - InetSocketAddress socketAddress = new InetSocketAddress(bedrockData.getIp(), port); + InetSocketAddress socketAddress = new InetSocketAddress(handshakeData.getBedrockIp(), port); player.addProperty(PropertyKey.SOCKET_ADDRESS, socketAddress); return new HandshakeResult(ResultType.SUCCESS, handshakeData, bedrockData, player);