fix: match os argument rules on apple silicon for old versions

This commit is contained in:
Julian Chang 2026-10-03 15:14:35 -04:00
parent a2a3e5b7b1
commit 7c304a2d3a
No known key found for this signature in database
2 changed files with 29 additions and 11 deletions

View file

@ -321,7 +321,6 @@ async fn start(
)?;
let mut jvm_args = arguments::java_arguments(
updated,
arg_map.get(&ArgumentType::Jvm).map(Vec::as_slice),
&natives,
&libraries,
@ -347,7 +346,6 @@ async fn start(
}
let mut mc_args = arguments::minecraft_arguments(
updated,
arg_map.get(&ArgumentType::Game).map(Vec::as_slice),
version_info.minecraft_arguments.as_deref(),
&account.access_token,

View file

@ -14,7 +14,6 @@ use oneclient_common::paths;
#[allow(clippy::too_many_arguments)]
pub fn java_arguments(
version_updated: bool,
arguments: Option<&[Argument]>,
natives_path: &Path,
libraries_path: &Path,
@ -28,7 +27,6 @@ pub fn java_arguments(
let mut parsed = Vec::new();
if let Some(args) = arguments {
parse_arguments(
version_updated,
args,
&mut parsed,
|a| {
@ -172,7 +170,6 @@ fn split_custom_args(raw: &str) -> Vec<String> {
#[allow(clippy::too_many_arguments)]
pub fn minecraft_arguments(
version_updated: bool,
args: Option<&[Argument]>,
legacy_args: Option<&str>,
access_token: &str,
@ -209,7 +206,6 @@ pub fn minecraft_arguments(
if let Some(args) = args {
parse_arguments(
version_updated,
args,
&mut parsed,
|arg| {
@ -562,7 +558,6 @@ pub fn get_library(libraries_path: &Path, library: &str, allow_missing: bool) ->
}
fn parse_arguments<ParseFn>(
version_updated: bool,
args: &[Argument],
parsed: &mut Vec<String>,
parse_function: ParseFn,
@ -580,7 +575,7 @@ where
}
}
Argument::Ruled { rules, value } => {
if validate_rules(rules, java_arch, version_updated) {
if validate_rules(rules, java_arch, true) {
match value {
ArgumentValue::Single(arg) => {
parsed.push(parse_function(&arg.replace(' ', DUMMY_REPLACE_NEWLINE))?);
@ -1032,7 +1027,6 @@ mod tests {
let natives = std::env::temp_dir();
let args = java_arguments(
false,
Some(&loader_jvm),
&natives,
&natives,
@ -1051,6 +1045,34 @@ mod tests {
assert!(args.iter().any(|a| a.starts_with("-Djava.library.path=")));
}
#[test]
fn an_osx_ruled_loader_flag_reaches_the_jvm_only_on_macos() {
let loader_jvm: Vec<interfrost::api::minecraft::Argument> = serde_json::from_str(
r#"["-Dfabric.fixPackageAccess=true", "-Dfabric.gameVersion=1.8.9",
{"rules": [{"action": "allow", "os": {"name": "osx"}}], "value": "-XstartOnFirstThread"}]"#,
)
.unwrap();
let natives = std::env::temp_dir();
let args = java_arguments(
Some(&loader_jvm),
&natives,
&natives,
"/libs/fabric-loader.jar",
"1.8.9",
2048,
String::new(),
"aarch64",
25,
)
.unwrap();
assert_eq!(
args.contains(&"-XstartOnFirstThread".to_string()),
cfg!(target_os = "macos")
);
}
#[test]
fn a_loader_game_argument_does_not_replace_the_legacy_string() {
let loader_game: Vec<interfrost::api::minecraft::Argument> =
@ -1058,7 +1080,6 @@ mod tests {
let dir = std::env::temp_dir();
let args = minecraft_arguments(
false,
Some(&loader_game),
Some("--username ${auth_player_name} --gameDir ${game_directory}"),
"token",
@ -1089,7 +1110,6 @@ mod tests {
let dir = std::env::temp_dir();
let args = minecraft_arguments(
false,
Some(&loader_game),
Some(
"--username ${auth_player_name} --gameDir ${game_directory} --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker",