From fec7a2bfedc562306523b9d3c51b97e376dc32d9 Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 9 Jan 2022 23:46:23 -0600 Subject: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --- azalea-brigadier/src/builder/argument_builder.rs | 7 +- .../src/builder/required_argument_builder.rs | 120 +++++++++++++++++++++ 2 files changed, 123 insertions(+), 4 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 8a64a9e4..19706a22 100644 --- a/azalea-brigadier/src/builder/argument_builder.rs +++ b/azalea-brigadier/src/builder/argument_builder.rs @@ -10,7 +10,7 @@ where T: ArgumentBuilder, { arguments: RootCommandNode, - command: dyn Command, + command: Option>, requirement: dyn Fn(&S) -> bool, target: Option>, modifier: Option>, @@ -18,7 +18,6 @@ where } pub trait ArgumentBuilder { - fn this() -> T; fn build(self) -> dyn CommandNode; } @@ -92,11 +91,11 @@ where Ok(self) } - pub fn redirect(&self) -> Option<&dyn CommandNode> { + pub fn get_redirect(&self) -> Option<&dyn CommandNode> { self.target.as_ref() } - pub fn redirect_modifier(&self) -> Option<&dyn RedirectModifier> { + pub fn get_redirect_modifier(&self) -> Option<&dyn RedirectModifier> { self.modifier.as_ref() } diff --git a/azalea-brigadier/src/builder/required_argument_builder.rs b/azalea-brigadier/src/builder/required_argument_builder.rs index e69de29b..3ec613c4 100644 --- a/azalea-brigadier/src/builder/required_argument_builder.rs +++ b/azalea-brigadier/src/builder/required_argument_builder.rs @@ -0,0 +1,120 @@ +use crate::{ + arguments::argument_type::ArgumentType, + suggestion::suggestion_provider::SuggestionProvider, + tree::{argument_command_node::ArgumentCommandNode, command_node::BaseCommandNode}, +}; + +use super::argument_builder::BaseArgumentBuilder; + +// private RequiredArgumentBuilder(final String name, final ArgumentType type) { +// this.name = name; +// this.type = type; +// } + +// public static RequiredArgumentBuilder argument(final String name, final ArgumentType type) { +// return new RequiredArgumentBuilder<>(name, type); +// } + +// public RequiredArgumentBuilder suggests(final SuggestionProvider provider) { +// this.suggestionsProvider = provider; +// return getThis(); +// } + +// public SuggestionProvider getSuggestionsProvider() { +// return suggestionsProvider; +// } + +// @Override +// protected RequiredArgumentBuilder getThis() { +// return this; +// } + +// public ArgumentType getType() { +// return type; +// } + +// public String getName() { +// return name; +// } + +// public ArgumentCommandNode build() { +// final ArgumentCommandNode result = new ArgumentCommandNode<>(getName(), getType(), getCommand(), getRequirement(), getRedirect(), getRedirectModifier(), isFork(), getSuggestionsProvider()); + +// for (final CommandNode argument : getArguments()) { +// result.addChild(argument); +// } + +// return result; +// } + +pub struct RequiredArgumentBuilder { + // private final String name; + // private final ArgumentType type; + // private SuggestionProvider suggestionsProvider = null; + name: String, + type_: dyn ArgumentType, + suggestions_provider: Option>, + + pub base: BaseArgumentBuilder, +} + +impl RequiredArgumentBuilder { + pub fn new(name: String, type_: dyn ArgumentType) -> Self { + Self { + name, + type_, + suggestions_provider: None, + base: BaseArgumentBuilder::new(name, type_), + } + } + + pub fn argument(name: String, type_: dyn ArgumentType) -> Self { + Self::new(name, type_) + } + + pub fn suggests(mut self, provider: dyn SuggestionProvider) -> Self { + self.suggestions_provider = Some(provider); + self + } + + pub fn suggestions_provider(&self) -> Option<&dyn SuggestionProvider> { + self.suggestions_provider.as_ref() + } + + pub fn get_type(&self) -> &dyn ArgumentType { + &self.type_ + } + + pub fn name(&self) -> &str { + &self.name + } + + // final ArgumentCommandNode result = new ArgumentCommandNode<>(getName(), getType(), getCommand(), getRequirement(), getRedirect(), getRedirectModifier(), isFork(), getSuggestionsProvider()); + + // for (final CommandNode argument : getArguments()) { + // result.addChild(argument); + // } + + // return result; + pub fn build(self) -> ArgumentCommandNode { + let result = ArgumentCommandNode { + name: self.name, + type_: &self.type_, + base: BaseCommandNode { + command: self.base.command, + requirement: self.base.requirement, + redirect: self.base.redirect, + modifier: self.base.modifier, + forks: self.base.forks, + ..BaseCommandNode::default() + }, + custom_suggestions: self.base.custom_suggestions, + }; + + for argument in self.base.arguments { + result.add_child(argument); + } + + result + } +} -- cgit v1.2.3