You've already forked AstralRinth
forked from didirus/AstralRinth
96 lines
2.7 KiB
Rust
96 lines
2.7 KiB
Rust
use std::path::Path;
|
|
use std::process::{Command, Stdio};
|
|
|
|
mod args;
|
|
pub mod auth;
|
|
pub mod download;
|
|
pub mod java;
|
|
pub mod meta;
|
|
mod rules;
|
|
|
|
pub async fn launch_minecraft(version_name: &str, root_dir: &Path) {
|
|
let manifest = meta::fetch_version_manifest().await.unwrap();
|
|
|
|
let version = meta::fetch_version_info(
|
|
manifest
|
|
.versions
|
|
.iter()
|
|
.find(|x| x.id == version_name)
|
|
.unwrap(),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
|
|
//download_minecraft(&version, root_dir).await;
|
|
|
|
let auth = auth::login("username", "password", true).await;
|
|
|
|
let arguments = version.arguments.unwrap();
|
|
|
|
let profile = auth.selected_profile.unwrap();
|
|
|
|
let mut child = Command::new("java")
|
|
.args(args::get_jvm_arguments(
|
|
arguments
|
|
.get(&meta::ArgumentType::Jvm)
|
|
.map(|x| x.as_slice()),
|
|
&*root_dir.join("natives").join(&version.id),
|
|
&*args::get_class_paths(
|
|
&*root_dir.join("libraries"),
|
|
version.libraries.as_slice(),
|
|
&*root_dir
|
|
.join("versions")
|
|
.join(&version.id)
|
|
.join(format!("{}.jar", &version.id)),
|
|
),
|
|
))
|
|
.arg(version.main_class)
|
|
.args(args::get_minecraft_arguments(
|
|
arguments
|
|
.get(&meta::ArgumentType::Game)
|
|
.map(|x| x.as_slice()),
|
|
version.minecraft_arguments.as_deref(),
|
|
&*auth.access_token,
|
|
&*profile.name,
|
|
&profile.id,
|
|
&*version.id,
|
|
&version.asset_index.id,
|
|
root_dir,
|
|
&*root_dir.join("assets"),
|
|
&version.type_,
|
|
))
|
|
.current_dir(root_dir)
|
|
.stdout(Stdio::inherit())
|
|
.stderr(Stdio::inherit())
|
|
.spawn()
|
|
.unwrap();
|
|
|
|
child.wait().unwrap();
|
|
}
|
|
|
|
pub async fn download_minecraft(version: &meta::VersionInfo, root_dir: &Path) {
|
|
let assets_dir = meta::fetch_assets_index(&version).await.unwrap();
|
|
|
|
let legacy_dir = root_dir.join("resources");
|
|
|
|
futures::future::join3(
|
|
download::download_client(&*root_dir.join("versions"), &version),
|
|
download::download_assets(
|
|
&*root_dir.join("assets"),
|
|
if version.assets == "legacy" {
|
|
Some(legacy_dir.as_path())
|
|
} else {
|
|
None
|
|
},
|
|
&version.asset_index,
|
|
&assets_dir,
|
|
),
|
|
download::download_libraries(
|
|
&*root_dir.join("libraries"),
|
|
&*root_dir.join("natives").join(&version.id),
|
|
version.libraries.as_slice(),
|
|
),
|
|
)
|
|
.await;
|
|
}
|