44import org .jackhuang .hmcl .download .VersionList ;
55import org .jackhuang .hmcl .task .GetTask ;
66import org .jackhuang .hmcl .task .Task ;
7+ import org .jackhuang .hmcl .util .gson .JsonSerializable ;
78
89import java .util .Collections ;
910import java .util .List ;
@@ -58,16 +59,38 @@ public Task<?> refreshAsync() {
5859 String mcVersion ;
5960
6061 try {
61- int si1 = version .indexOf ('.' ), si2 = version .indexOf ('.' , version .indexOf ('.' ) + 1 );
62+ int si1 = version .indexOf ('.' );
63+ int si2 = version .indexOf ('.' , si1 + 1 );
64+ if (si1 < 0 || si2 < 0 ) {
65+ LOG .warning ("Unsupported NeoForge version: " + version );
66+ continue ;
67+ }
68+
6269 int majorVersion = Integer .parseInt (version .substring (0 , si1 ));
6370 if (majorVersion == 0 ) { // Snapshot version.
6471 mcVersion = version .substring (si1 + 1 , si2 );
6572 } else {
66- String ver = version .substring (0 , Integer .parseInt (version .substring (si1 + 1 , si2 )) == 0 ? si1 : si2 );
6773 if (majorVersion >= 26 ) {
74+ int si3 = version .indexOf ('.' , si2 + 1 );
75+
76+ if (si3 < 0 ) {
77+ LOG .warning ("Unsupported NeoForge version: " + version );
78+ continue ;
79+ }
80+
81+ String ver = Integer .parseInt (version .substring (si2 + 1 , si3 )) == 0
82+ ? version .substring (0 , si2 )
83+ : version .substring (0 , si3 );
84+
6885 int separator = version .indexOf ('+' );
69- mcVersion = separator < 0 ? ver : ver + "-" + version .substring (separator + 1 );
86+ if (separator < 0 )
87+ mcVersion = ver ;
88+ else
89+ mcVersion = ver + "-" + version .substring (separator + 1 );
7090 } else {
91+ String ver = Integer .parseInt (version .substring (si1 + 1 , si2 )) == 0
92+ ? version .substring (0 , si1 )
93+ : version .substring (0 , si2 );
7194 mcVersion = "1." + ver ;
7295 }
7396 }
@@ -89,14 +112,7 @@ public Task<?> refreshAsync() {
89112 });
90113 }
91114
92- private static final class OfficialAPIResult {
93- private final boolean isSnapshot ;
94-
95- private final List <String > versions ;
96-
97- public OfficialAPIResult (boolean isSnapshot , List <String > versions ) {
98- this .isSnapshot = isSnapshot ;
99- this .versions = versions ;
100- }
115+ @ JsonSerializable
116+ private record OfficialAPIResult (boolean isSnapshot , List <String > versions ) {
101117 }
102118}
0 commit comments