From 3ccf99ac5a2d3b2aaaba26de922b5dcd80ed82e3 Mon Sep 17 00:00:00 2001 From: moehreag Date: Fri, 5 Sep 2025 13:59:39 +0200 Subject: [PATCH 1/3] use separate meta libraries endpoint --- src/actions/mmc_pack.rs | 3 +- src/net/meta.rs | 66 ++++++++++++++++------------------------- 2 files changed, 27 insertions(+), 42 deletions(-) diff --git a/src/actions/mmc_pack.rs b/src/actions/mmc_pack.rs index 0977ef9..6541260 100644 --- a/src/actions/mmc_pack.rs +++ b/src/actions/mmc_pack.rs @@ -82,8 +82,7 @@ pub async fn install( info!("Fetching library information..."); - let extra_libs = - meta::fetch_profile_libraries(&intermediary_version, &loader_type, &loader_version).await?; + let extra_libs = meta::fetch_profile_libraries(&intermediary_version).await?; let mut zip: Box = if generate_zip { info!("Generating instance zip..."); diff --git a/src/net/meta.rs b/src/net/meta.rs index 04995d5..21225b3 100644 --- a/src/net/meta.rs +++ b/src/net/meta.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use serde_json::Value; use crate::errors::InstallerError; @@ -58,13 +58,6 @@ impl LoaderType { LoaderType::Quilt => "org.quiltmc.quilt-loader", } } - - pub fn get_maven_name_start(&self) -> &str { - match self { - LoaderType::Fabric => "net.fabricmc:fabric-loader", - LoaderType::Quilt => "org.quiltmc:quilt-loader", - } - } } impl GameSide { @@ -101,9 +94,23 @@ pub async fn fetch_launch_json( "Launch Json does not contain 'id' key!".to_string(), ))? .to_owned(); - if let Some(libraries) = text["libraries"].as_object_mut() { - for lib in libraries { - let lib_mut = lib.1.as_object_mut().unwrap(); + + let library_upgrades = super::CLIENT + .get( + META_URL.to_owned() + + &format!( + "/v3/versions/libraries/{}", + version.get_id(&side).await?.as_str() + ), + ) + .send() + .await? + .json::>() + .await?; + + if let Some(libraries) = text["libraries"].as_array_mut() { + for lib in &mut *libraries { + let lib_mut = lib.as_object_mut().unwrap(); if let Some(name) = lib_mut.clone()["name"].as_str() { if name.starts_with("net.fabricmc:intermediary") { lib_mut.insert( @@ -135,6 +142,9 @@ pub async fn fetch_launch_json( } } } + for upgrade in library_upgrades { + libraries.push(serde_json::to_value(upgrade)?); + } } Ok((version_id, text)) } @@ -200,7 +210,7 @@ struct ProfileJson { libraries: Vec, } -#[derive(Deserialize)] +#[derive(Deserialize, Serialize)] pub struct ProfileJsonLibrary { pub name: String, pub url: String, @@ -208,37 +218,13 @@ pub struct ProfileJsonLibrary { pub async fn fetch_profile_libraries( version: &IntermediaryVersion, - loader_type: &LoaderType, - loader_version: &LoaderVersion, ) -> Result, InstallerError> { - let profile = super::CLIENT - .get( - META_URL.to_owned() - + &format!( - "/v3/versions/{}-loader/{}/{}/profile/json", - loader_type.get_name(), - version.version, - loader_version.version - ), - ) + let library_upgrades = super::CLIENT + .get(META_URL.to_owned() + &format!("/v3/versions/libraries/{}", version.version)) .send() .await? - .json::() + .json::>() .await?; - let mut out = Vec::new(); - let mut loader_found = false; - - for lib in profile.libraries { - if loader_found { - out.push(lib); - continue; - } - - if lib.name.starts_with(loader_type.get_maven_name_start()) { - loader_found = true; - } - } - - Ok(out) + Ok(library_upgrades) } From 9f5c82ec7fecd93d69afdec9183b15f924421bce Mon Sep 17 00:00:00 2001 From: moehreag Date: Mon, 8 Sep 2025 21:38:42 +0200 Subject: [PATCH 2/3] add jvm args to mmc launch jsons --- src/actions/mmc_pack.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/actions/mmc_pack.rs b/src/actions/mmc_pack.rs index 6541260..aec0a29 100644 --- a/src/actions/mmc_pack.rs +++ b/src/actions/mmc_pack.rs @@ -242,6 +242,7 @@ async fn get_mmc_launch_json( .as_str() .unwrap_or("") .to_owned(); + if let Some(game_arguments) = vanilla_json["arguments"]["game"].as_array() { if !game_arguments.is_empty() { let mut combined = String::new(); @@ -286,6 +287,12 @@ async fn get_mmc_launch_json( .insert("+traits".to_owned(), json!(traits)); } + if let Some(jvm_arguments) = vanilla_json["arguments"]["jvm"].as_array() { + json.as_object_mut() + .unwrap() + .insert("+jvmArgs".to_owned(), json!(jvm_arguments)); + } + Ok(serde_json::to_string_pretty(&json)?) } From 6427f582cc8d30fdbb2b4bda6ecb34acd6a6f21f Mon Sep 17 00:00:00 2001 From: moehreag Date: Sun, 12 Oct 2025 20:15:14 +0200 Subject: [PATCH 3/3] adjust for meta update - add additional logging to gui code --- src/net/meta.rs | 4 ---- src/ui/gui.rs | 13 +++++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/net/meta.rs b/src/net/meta.rs index 21225b3..f24b58e 100644 --- a/src/net/meta.rs +++ b/src/net/meta.rs @@ -17,8 +17,6 @@ pub struct LoaderVersion { maven: String, separator: String, build: i32, - #[serde(rename(deserialize = "versionNoSide"))] - version_no_side: String, } impl LoaderVersion { @@ -183,8 +181,6 @@ pub struct IntermediaryVersion { pub version: String, stable: bool, pub maven: String, - #[serde(rename(deserialize = "versionNoSide"))] - pub version_no_side: String, } pub async fn fetch_intermediary_versions() diff --git a/src/ui/gui.rs b/src/ui/gui.rs index a2ba104..4a84824 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -134,10 +134,18 @@ impl App { "Loaded {} Minecraft versions", available_minecraft_versions.len() ); + info!( + "Loaded {} Intermediary versions", + available_intermediary_versions.len() + ); if let Ok(versions) = net::meta::fetch_loader_versions().await { available_loader_versions = versions; } + info!( + "Loaded versions for {} loaders", + available_loader_versions.len() + ); let mut app = App { mode: Mode::Client, @@ -277,6 +285,11 @@ impl App { }) .map(|v| v.id.clone()) .collect::>(); + info!( + "Filtered {} valid minecraft versions to display out of {} total", + self.filtered_minecraft_versions.len(), + self.available_minecraft_versions.len() + ); } fn add_loader(&mut self, ui: &mut egui::Ui) {