Skip to content

Commit

Permalink
Added Help command back
Browse files Browse the repository at this point in the history
I just was to lazy and wanted to get it working fast, Now help is back
  • Loading branch information
Snowiiii committed Sep 7, 2024
1 parent 3d14e13 commit 870059a
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 76 deletions.
144 changes: 70 additions & 74 deletions pumpkin/src/commands/cmd_help.rs
Original file line number Diff line number Diff line change
@@ -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<String> {
// 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<String> {
// 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(())
})
}
2 changes: 1 addition & 1 deletion pumpkin/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
1 change: 0 additions & 1 deletion pumpkin/src/commands/tree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ pub(crate) struct CommandTree<'a> {
pub(crate) nodes: Vec<Node<'a>>,
pub(crate) children: Vec<usize>,
pub(crate) names: Vec<&'a str>,
#[expect(dead_code)]
pub(crate) description: &'a str,
}

Expand Down

0 comments on commit 870059a

Please sign in to comment.