@@ -143,22 +143,45 @@ pub async fn fetch_neo(
143143 game_version : "1.20.1" . to_string ( ) , // All NeoForge Forge versions are for 1.20.1
144144 } )
145145 } ) . chain ( neo_versions. versioning . versions . version . into_iter ( ) . map ( |loader_version| {
146- let mut parts = loader_version. split ( '.' ) ;
146+ let mut parts = loader_version. split ( '+' ) ;
147+ let version = parts. next ( ) . ok_or_else (
148+ || crate :: ErrorKind :: InvalidInput ( format ! ( "Unable to find game version for NeoForge {loader_version}" ) )
149+ ) ?;
150+
151+ let mut version_parts = version. split ( '.' ) ;
147152
148- // NeoForge Forge versions are in this format: 20.2.29-beta, 20.6.119
153+ // NeoForge Forge versions are in this format: 20.2.29-beta, 20.6.119, 0.25w14craftmine.3-beta, 26.1.0.0-alpha.1+snapshot-1
149154 // Where the first number is the major MC version, the second is the minor MC version, and the third is the NeoForge version
150- let major = parts . next ( ) . ok_or_else (
155+ let major = version_parts . next ( ) . ok_or_else (
151156 || crate :: ErrorKind :: InvalidInput ( format ! ( "Unable to find major game version for NeoForge {loader_version}" ) )
152157 ) ?;
153158
154- let minor = parts . next ( ) . ok_or_else (
159+ let minor = version_parts . next ( ) . ok_or_else (
155160 || crate :: ErrorKind :: InvalidInput ( format ! ( "Unable to find minor game version for NeoForge {loader_version}" ) )
156161 ) ?;
157162
158- let game_version = if minor == "0" {
159- format ! ( "1.{major}" )
160- } else {
161- format ! ( "1.{major}.{minor}" )
163+ let game_version = match major {
164+ "0" => minor. to_string ( ) ,
165+ "20" |"21" => if minor == "0" {
166+ format ! ( "1.{major}" )
167+ } else {
168+ format ! ( "1.{major}.{minor}" )
169+ } ,
170+ _ => {
171+ let patch = version_parts. next ( ) . ok_or_else (
172+ || crate :: ErrorKind :: InvalidInput ( format ! ( "Unable to find patch game version for NeoForge {loader_version}" ) )
173+ ) ?;
174+ let v = if patch == "0" {
175+ format ! ( "{major}.{minor}" )
176+ } else {
177+ format ! ( "{major}.{minor}.{patch}" )
178+ } ;
179+ if let Some ( suffix) = parts. next ( ) {
180+ format ! ( "{v}-{suffix}" )
181+ } else {
182+ v
183+ }
184+ } ,
162185 } ;
163186
164187 Ok ( ForgeVersion {
0 commit comments