11use crate :: module:: Module ;
2- use pumpkin:: command:: args:: ConsumedArgs ;
2+ use pumpkin:: command:: args:: simple:: SimpleArgConsumer ;
3+ use pumpkin:: command:: args:: { Arg , ConsumedArgs } ;
34use pumpkin:: command:: dispatcher:: CommandError ;
4- use pumpkin:: command:: tree :: builder :: { argument , literal } ;
5+ use pumpkin:: command:: dispatcher :: CommandError :: CommandFailed ;
56use pumpkin:: command:: tree:: CommandTree ;
7+ use pumpkin:: command:: tree:: builder:: { argument, literal} ;
68use pumpkin:: command:: { CommandExecutor , CommandSender } ;
79use pumpkin:: server:: Server ;
810use pumpkin_util:: permission:: { Permission , PermissionDefault } ;
11+ use pumpkin_util:: text:: TextComponent ;
912use serde:: { Deserialize , Serialize } ;
1013use std:: collections:: HashSet ;
14+ use std:: pin:: Pin ;
1115
1216/// Represents handling locator mechanics within the system.
1317pub struct Locator {
@@ -32,9 +36,9 @@ impl Module for Locator {
3236 [ "locator" , "lc" ] ,
3337 "Allows players to personalise their locator bar" ,
3438 )
35- . then ( argument ( "color" , ArgumentC ) . execute ( LocatorExecutor ) )
36- . then ( argument ( "hex" , ArgumentC ) . execute ( LocatorExecutor ) )
37- . then ( literal ( "reset" ) . execute ( LocatorExecutor ) ) ] )
39+ . then ( argument ( "color" , SimpleArgConsumer ) . execute ( LocatorExecutor ) )
40+ . then ( argument ( "hex" , SimpleArgConsumer ) . execute ( LocatorExecutor ) )
41+ . then ( literal ( "reset" ) . execute ( LocatorExecutor ) ) ] )
3842 }
3943
4044 fn perms ( & self ) -> HashSet < Permission > {
@@ -53,16 +57,28 @@ impl CommandExecutor for LocatorExecutor {
5357 & self ,
5458 sender : & mut CommandSender ,
5559 _: & Server ,
56- _ : & ConsumedArgs < ' a > ,
57- ) -> Result < ( ) , CommandError > {
60+ args : & ConsumedArgs < ' a > ,
61+ ) -> Pin < Box < dyn Future < Output = Result < ( ) , CommandError > > + Send + ' a > > {
5862 Box :: pin ( async move {
59- let arg_0 = self . 0 ;
60- let arg_1 = self . 1 ;
61- let arg_2 = self . 2 ;
62- let player = sender. as_player ( ) . unwrap ( ) ;
63+ let player = match sender. as_player ( ) {
64+ Some ( p) => p,
65+ None => {
66+ return Err ( CommandFailed ( TextComponent :: text (
67+ "Only players can use this command" ,
68+ ) ) ) ;
69+ }
70+ } ;
6371
64- player // TODO
72+ // TODO: figure out the api to adjust the locator bar.
6573
74+ if let Some ( Arg :: Simple ( value) ) = args. get ( "color" ) {
75+ let color: & str = value;
76+ player;
77+ }
78+ if let Some ( Arg :: Simple ( value) ) = args. get ( "hex" ) {
79+ let hex: & str = value;
80+ player;
81+ }
6682 Ok ( ( ) )
6783 } )
6884 }
0 commit comments