2121import org .jackhuang .hmcl .download .VersionList ;
2222import org .jackhuang .hmcl .task .GetTask ;
2323import org .jackhuang .hmcl .task .Task ;
24+ import org .jackhuang .hmcl .util .gson .JsonSerializable ;
2425
2526import java .util .Collections ;
2627import 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