Skip to content

Commit cf667b2

Browse files
authored
Fix #4759: 部分 LF/NF 模组无法正确识别 (#4945)
1 parent a3f7a23 commit cf667b2

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modinfo/ForgeNewModMetadata.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package org.jackhuang.hmcl.mod.modinfo;
22

3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonDeserializationContext;
5+
import com.google.gson.JsonDeserializer;
6+
import com.google.gson.JsonElement;
37
import com.google.gson.JsonParseException;
8+
import com.google.gson.JsonPrimitive;
9+
import com.google.gson.annotations.JsonAdapter;
410
import com.moandjiezana.toml.Toml;
511
import org.jackhuang.hmcl.mod.LocalModFile;
612
import org.jackhuang.hmcl.mod.ModLoaderType;
@@ -13,10 +19,15 @@
1319

1420
import java.io.IOException;
1521
import java.io.InputStream;
16-
import java.nio.file.*;
22+
import java.lang.reflect.Type;
23+
import java.nio.file.FileSystem;
24+
import java.nio.file.Files;
25+
import java.nio.file.Path;
26+
import java.nio.file.StandardCopyOption;
1727
import java.util.ArrayList;
1828
import java.util.HashMap;
1929
import java.util.List;
30+
import java.util.StringJoiner;
2031
import java.util.jar.Attributes;
2132
import java.util.jar.Manifest;
2233

@@ -68,6 +79,7 @@ public static class Mod {
6879
private final String displayName;
6980
private final String side;
7081
private final String displayURL;
82+
@JsonAdapter(AuthorDeserializer.class)
7183
private final String authors;
7284
private final String description;
7385

@@ -112,6 +124,29 @@ public String getAuthors() {
112124
public String getDescription() {
113125
return description;
114126
}
127+
128+
static final class AuthorDeserializer implements JsonDeserializer<String> {
129+
@Override
130+
public String deserialize(JsonElement authors, Type type, JsonDeserializationContext context) throws JsonParseException {
131+
if (authors == null || authors.isJsonNull()) {
132+
return null;
133+
} else if (authors instanceof JsonPrimitive primitive) {
134+
return primitive.getAsString();
135+
} else if (authors instanceof JsonArray array) {
136+
var joiner = new StringJoiner(", ");
137+
for (int i = 0; i < array.size(); i++) {
138+
if (!(array.get(i) instanceof JsonPrimitive element)) {
139+
return authors.toString();
140+
}
141+
142+
joiner.add(element.getAsString());
143+
}
144+
return joiner.toString();
145+
}
146+
147+
return authors.toString();
148+
}
149+
}
115150
}
116151

117152
public static LocalModFile fromForgeFile(ModManager modManager, Path modFile, FileSystem fs) throws IOException {

0 commit comments

Comments
 (0)