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, /// The version of the project #[arg(short, long, conflicts_with = "pin")] pub ver: Option, /// 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, } #[derive(Args)] pub struct InitArgs { /// The path of the project (default: current directory) #[arg(short, long)] pub path: Option, /// Example target whose layout to apply #[arg(short, long)] pub target: Option, } #[derive(Args)] pub struct ComponentsArgs { /// The path of the project #[arg(short, long)] pub path: Option, /// The name of the component #[arg(short, long)] pub component: String, /// Import the path of the geo file. #[arg(short, long)] pub geo: Option, /// Import the path of the texture file. #[arg(short, long)] pub texture: Option, /// The item's identifier #[arg(short, long)] pub identifier: Option, } #[derive(Args)] pub struct DebugArgs { /// The path of the project (default: current directory) #[arg(short, long)] pub path: Option, }