Files
emod-cli/src/commands/mod.rs
Blank038 fd79a99477 feat(debug): 支持 --new 参数创建全新调试存档
添加  选项,启动调试时自动生成带时间戳的新存档目录
(格式 MC_DEV_WORLD_YYYYMMDD_HHMMSS)并持久化到 .mcdev.json。

- 新增 local_timestamp_compact() 跨平台本地时间格式化
- 新增 allocate_new_world() 更新配置并落盘
- 补充单元测试验证存档名格式与持久化正确性
2026-05-16 17:24:13 +08:00

99 lines
2.5 KiB
Rust

use clap::{Args, Parser, Subcommand, arg};
pub mod components;
pub mod create;
pub mod debug;
pub mod init;
pub mod release;
#[derive(Parser)]
#[command(
name = "emod-cli",
version = "1.0.0",
about = "Convenient Management of NetEase Minecraft Mod Project",
allow_external_subcommands = true,
long_about = None,
propagate_version = true
)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
/// Release a new version
Release(ReleaseArgs),
/// Create a new mod project
Create(CreateArgs),
/// Initialize standard empty directories for an existing project
Init(InitArgs),
/// Create a new component
Components(ComponentsArgs),
/// Launch NetEase Minecraft with debug MOD, IPC logging, and hot reload
Debug(DebugArgs),
}
#[derive(Args)]
pub struct ReleaseArgs {
/// The path of the project
#[arg(short, long)]
pub path: Option<String>,
/// The version of the project
#[arg(short, long, conflicts_with = "pin")]
pub ver: Option<String>,
/// Reuse the current version without auto-incrementing.
/// Useful when retrying after a failed release that already wrote new version files.
#[arg(short = 'P', long, conflicts_with = "ver")]
pub pin: bool,
}
#[derive(Args)]
pub struct CreateArgs {
/// The name of the mod
#[arg(short, long)]
pub name: String,
/// Example target, default example is 'default'
#[arg(short, long)]
pub target: Option<String>,
}
#[derive(Args)]
pub struct InitArgs {
/// The path of the project (default: current directory)
#[arg(short, long)]
pub path: Option<String>,
/// Example target whose layout to apply
#[arg(short, long)]
pub target: Option<String>,
}
#[derive(Args)]
pub struct ComponentsArgs {
/// The path of the project
#[arg(short, long)]
pub path: Option<String>,
/// The name of the component
#[arg(short, long)]
pub component: String,
/// Import the path of the geo file.
#[arg(short, long)]
pub geo: Option<String>,
/// Import the path of the texture file.
#[arg(short, long)]
pub texture: Option<String>,
/// The item's identifier
#[arg(short, long)]
pub identifier: Option<String>,
}
#[derive(Args)]
pub struct DebugArgs {
/// The path of the project (default: current directory)
#[arg(short, long)]
pub path: Option<String>,
/// Create a fresh debug world and persist it in .mcdev.json
#[arg(short = 'n', long = "new")]
pub new_world: bool,
}