diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 55a2ffcb2..570946e9f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -747,6 +747,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private boolean allowVibrantVisuals = true; @Accessors(fluent = true) + @Setter private boolean hasAcceptedCodeOfConduct = false; @Accessors(fluent = true) diff --git a/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java b/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java index 0d8b8b56a..4d4817019 100644 --- a/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java +++ b/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java @@ -46,6 +46,7 @@ import org.geysermc.floodgate.util.UiProfile; import java.io.IOException; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.UUID; @Getter @@ -62,7 +63,8 @@ public final class BedrockClientData { @SerializedName(value = "SkinId") private String skinId; @SerializedName(value = "SkinData") - private String skinData; + @JsonAdapter(value = StringToByteDeserializer.class) + private byte[] skinData; @SerializedName(value = "SkinImageHeight") private int skinImageHeight; @SerializedName(value = "SkinImageWidth") @@ -79,9 +81,11 @@ public final class BedrockClientData { @SerializedName(value = "CapeOnClassicSkin") private boolean capeOnClassicSkin; @SerializedName(value = "SkinResourcePatch") - private String geometryName; + @JsonAdapter(value = StringToByteDeserializer.class) + private byte[] geometryName; @SerializedName(value = "SkinGeometryData") - private String geometryData; + @JsonAdapter(value = StringToByteDeserializer.class) + private byte[] geometryData; @SerializedName(value = "PersonaSkin") private boolean personaSkin; @SerializedName(value = "PremiumSkin") @@ -95,12 +99,15 @@ public final class BedrockClientData { @JsonAdapter(value = IntToEnumTypeFactory.class) private DeviceOs deviceOs; @SerializedName(value = "UIProfile") + @JsonAdapter(value = IntToEnumTypeFactory.class) private UiProfile uiProfile; @SerializedName(value = "GuiScale") private int guiScale; @SerializedName(value = "CurrentInputMode") + @JsonAdapter(value = IntToEnumTypeFactory.class) private InputMode currentInputMode; @SerializedName(value = "DefaultInputMode") + @JsonAdapter(value = IntToEnumTypeFactory.class) private InputMode defaultInputMode; @SerializedName("PlatformOnlineId") private String platformOnlineId; @@ -144,7 +151,7 @@ public final class BedrockClientData { private static final class StringToByteDeserializer implements JsonDeserializer { @Override public byte[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return json.getAsString().getBytes(StandardCharsets.UTF_8); + return Base64.getDecoder().decode(json.getAsString().getBytes(StandardCharsets.UTF_8)); } } diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java index 48246c4e8..698331674 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -29,8 +29,6 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; @@ -312,11 +310,11 @@ public class SkinManager { } try { - byte[] skinBytes = Base64.getDecoder().decode(clientData.getSkinData().getBytes(StandardCharsets.UTF_8)); + byte[] skinBytes = clientData.getSkinData(); byte[] capeBytes = clientData.getCapeData(); - byte[] geometryNameBytes = Base64.getDecoder().decode(clientData.getGeometryName().getBytes(StandardCharsets.UTF_8)); - byte[] geometryBytes = Base64.getDecoder().decode(clientData.getGeometryData().getBytes(StandardCharsets.UTF_8)); + byte[] geometryNameBytes = clientData.getGeometryName(); + byte[] geometryBytes = clientData.getGeometryData(); if (skinBytes.length <= (128 * 128 * 4) && !clientData.isPersonaSkin()) { SkinProvider.storeBedrockSkin(playerEntity.getUuid(), clientData.getSkinId(), skinBytes); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java index 2ce99e119..62b19e345 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java @@ -74,6 +74,9 @@ public class JavaLoginFinishedTranslator extends PacketTranslator