package Ġspace . max us . k paper . commands Ċ Ċ import Ġnet . ky ori . ad venture . text . Component Ċ import Ġorg . bukkit . command . Command Ċ import Ġorg . bukkit . command . Command Sender Ċ import Ġorg . bukkit . command . Tab Executor Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . plugin . java . Java Plugin Ċ import Ġorg . jetbrains . annotations . NotNull Ċ import Ġspace . max us . k paper . chat . component Ċ Ċ /** Ċ Ġ* ĠAbstract Ġclass Ġthat Ġis Ġused Ġfor Ġperforming Ġcommands Ċ Ġ*/ Ċ abstract Ġclass ĠCommand Perform er Ġ: ĠTab Executor Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠName Ġof Ġthe Ġcommand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġcommand Name : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġexecution Ġof Ġthe Ġcommand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġexecute ( ctx : ĠCommand Context ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġtab Ġcompletion Ġof Ġcommand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġtab Complete ( ctx : ĠCommand Context ): ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMessage Ġto Ġbe Ġshown Ġwhen Ġerror Ġoccurs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ NotNull ĊĠĠĠ Ġopen Ġvar ĠerrorMessage : ĠComponent Ġ= Ġcomponent Ġ{ Ġ+" An Ġerror Ġoccurred Ġwhile Ġperforming Ġthis Ġcommand ! ". color ( RED ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMessage Ġto Ġbe Ġshown Ġif Ġsender Ġis Ġnot Ġplayer , Ġand Ġit Ġis Ġrequired Ġ([ requires Player ]), Ġor Ġif Ġsender Ġdoes Ġnot Ġhave Ġsufficient Ġpermissions Ġ([ required Permissions ]) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ NotNull ĊĠĠĠ Ġopen Ġvar Ġpermission Message : ĠComponent Ġ= ĊĠĠĠĠĠĠĠ Ġcomponent Ġ{ Ġ+" You Ġdon 't Ġhave Ġsufficient Ġpermissions Ġto Ġexecute Ġthis Ġcommand ! ". color ( RED ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhether Ġthe Ġcommand Ġrequires Ġplayer Ġto Ġexecute ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġvar Ġrequires Player : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPermissions Ġrequired Ġto Ġuse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġvar Ġrequired Permissions : ĠList < String > Ġ= ĠlistOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġthe Ġcommand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġregister ( plugin : ĠJava Plugin ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġplugin . get Command ( command Name ) !! ĊĠĠĠĠĠĠĠ Ġcmd . set Executor ( this ) ĊĠĠĠĠĠĠĠ Ġcmd . tab Comp leter Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLiteral Ġcommand Ġargument Ġexec utors ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġliteral Execution Ġ= ĊĠĠĠĠĠĠĠ Ġhash Map Of < String , ĠPair < List < Argument Param . Argument Delegate <* >>, Ġ( ctx : ĠCommand Context ) Ġ-> ĠUnit >>() ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Command ( ĊĠĠĠĠĠĠĠ Ġcommand Sender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġstring : ĠString , ĊĠĠĠĠĠĠĠ Ġstrings : ĠArray < out ĠString >, ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( requires Player Ġ&& Ġcommand Sender Ġ! is ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Sender . sendMessage ( permission Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! required Permissions . all Ġ{ Ġperm Ġ-> Ġcommand Sender . has Permission ( perm ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Sender . sendMessage ( permission Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregistered Ġ= Ġhash Map Of < String , ĠList < Argument Param . Argument Delegate <* >> >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( literal Ġin Ġliteral Execution ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered [ literal . key ] Ġ= Ġliteral . value . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( Command Context ( command Sender , Ġstrings . toList (), Ġregistered )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Sender . sendMessage ( errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Tab Complete ( ĊĠĠĠĠĠĠĠ Ġcommand Sender : ĠCommand Sender , ĊĠĠĠĠĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠĠĠĠĠ Ġstring : ĠString , ĊĠĠĠĠĠĠĠ Ġstrings : ĠArray < out ĠString >, ĊĠĠĠ Ġ): ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtab Complete ( Command Context ( command Sender , Ġstrings . toList (), Ġhash Map Of ())) ĊĠĠĠ Ġ} Ċ }