From 9c21545241ae1909f3586d5f4140b6e673893c30 Mon Sep 17 00:00:00 2001 From: DoctorMacc Date: Thu, 20 Aug 2020 11:37:40 -0400 Subject: [PATCH] Prepare for skin additions --- .../geysermc/floodgate/api/player/FloodgatePlayer.java | 10 ++++++---- .../org/geysermc/floodgate/FloodgatePlayerImpl.java | 4 +++- .../java/org/geysermc/floodgate/HandshakeHandler.java | 5 ++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/api/src/main/java/org/geysermc/floodgate/api/player/FloodgatePlayer.java b/api/src/main/java/org/geysermc/floodgate/api/player/FloodgatePlayer.java index 09826b88..2b039d6a 100644 --- a/api/src/main/java/org/geysermc/floodgate/api/player/FloodgatePlayer.java +++ b/api/src/main/java/org/geysermc/floodgate/api/player/FloodgatePlayer.java @@ -1,9 +1,6 @@ package org.geysermc.floodgate.api.player; -import org.geysermc.floodgate.util.DeviceOs; -import org.geysermc.floodgate.util.InputMode; -import org.geysermc.floodgate.util.LinkedPlayer; -import org.geysermc.floodgate.util.UiProfile; +import org.geysermc.floodgate.util.*; import java.util.UUID; @@ -76,6 +73,11 @@ public interface FloodgatePlayer { */ LinkedPlayer getLinkedPlayer(); + /** + * Returns the raw skin of the Bedrock player + */ + RawSkin getRawSkin(); + /** * Casts the FloodgatePlayer instance to a class that extends FloodgatePlayer. * diff --git a/common/src/main/java/org/geysermc/floodgate/FloodgatePlayerImpl.java b/common/src/main/java/org/geysermc/floodgate/FloodgatePlayerImpl.java index c4e3ab51..6235a0ed 100644 --- a/common/src/main/java/org/geysermc/floodgate/FloodgatePlayerImpl.java +++ b/common/src/main/java/org/geysermc/floodgate/FloodgatePlayerImpl.java @@ -53,6 +53,7 @@ public final class FloodgatePlayerImpl implements FloodgatePlayer { private final InputMode inputMode; private final String ip; private final LinkedPlayer linkedPlayer; + private final RawSkin rawSkin; /** * Returns true if the player is still logging in @@ -80,6 +81,7 @@ public final class FloodgatePlayerImpl implements FloodgatePlayer { uiProfile = UiProfile.getById(data.getUiProfile()); inputMode = InputMode.getById(data.getInputMode()); ip = data.getIp(); + rawSkin = data.getSkin(); // we'll use the LinkedPlayer provided by Bungee or Velocity (if they included one) if (data.hasPlayerLink()) { @@ -138,6 +140,6 @@ public final class FloodgatePlayerImpl implements FloodgatePlayer { public BedrockData toBedrockData() { return new BedrockData(version, username, xuid, deviceOs.ordinal(), languageCode, - uiProfile.ordinal(), inputMode.ordinal(), ip, linkedPlayer); + uiProfile.ordinal(), inputMode.ordinal(), ip, linkedPlayer, rawSkin); } } diff --git a/common/src/main/java/org/geysermc/floodgate/HandshakeHandler.java b/common/src/main/java/org/geysermc/floodgate/HandshakeHandler.java index 081df282..cdce2239 100644 --- a/common/src/main/java/org/geysermc/floodgate/HandshakeHandler.java +++ b/common/src/main/java/org/geysermc/floodgate/HandshakeHandler.java @@ -40,6 +40,7 @@ import javax.crypto.NoSuchPaddingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; +import java.util.Arrays; import static com.google.common.base.Preconditions.checkNotNull; import static org.geysermc.floodgate.util.BedrockData.EXPECTED_LENGTH; @@ -65,7 +66,9 @@ public final class HandshakeHandler { public HandshakeResult handle(@NonNull String handshakeData) { try { + System.out.println(handshakeData); String[] data = handshakeData.split("\0"); + System.out.println(Arrays.toString(data)); boolean isBungeeData = data.length == 6 || data.length == 7; if (proxy && isBungeeData || !isBungeeData && data.length != 4 @@ -74,7 +77,7 @@ public final class HandshakeHandler { } BedrockData bedrockData = EncryptionUtil.decryptBedrockData( - privateKey, data[2] + '\0' + data[3] + privateKey, data[2] + '\0' + data[3], null ); if (bedrockData.getDataLength() != EXPECTED_LENGTH) {