package Ġca . all an wang . minecraft . toolbox . base Ċ Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Qualifier Ċ import Ġjavax . inject . Scope Ċ Ċ @ Scope Ċ @ Retention ( Annotation Retention . RUNTIME ) Ċ annotation Ġclass ĠPlugin Scope Ċ Ċ @ Qualifier Ċ @ Retention ( Annotation Retention . RUNTIME ) Ċ annotation Ġclass ĠRoot Node Ċ Ċ /** Ċ Ġ* ĠBase Ġnode Ġfor Ġhandling Ġplugin Ġinteractions . Ċ Ġ* ĠNodes Ġare Ġsing letons Ġwith Ġrespect Ġto Ġthe Ġplugin Ċ Ġ*/ Ċ @ Plugin Scope Ċ abstract Ġclass ĠM ct Node ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġaliases : ĠSet < String > Ġ= Ġempty Set () Ċ ) Ġ{ ĊĊĠĠĠ Ġopen Ġval Ġhelp Args : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġopen Ġval Ġhelp : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġ_ children : ĠMutable Map < String , ĠM ct Node > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLower Ġcase Ġchild Ġnames Ġ( no Ġaliases ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġchild Names : ĠMutable Set < String > Ġ= Ġsorted Set Of () ĊĊĠĠĠ Ġval Ġchildren : ĠMap < String , ĠM ct Node > Ġget () Ġ= Ġ_ children ĊĊĠĠĠ Ġprotected Ġfun Ġchildren ( var arg Ġnodes : ĠM ct Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnodes . forEach Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġnode . name . toLowerCase M ct () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Names . add ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ children [ key ] Ġ= Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . aliases . map Ġ{ Ġit . toLowerCase M ct () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġalias Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ children [ alias ] Ġ= Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġsuspend Ġfun Ġhandle Command ( context : ĠCommand Context ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcontext . args . first OrNull ()?. toLowerCase M ct () ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġ_ children [ key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild . handle Command ( context . child ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext . command () ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġnode Ġisn 't Ġroot Ġnode , Ġwe 'll Ġconsume Ġthe Ġcommand ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . depth Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Tab Complete ( context : ĠTab Complete Context ): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcontext . args . first OrNull ()?. toLowerCase M ct () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġ_ children [ key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild . handle Tab Complete ( context . child ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . tab Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġsuspend Ġfun ĠCommand Context . command () Ġ= ĠUnit ĊĊĠĠĠ Ġprotected Ġopen Ġfun ĠTab Complete Context . tab Complete (): ĠList < String >? Ġ= ĊĠĠĠĠĠĠĠ Ġdefault Tab Complete () ĊĊĠĠĠ Ġprotected Ġfun ĠTab Complete Context . default Tab Complete (): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġargs . first OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġcandidates Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Names . take If Ġ{ Ġit . isNotEmpty () Ġ} ?. toList () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( prefix . isNull OrEmpty ()) Ġcandidates Ġelse Ġcandidates . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . startsWith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignore Case Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }