Skip to main content

conduit_cli/core/
loader_installer.rs

1use crate::core::events::CoreCallbacks;
2use crate::core::io::load_config;
3use crate::core::paths::CorePaths;
4use crate::loaders::{Loader, LoaderInfo};
5use std::error::Error;
6
7pub async fn install_loader(
8    paths: &CorePaths,
9    callbacks: &mut dyn CoreCallbacks,
10) -> Result<(), Box<dyn Error>> {
11    let config = load_config(paths)?;
12    let loader_info = LoaderInfo::parse(&config.loader);
13    let loader = match loader_info.name.as_str() {
14        "neoforge" => Loader::NeoForge,
15        _ => return Err(format!("Unsupported loader: {}", loader_info.name).into()),
16    };
17
18    let loader_version = if loader_info.version == "latest" {
19        loader
20            .get_latest_version(&config.mc_version, callbacks)
21            .await?
22    } else {
23        loader_info.version.clone()
24    };
25
26    let loader_dir = loader
27        .download_installer(
28            &config.mc_version,
29            &loader_version,
30            paths.project_dir(),
31            callbacks,
32        )
33        .await?;
34
35    let installer_path = loader.execute_installer(&loader_dir, callbacks).await?;
36
37    loader.post_install(&installer_path, paths.project_dir(), callbacks).await?;
38
39    Ok(())
40}