mc-launcher-core 0.1.1

Rust building blocks for installing and launching Minecraft profiles.
Documentation
use std::process::Command;

use mc_launcher_core::prelude::*;

const VERSIONS: &[&str] = &["1.16.5", "1.18.2", "1.20.1", "26.1.2"];

fn main() -> mc_launcher_core::Result<()> {
    let minecraft_dir = std::env::current_dir()?.join(".minecraft");
    let launcher = Launcher::new(minecraft_dir);

    for minecraft_version in VERSIONS {
        launch(&launcher, InstallRequest::vanilla(*minecraft_version))?;
        launch(
            &launcher,
            InstallRequest {
                minecraft_version: (*minecraft_version).to_string(),
                loader: Some(LoaderSpec::Fabric {
                    version: LoaderVersion::LatestStable,
                }),
                java: JavaInstallPolicy::Auto,
            },
        )?;
    }

    Ok(())
}

fn launch(launcher: &Launcher, request: InstallRequest) -> mc_launcher_core::Result<()> {
    let install = launcher.install(request)?;
    let version = launcher.load_version(&install.version_id)?;
    let command = launcher.build_launch_command_from_version(
        &version,
        LaunchOptions {
            account: Account::offline("Steve"),
            ..Default::default()
        },
    )?;

    let status = Command::new(&command.executable)
        .args(&command.args)
        .current_dir(&command.working_dir)
        .status()?;

    if status.success() {
        Ok(())
    } else {
        Err(LauncherError::Other {
            message: format!("{} exited with {status}", install.version_id),
        })
    }
}