diff --git a/pumpkin/src/commands/cmd_help.rs b/pumpkin/src/commands/cmd_help.rs index a2f3238a8..59788b221 100644 --- a/pumpkin/src/commands/cmd_help.rs +++ b/pumpkin/src/commands/cmd_help.rs @@ -1,74 +1,70 @@ -// use crate::commands::dispatcher::InvalidTreeError::InvalidConsumptionError; -// use crate::commands::dispatcher::{CommandDispatcher, InvalidTreeError}; -// use crate::commands::tree::{Command, CommandTree, ConsumedArgs, RawArgs}; -// use crate::commands::tree_builder::argument; -// use crate::commands::{CommandSender}; -// use pumpkin_core::text::TextComponent; - -// const NAMES: [&str; 3] = ["help", "h", "?"]; - -// const DESCRIPTION: &str = "Print a help message."; - -// const ARG_COMMAND: &str = "command"; - -// fn consume_arg_command(_src: &CommandSender, args: &mut RawArgs) -> Option { -// let s = args.pop()?; - -// let dispatcher = DISPATCHER.get_or_init(dispatcher_init); - -// dispatcher.get_tree(s).ok().map(|tree| tree.names[0].into()) -// } - -// fn parse_arg_command<'a>( -// consumed_args: &'a ConsumedArgs, -// dispatcher: &'a CommandDispatcher, -// ) -> Result<&'a CommandTree<'a>, InvalidTreeError> { -// let command_name = consumed_args -// .get(ARG_COMMAND) -// .ok_or(InvalidConsumptionError(None))?; - -// dispatcher -// .get_tree(command_name) -// .map_err(|_| InvalidConsumptionError(Some(command_name.into()))) -// } - -// pub(crate) fn init_command_tree<'a>() -> CommandTree<'a> { -// CommandTree::new(NAMES, DESCRIPTION) -// .with_child( -// argument(ARG_COMMAND, consume_arg_command).execute(&|sender, _, args| { -// let dispatcher = DISPATCHER.get_or_init(dispatcher_init); - -// let tree = parse_arg_command(args, dispatcher)?; - -// sender.send_message(TextComponent::text(&format!( -// "{} - {} Usage: {}", -// tree.names.join("/"), -// tree.description, -// tree -// ))); - -// Ok(()) -// }), -// ) -// .execute(&|sender, _, _args| { -// let dispatcher = DISPATCHER.get_or_init(dispatcher_init); - -// let mut keys: Vec<&str> = dispatcher.commands.keys().copied().collect(); -// keys.sort(); - -// for key in keys { -// let Command::Tree(tree) = &dispatcher.commands[key] else { -// continue; -// }; - -// sender.send_message(TextComponent::text(&format!( -// "{} - {} Usage: {}", -// tree.names.join("/"), -// tree.description, -// tree -// ))); -// } - -// Ok(()) -// }) -// } +use crate::commands::dispatcher::InvalidTreeError::InvalidConsumptionError; +use crate::commands::dispatcher::{CommandDispatcher, InvalidTreeError}; +use crate::commands::tree::{Command, CommandTree, ConsumedArgs, RawArgs}; +use crate::commands::tree_builder::argument; +use crate::commands::CommandSender; +use pumpkin_core::text::TextComponent; + +const NAMES: [&str; 3] = ["help", "h", "?"]; + +const DESCRIPTION: &str = "Print a help message."; + +const ARG_COMMAND: &str = "command"; + +fn consume_arg_command(_src: &CommandSender, _args: &mut RawArgs) -> Option { + // let s = args.pop()?; + + // dispatcher.get_tree(s).ok().map(|tree| tree.names[0].into()) + // TODO + None +} + +fn parse_arg_command<'a>( + consumed_args: &'a ConsumedArgs, + dispatcher: &'a CommandDispatcher, +) -> Result<&'a CommandTree<'a>, InvalidTreeError> { + let command_name = consumed_args + .get(ARG_COMMAND) + .ok_or(InvalidConsumptionError(None))?; + + dispatcher + .get_tree(command_name) + .map_err(|_| InvalidConsumptionError(Some(command_name.into()))) +} + +pub(crate) fn init_command_tree<'a>() -> CommandTree<'a> { + CommandTree::new(NAMES, DESCRIPTION) + .with_child( + argument(ARG_COMMAND, consume_arg_command).execute(&|sender, server, args| { + let tree = parse_arg_command(args, &server.command_dispatcher)?; + + sender.send_message(TextComponent::text(&format!( + "{} - {} Usage: {}", + tree.names.join("/"), + tree.description, + tree + ))); + + Ok(()) + }), + ) + .execute(&|sender, server, _args| { + let mut keys: Vec<&str> = server.command_dispatcher.commands.keys().copied().collect(); + keys.sort(); + + for key in keys { + let Command::Tree(tree) = &server.command_dispatcher.commands[key] else { + continue; + }; + + sender.send_message(TextComponent::text(&format!( + "{} - {} Usage: {}", + tree.names.join("/"), + tree.description, + tree + ))); + } + + Ok(()) + }) +} diff --git a/pumpkin/src/commands/mod.rs b/pumpkin/src/commands/mod.rs index e92cfdd79..4600ffbe9 100644 --- a/pumpkin/src/commands/mod.rs +++ b/pumpkin/src/commands/mod.rs @@ -67,7 +67,7 @@ pub fn default_dispatcher<'a>() -> CommandDispatcher<'a> { dispatcher.register(cmd_pumpkin::init_command_tree()); dispatcher.register(cmd_gamemode::init_command_tree()); dispatcher.register(cmd_stop::init_command_tree()); - // dispatcher.register(cmd_help::init_command_tree()); + dispatcher.register(cmd_help::init_command_tree()); dispatcher } diff --git a/pumpkin/src/commands/tree.rs b/pumpkin/src/commands/tree.rs index 6caf9c0d6..63243be59 100644 --- a/pumpkin/src/commands/tree.rs +++ b/pumpkin/src/commands/tree.rs @@ -44,7 +44,6 @@ pub(crate) struct CommandTree<'a> { pub(crate) nodes: Vec>, pub(crate) children: Vec, pub(crate) names: Vec<&'a str>, - #[expect(dead_code)] pub(crate) description: &'a str, }