diff --git a/packages/app-lib/src/launcher/args.rs b/packages/app-lib/src/launcher/args.rs index 7e615dd828e..3906ad26393 100644 --- a/packages/app-lib/src/launcher/args.rs +++ b/packages/app-lib/src/launcher/args.rs @@ -55,15 +55,11 @@ pub fn get_class_paths( return None; } - if !library.include_in_classpath { + if !library.include_in_classpath || library.is_native() { return None; } - Some(get_lib_path( - libraries_path, - &library.name, - library.native_classifier(java_arch).is_some(), - )) + Some(get_lib_path(libraries_path, &library.name, false)) })) .process_results(|iter| { iter.unique().join(classpath_separator(java_arch)) diff --git a/packages/app-lib/src/launcher/download.rs b/packages/app-lib/src/launcher/download.rs index a22bb2a07ef..82266465e4b 100644 --- a/packages/app-lib/src/launcher/download.rs +++ b/packages/app-lib/src/launcher/download.rs @@ -890,7 +890,16 @@ pub async fn download_libraries( return Ok(()); } - // When a library has natives, we only need to download such natives, as PrismLauncher does + if library.is_native() + && library.native_classifier(java_arch).is_none() + { + tracing::trace!( + "Skipped incompatible native library {}", + &library.name + ); + return Ok(()); + } + if let Some((url, sha1, size)) = library.native_download(java_arch)? { diff --git a/packages/app-lib/src/launcher/library.rs b/packages/app-lib/src/launcher/library.rs index 649b645bf44..6143472f6fd 100644 --- a/packages/app-lib/src/launcher/library.rs +++ b/packages/app-lib/src/launcher/library.rs @@ -6,6 +6,9 @@ use minecraft_meta_manifest::{ use url::Url; pub(crate) trait LibraryExt { + /// Whether this library declares platform-specific native classifiers. + fn is_native(&self) -> bool; + /// Native classification does not depend on classifier download metadata. fn native_classifier(&self, java_arch: &str) -> Option; @@ -17,6 +20,12 @@ pub(crate) trait LibraryExt { } impl LibraryExt for Library { + fn is_native(&self) -> bool { + self.natives + .as_ref() + .is_some_and(|natives| !natives.is_empty()) + } + /// Native classification does not depend on classifier download metadata. fn native_classifier(&self, java_arch: &str) -> Option { let natives = self.natives.as_ref()?;