Skip to content

Commit 8d69cbc

Browse files
Glavoburningtnt
andauthored
Fix #5907: 修复无法为 MC 26.1.1 从官方源安装 NeoForge 的问题 (#5910)
Co-authored-by: Burning_TNT <pangyl08@163.com>
1 parent 90c2372 commit 8d69cbc

1 file changed

Lines changed: 28 additions & 12 deletions

File tree

HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOfficialVersionList.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.jackhuang.hmcl.download.VersionList;
2222
import org.jackhuang.hmcl.task.GetTask;
2323
import org.jackhuang.hmcl.task.Task;
24+
import org.jackhuang.hmcl.util.gson.JsonSerializable;
2425

2526
import java.util.Collections;
2627
import java.util.List;
@@ -75,16 +76,38 @@ public Task<?> refreshAsync() {
7576
String mcVersion;
7677

7778
try {
78-
int si1 = version.indexOf('.'), si2 = version.indexOf('.', version.indexOf('.') + 1);
79+
int si1 = version.indexOf('.');
80+
int si2 = version.indexOf('.', si1 + 1);
81+
if (si1 < 0 || si2 < 0) {
82+
LOG.warning("Unsupported NeoForge version: " + version);
83+
continue;
84+
}
85+
7986
int majorVersion = Integer.parseInt(version.substring(0, si1));
8087
if (majorVersion == 0) { // Snapshot version.
8188
mcVersion = version.substring(si1 + 1, si2);
8289
} else {
83-
String ver = version.substring(0, Integer.parseInt(version.substring(si1 + 1, si2)) == 0 ? si1 : si2);
8490
if (majorVersion >= 26) {
91+
int si3 = version.indexOf('.', si2 + 1);
92+
93+
if (si3 < 0) {
94+
LOG.warning("Unsupported NeoForge version: " + version);
95+
continue;
96+
}
97+
98+
String ver = Integer.parseInt(version.substring(si2 + 1, si3)) == 0
99+
? version.substring(0, si2)
100+
: version.substring(0, si3);
101+
85102
int separator = version.indexOf('+');
86-
mcVersion = separator < 0 ? ver : ver + "-" + version.substring(separator + 1);
103+
if (separator < 0)
104+
mcVersion = ver;
105+
else
106+
mcVersion = ver + "-" + version.substring(separator + 1);
87107
} else {
108+
String ver = Integer.parseInt(version.substring(si1 + 1, si2)) == 0
109+
? version.substring(0, si1)
110+
: version.substring(0, si2);
88111
mcVersion = "1." + ver;
89112
}
90113
}
@@ -106,14 +129,7 @@ public Task<?> refreshAsync() {
106129
});
107130
}
108131

109-
private static final class OfficialAPIResult {
110-
private final boolean isSnapshot;
111-
112-
private final List<String> versions;
113-
114-
public OfficialAPIResult(boolean isSnapshot, List<String> versions) {
115-
this.isSnapshot = isSnapshot;
116-
this.versions = versions;
117-
}
132+
@JsonSerializable
133+
private record OfficialAPIResult(boolean isSnapshot, List<String> versions) {
118134
}
119135
}

0 commit comments

Comments
 (0)