use std::{fs::create_dir_all, path::PathBuf}; use crate::{config::Config, errors::McError}; /// ~/.local/share/dml/minecraft pub fn minecraft_root(cfg: &Config) -> PathBuf { cfg.data_dir.join("minecraft") } pub fn assets_dir(cfg: &Config) -> PathBuf { minecraft_root(cfg).join("assets") } pub fn game_dir(cfg: &Config) -> PathBuf { minecraft_root(cfg) } pub fn ensure_dirs(cfg: &Config) -> Result<(), McError> { let root = minecraft_root(cfg); create_dir_all(&root)?; create_dir_all(root.join("versions"))?; create_dir_all(root.join("libraries"))?; create_dir_all(assets_dir(cfg))?; create_dir_all(assets_dir(cfg).join("indexes"))?; create_dir_all(assets_dir(cfg).join("objects"))?; create_dir_all(root.join("saves"))?; Ok(()) } 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!("{version}.jar"))) } pub fn library_file(cfg: &Config, rel_path: &str) -> Result { Ok(minecraft_root(cfg) .join("libraries") .join(rel_path)) } pub fn natives_dir(cfg: &Config, version: &str) -> PathBuf { version_dir(cfg, version).join("natives") }