mc-snap 0.2.3

Declarative Minecraft server management. Pin Minecraft, loader, mods, Java, and configs in one YAML file; resolve, install, run, and ship a reproducible bundle.
Documentation
use crate::orchestrate;
use anyhow::Result;
use crate::paths::ProjectLayout;
use crate::yml::Snap;
use crate::runtime::{process, rcon};

pub async fn run() -> Result<()> {
    let layout = ProjectLayout::discover(&std::env::current_dir()?)?;
    let snap = Snap::from_path(&layout.yml())?;
    let pid = process::read_pid(&layout.pid_file());
    match pid {
        Some(p) if process::is_running(p) => {
            println!("{}: running (pid {p})", snap.server.name);
            if let Ok(pw) = orchestrate::read_rcon_password(&layout) {
                let addr = orchestrate::rcon_address(&snap);
                if let Ok(mut r) = rcon::Rcon::connect(&addr, &pw).await {
                    if let Ok(out) = r.exec("list").await {
                        println!("  {}", out.trim());
                    }
                }
            }
        }
        _ => {
            println!("{}: stopped", snap.server.name);
        }
    }
    Ok(())
}