diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadType.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadType.java index 519fa141b..f314b3b5c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadType.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadType.java @@ -24,5 +24,7 @@ package org.jackhuang.hmcl.game; public enum DownloadType { CLIENT, SERVER, - WINDOWS_SERVER + WINDOWS_SERVER, + CLIENT_MAPPINGS, + SERVER_MAPPINGS } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java index 7f912f011..ed187393a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java @@ -24,6 +24,7 @@ import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.ToStringBuilder; +import org.jackhuang.hmcl.util.gson.JsonMap; import org.jackhuang.hmcl.util.gson.Validation; import org.jetbrains.annotations.Nullable; @@ -60,8 +61,8 @@ public class Version implements Comparable, Validation { private final String assets; private final List libraries; private final List compatibilityRules; - private final Map downloads; - private final Map logging; + private final JsonMap downloads; + private final JsonMap logging; private final ReleaseType type; private final Date time; private final Date releaseTime; @@ -103,8 +104,8 @@ public class Version implements Comparable, Validation { this.assets = assets; this.libraries = Lang.copyList(libraries); this.compatibilityRules = Lang.copyList(compatibilityRules); - this.downloads = downloads == null ? null : new HashMap<>(downloads); - this.logging = logging == null ? null : new HashMap<>(logging); + this.downloads = downloads == null ? null : new JsonMap<>(downloads); + this.logging = logging == null ? null : new JsonMap<>(logging); this.type = type; this.time = time == null ? null : (Date) time.clone(); this.releaseTime = releaseTime == null ? null : (Date) releaseTime.clone(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonMap.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonMap.java new file mode 100644 index 000000000..7a065849f --- /dev/null +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonMap.java @@ -0,0 +1,51 @@ +/* + * Hello Minecraft! Launcher + * Copyright (C) 2019 huangyuhui and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.jackhuang.hmcl.util.gson; + +import java.util.HashMap; +import java.util.Map; + +/** + * To resolve JsonParseException: duplicate key: null + * By skipping inserting data with key null + * @param + * @param + */ +public class JsonMap extends HashMap { + public JsonMap(int initialCapacity, float loadFactor) { + super(initialCapacity, loadFactor); + } + + public JsonMap(int initialCapacity) { + super(initialCapacity); + } + + public JsonMap() { + super(); + } + + public JsonMap(Map m) { + super(m); + } + + @Override + public V put(K key, V value) { + if (key == null) return null; + return super.put(key, value); + } +}