@@ -15,7 +15,8 @@ use daedalus::modded::{
1515} ;
1616use daedalus:: get_hash;
1717use tracing:: { info, warn} ;
18- use semver:: Version ;
18+ // Note: Using lenient_semver instead of semver::Version to handle
19+ // non-standard NeoForge versions like "26.1.0.0-alpha.1+snapshot-1"
1920use serde:: { Deserialize , Serialize } ;
2021use std:: collections:: { HashMap , HashSet } ;
2122use std:: convert:: TryInto ;
@@ -73,17 +74,21 @@ pub async fn retrieve_data(
7374 let mut loaders = Vec :: new ( ) ;
7475
7576 for ( loader_version, new_forge) in loader_versions {
76- let version = Version :: parse ( & loader_version) ?;
77+ // Validate version format using lenient_semver (handles 4+ component versions like "26.1.0.0-alpha.1")
78+ if let Err ( e) = lenient_semver:: parse ( & loader_version) {
79+ warn ! ( "Skipping NeoForge version '{}' with invalid format: {}" , loader_version, e) ;
80+ continue ;
81+ }
7782
78- loaders. push ( ( loader_version, version , new_forge. to_string ( ) ) )
83+ loaders. push ( ( loader_version, new_forge. to_string ( ) ) )
7984 }
8085
8186 if !loaders. is_empty ( ) {
8287 version_futures. push ( async {
8388 let mut loaders_versions = Vec :: new ( ) ;
8489
8590 {
86- let loaders_futures = loaders. into_iter ( ) . map ( |( loader_version_full, _ , new_forge) | async {
91+ let loaders_futures = loaders. into_iter ( ) . map ( |( loader_version_full, new_forge) | async {
8792 let versions_mutex = Arc :: clone ( & old_versions) ;
8893 let visited_assets = Arc :: clone ( & visited_assets) ;
8994 let semaphore = Arc :: clone ( & semaphore) ;
0 commit comments