use std::{fs, path::PathBuf}; use directories::ProjectDirs; use crate::{config::Config, errors::McError}; fn project_dirs() -> ProjectDirs { ProjectDirs::from("com", "dml", "dml").expect("failed to determine project directories") } /// Root Minecraft directory pub fn minecraft_root(_cfg: &Config) -> PathBuf { project_dirs().data_dir().join("minecraft") } /* ---------------- setup ---------------- */ pub fn ensure_dirs(cfg: &Config) -> Result<(), McError> { let root = minecraft_root(cfg); fs::create_dir_all(root.join("versions"))?; fs::create_dir_all(root.join("libraries"))?; fs::create_dir_all(root.join("assets"))?; Ok(()) } /* ---------------- versions ---------------- */ pub fn version_dir(cfg: &Config, version: &str) -> PathBuf { minecraft_root(cfg).join("versions").join(version) } pub fn client_jar(cfg: &Config, version: &str) -> Result { Ok(version_dir(cfg, version).join(format!("{}.jar", version))) } /* ---------------- libraries ---------------- */ pub fn library_file(cfg: &Config, rel_path: &str) -> Result { Ok(minecraft_root(cfg) .join("libraries") .join(rel_path)) } /* ---------------- natives ---------------- */ pub fn natives_dir(cfg: &Config, version: &str) -> PathBuf { version_dir(cfg, version).join("natives") }