Also refactor some things: - Remove cmd_ prefix from commands - Remove arg_ prefix from arguments
61 lines
1.6 KiB
Rust
61 lines
1.6 KiB
Rust
use async_trait::async_trait;
|
|
use pumpkin_protocol::client::play::{
|
|
ArgumentType, CommandSuggestion, StringProtoArgBehavior, SuggestionProviders,
|
|
};
|
|
|
|
use crate::{command::dispatcher::CommandError, server::Server};
|
|
|
|
use super::{
|
|
super::{
|
|
args::{ArgumentConsumer, RawArgs},
|
|
CommandSender,
|
|
},
|
|
Arg, FindArg, GetClientSideArgParser,
|
|
};
|
|
|
|
/// Should never be a permanent solution
|
|
#[allow(unused)]
|
|
pub struct SimpleArgConsumer;
|
|
|
|
impl GetClientSideArgParser for SimpleArgConsumer {
|
|
fn get_client_side_parser(&self) -> ArgumentType {
|
|
ArgumentType::String(StringProtoArgBehavior::SingleWord)
|
|
}
|
|
|
|
fn get_client_side_suggestion_type_override(&self) -> Option<SuggestionProviders> {
|
|
None
|
|
}
|
|
}
|
|
|
|
#[async_trait]
|
|
impl ArgumentConsumer for SimpleArgConsumer {
|
|
async fn consume<'a>(
|
|
&'a self,
|
|
_sender: &CommandSender<'a>,
|
|
_server: &'a Server,
|
|
args: &mut RawArgs<'a>,
|
|
) -> Option<Arg<'a>> {
|
|
Some(Arg::Simple(args.pop()?))
|
|
}
|
|
|
|
async fn suggest<'a>(
|
|
&'a self,
|
|
_sender: &CommandSender<'a>,
|
|
_server: &'a Server,
|
|
_input: &'a str,
|
|
) -> Result<Option<Vec<CommandSuggestion>>, CommandError> {
|
|
Ok(None)
|
|
}
|
|
}
|
|
|
|
impl<'a> FindArg<'a> for SimpleArgConsumer {
|
|
type Data = &'a str;
|
|
|
|
fn find_arg(args: &'a super::ConsumedArgs, name: &str) -> Result<Self::Data, CommandError> {
|
|
match args.get(name) {
|
|
Some(Arg::Simple(data)) => Ok(data),
|
|
_ => Err(CommandError::InvalidConsumption(Some(name.to_string()))),
|
|
}
|
|
}
|
|
}
|