From e945bfac77ba84497559a46cb869345225579cbe Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 17 Apr 2022 18:08:19 -0500 Subject: more tests and start adding redirects --- azalea-brigadier/src/builder/argument_builder.rs | 39 ++++++++++++++++++------ 1 file changed, 30 insertions(+), 9 deletions(-) (limited to 'azalea-brigadier/src/builder') diff --git a/azalea-brigadier/src/builder/argument_builder.rs b/azalea-brigadier/src/builder/argument_builder.rs index 11c0062c..ee6682dd 100644 --- a/azalea-brigadier/src/builder/argument_builder.rs +++ b/azalea-brigadier/src/builder/argument_builder.rs @@ -12,14 +12,15 @@ pub enum ArgumentBuilderType { /// A node that hasn't yet been built. #[derive(Clone)] pub struct ArgumentBuilder { - value: ArgumentBuilderType, - + arguments: BTreeMap>>>, children: BTreeMap>>>, literals: BTreeMap>>>, - arguments: BTreeMap>>>, - executes: Option) -> i32>>, + command: Option) -> i32>>, requirement: Rc) -> bool>, + target: Option>>>, + + value: ArgumentBuilderType, forks: bool, modifier: Option>>, } @@ -34,10 +35,11 @@ impl ArgumentBuilder { children: BTreeMap::new(), literals: BTreeMap::new(), arguments: BTreeMap::new(), - executes: None, + command: None, requirement: Rc::new(|_| true), forks: false, modifier: None, + target: None, } } @@ -62,7 +64,7 @@ impl ArgumentBuilder { where F: Fn(&CommandContext) -> i32 + 'static, { - self.executes = Some(Rc::new(f)); + self.command = Some(Rc::new(f)); self.clone() } @@ -74,6 +76,25 @@ impl ArgumentBuilder { self.clone() } + pub fn redirect(&mut self, target: Rc>>) -> Self { + self.forward(target, None, false) + } + + pub fn forward( + &mut self, + target: Rc>>, + modifier: Option>>, + fork: bool, + ) -> Self { + if !self.arguments.is_empty() { + panic!("Cannot forward a node with children"); + } + self.target = Some(target); + self.modifier = modifier; + self.forks = fork; + self.clone() + } + pub fn build(self) -> CommandNode { CommandNode { value: self.value, @@ -82,9 +103,9 @@ impl ArgumentBuilder { literals: self.literals, arguments: self.arguments, - command: self.executes.clone(), + command: self.command.clone(), requirement: self.requirement.clone(), - redirect: None, + redirect: self.target, forks: self.forks, modifier: self.modifier, } @@ -98,7 +119,7 @@ impl Debug for ArgumentBuilder { .field("children", &self.children) .field("literals", &self.literals) .field("arguments", &self.arguments) - .field("executes", &self.executes.is_some()) + .field("executes", &self.command.is_some()) // .field("requirement", &self.requirement) .field("forks", &self.forks) // .field("modifier", &self.modifier) -- cgit v1.2.3