Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions src/actions/mmc_pack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<dyn Writer> = if generate_zip {
info!("Generating instance zip...");
Expand Down Expand Up @@ -243,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();
Expand Down Expand Up @@ -287,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)?)
}

Expand Down
70 changes: 26 additions & 44 deletions src/net/meta.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::HashMap;

use serde::Deserialize;
use serde::{Deserialize, Serialize};
use serde_json::Value;

use crate::errors::InstallerError;
Expand All @@ -17,8 +17,6 @@ pub struct LoaderVersion {
maven: String,
separator: String,
build: i32,
#[serde(rename(deserialize = "versionNoSide"))]
version_no_side: String,
}

impl LoaderVersion {
Expand Down Expand Up @@ -58,13 +56,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 {
Expand Down Expand Up @@ -101,9 +92,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::<Vec<ProfileJsonLibrary>>()
.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(
Expand Down Expand Up @@ -135,6 +140,9 @@ pub async fn fetch_launch_json(
}
}
}
for upgrade in library_upgrades {
libraries.push(serde_json::to_value(upgrade)?);
}
}
Ok((version_id, text))
}
Expand Down Expand Up @@ -173,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()
Expand All @@ -200,45 +206,21 @@ struct ProfileJson {
libraries: Vec<ProfileJsonLibrary>,
}

#[derive(Deserialize)]
#[derive(Deserialize, Serialize)]
pub struct ProfileJsonLibrary {
pub name: String,
pub url: String,
}

pub async fn fetch_profile_libraries(
version: &IntermediaryVersion,
loader_type: &LoaderType,
loader_version: &LoaderVersion,
) -> Result<Vec<ProfileJsonLibrary>, 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::<ProfileJson>()
.json::<Vec<ProfileJsonLibrary>>()
.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)
}
13 changes: 13 additions & 0 deletions src/ui/gui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -277,6 +285,11 @@ impl App {
})
.map(|v| v.id.clone())
.collect::<Vec<String>>();
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) {
Expand Down
Loading