From cf667b2b8de1161552c4547803f8ce82dfee4774 Mon Sep 17 00:00:00 2001 From: Burning_TNT Date: Sun, 7 Dec 2025 21:13:49 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20#4759:=20=E9=83=A8=E5=88=86=20LF/NF=20?= =?UTF-8?q?=E6=A8=A1=E7=BB=84=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E8=AF=86?= =?UTF-8?q?=E5=88=AB=20(#4945)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/mod/modinfo/ForgeNewModMetadata.java | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modinfo/ForgeNewModMetadata.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modinfo/ForgeNewModMetadata.java index a6c24ce70..24b5471ca 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modinfo/ForgeNewModMetadata.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modinfo/ForgeNewModMetadata.java @@ -1,6 +1,12 @@ package org.jackhuang.hmcl.mod.modinfo; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.annotations.JsonAdapter; import com.moandjiezana.toml.Toml; import org.jackhuang.hmcl.mod.LocalModFile; import org.jackhuang.hmcl.mod.ModLoaderType; @@ -13,10 +19,15 @@ import org.jackhuang.hmcl.util.io.CompressingUtils; import java.io.IOException; import java.io.InputStream; -import java.nio.file.*; +import java.lang.reflect.Type; +import java.nio.file.FileSystem; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.StringJoiner; import java.util.jar.Attributes; import java.util.jar.Manifest; @@ -68,6 +79,7 @@ public final class ForgeNewModMetadata { private final String displayName; private final String side; private final String displayURL; + @JsonAdapter(AuthorDeserializer.class) private final String authors; private final String description; @@ -112,6 +124,29 @@ public final class ForgeNewModMetadata { public String getDescription() { return description; } + + static final class AuthorDeserializer implements JsonDeserializer { + @Override + public String deserialize(JsonElement authors, Type type, JsonDeserializationContext context) throws JsonParseException { + if (authors == null || authors.isJsonNull()) { + return null; + } else if (authors instanceof JsonPrimitive primitive) { + return primitive.getAsString(); + } else if (authors instanceof JsonArray array) { + var joiner = new StringJoiner(", "); + for (int i = 0; i < array.size(); i++) { + if (!(array.get(i) instanceof JsonPrimitive element)) { + return authors.toString(); + } + + joiner.add(element.getAsString()); + } + return joiner.toString(); + } + + return authors.toString(); + } + } } public static LocalModFile fromForgeFile(ModManager modManager, Path modFile, FileSystem fs) throws IOException {