From 0f7b5299e9353f5273ffaf231f47efcb351193d7 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 22 Feb 2018 15:46:48 +0800 Subject: [PATCH] Fixed incorrect format of userProperties. Closes #286 --- .../hmcl/auth/yggdrasil/PropertyMap.java | 16 ++++++++++++++++ .../hmcl/auth/yggdrasil/YggdrasilAccount.java | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMap.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMap.java index a69968dde..c0ddc6ecf 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMap.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/PropertyMap.java @@ -66,4 +66,20 @@ public final class PropertyMap extends HashMap { return result; } } + + public static class LegacySerializer + implements JsonSerializer { + public static final LegacySerializer INSTANCE = new LegacySerializer(); + + @Override + public JsonElement serialize(PropertyMap src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject result = new JsonObject(); + for (PropertyMap.Entry entry : src.entrySet()) { + JsonArray values = new JsonArray(); + values.add(new JsonPrimitive(entry.getValue())); + result.add(entry.getKey(), values); + } + return result; + } + } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java index 9939d5479..5af8b4524 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java @@ -17,6 +17,8 @@ */ package org.jackhuang.hmcl.auth.yggdrasil; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import org.jackhuang.hmcl.auth.*; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.UUIDTypeAdapter; @@ -108,7 +110,7 @@ public class YggdrasilAccount extends Account { GameProfile profile = session.getSelectedProfile(); return new AuthInfo(profile.getName(), UUIDTypeAdapter.fromUUID(profile.getId()), session.getAccessToken(), profile.getUserType(), - YggdrasilService.GSON.toJson(Optional.ofNullable(session.getUser()).map(User::getProperties).orElseGet(PropertyMap::new))); + new GsonBuilder().registerTypeAdapter(PropertyMap.class, PropertyMap.LegacySerializer.INSTANCE).create().toJson(Optional.ofNullable(session.getUser()).map(User::getProperties).orElseGet(PropertyMap::new))); } @Override @@ -167,7 +169,7 @@ public class YggdrasilAccount extends Account { Optional.ofNullable(session) .map(YggdrasilSession::getSelectedProfile) .map(GameProfile::getProperties) - .ifPresent(it -> it.remove("texture")); + .ifPresent(it -> it.remove("textures")); } @Override