From 72ddd7b7704f2087a52c9c0552446682918c513b Mon Sep 17 00:00:00 2001 From: Filip Wandzio Date: Thu, 22 Jan 2026 23:14:08 +0100 Subject: Implement basic game files download logic Implement core clap arguments Respect XDG_BASE_DIR Currently library extraction is broken because it assumes every instace has it's own library folder. This should be refactored so instances share libraries Signed-off-by: Filip Wandzio --- src/platform/mod.rs | 1 + src/platform/paths.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/platform/mod.rs create mode 100644 src/platform/paths.rs (limited to 'src/platform') diff --git a/src/platform/mod.rs b/src/platform/mod.rs new file mode 100644 index 0000000..8118b29 --- /dev/null +++ b/src/platform/mod.rs @@ -0,0 +1 @@ +pub mod paths; diff --git a/src/platform/paths.rs b/src/platform/paths.rs new file mode 100644 index 0000000..47aae9a --- /dev/null +++ b/src/platform/paths.rs @@ -0,0 +1,48 @@ +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") +} -- cgit v1.2.3