/* Ċ Ġ* ĠPermissions Ex Ċ Ġ* ĠCopyright Ġ( C ) Ġz ml Ġand ĠPermissions Ex Ġcontributors Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġca . stell ard rift . permission sex . commands . command er Ċ Ċ import Ġca . stell ard rift . permission sex . Permissions Ex Ċ import Ġca . stell ard rift . permission sex . commands . Messages Ċ import Ġca . stell ard rift . permission sex . commands . parse . Command Exception Ċ import Ġca . stell ard rift . permission sex . util . Subject Identifier Ċ import Ġca . stell ard rift . permission sex . util . colored If Ne cessary Ċ import Ġca . stell ard rift . permission sex . util . component Ċ import Ġca . stell ard rift . permission sex . util . invoke Ċ import Ġca . stell ard rift . permission sex . util . join Ċ import Ġca . stell ard rift . permission sex . util . unary Minus Ċ import Ġca . stell ard rift . permission sex . util . unary Plus Ċ import Ġjava . util . Locale Ċ import Ġnet . ky ori . text . Component Ċ import Ġnet . ky ori . text . Text Component Ċ import Ġnet . ky ori . text . event . Hover Event Ċ import Ġnet . ky ori . text . format . TextColor Ċ Ċ /** Ċ Ġ* ĠInterface Ġimplemented Ġby Ġobjects Ġthat Ġcan Ġexecute Ġcommands Ġand Ġreceive Ġcommand Ġoutput Ċ Ġ*/ Ċ interface ĠCommand er Ġ{ ĊĠĠĠ Ġval Ġmanager : ĠPermissions Ex < *> ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġval Ġlocale : ĠLocale ĊĠĠĠ Ġval Ġsubject Identifier : ĠSubject Identifier ? ĊĊĠĠĠ Ġfun Ġhas Permission ( permission : ĠString ): ĠBoolean ĊĊĠĠĠ Ġfun Ġhas Permission ( permission : ĠPermission ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhas Permission ( permission . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġformatter : ĠMessage Formatter ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġmsg ( cb : ĠMessage Formatter .( send : Ġ( Component ) Ġ-> ĠUnit ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġformatter . cb Ġ{ Ġmsg ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġdebug ( cb : ĠMessage Formatter .( send : Ġ( Component ) Ġ-> ĠUnit ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġformatter . cb Ġ{ Ġdebug ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġerror ( err : ĠThrowable ? Ġ= Ġnull , Ġcb : ĠMessage Formatter .( send : Ġ( Component ) Ġ-> ĠUnit ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġformatter . cb Ġ{ Ġerror ( it , Ġerr ) Ġ} Ġ// ĠTODO : ĠDoes Ġthis Ġmake Ġthe Ġmost Ġsense ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSend Ġa Ġmessage Ġto Ġthis ĠCommand er . ĠThe Ġmessage Ġshould Ġbe Ġcolored Ġthe Ġappropriate Ġoutput Ġcolour Ġif Ġit Ġdoes Ġnot Ġyet Ġhave Ġa Ġcolour ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmsg ( text : ĠComponent ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSend Ġdebug Ġtext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġdebug ( text : ĠComponent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmsg ( text Ġcolored If Ne cessary ĠText Color . GRAY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġerror ( text : ĠComponent , Ġerr : ĠThrowable ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhover Text Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerr Ġ== Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! has Permission (" permission sex . show - stack trace - on - hover ") Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ(- " The Ġerror Ġthat Ġoccurred Ġwas :") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġerr . stack Trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( Text Component . newline ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( line . toString (). replace ("\ t ", Ġ" ĠĠĠ Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmsg ( if Ġ( hover Text Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġcolored If Ne cessary ĠText Color . RED ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( TextColor . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhover Event ( Hover Event . show Text ( hover Text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġmsg Pag inated ( ĊĠĠĠĠĠĠĠ Ġtitle : ĠComponent , ĊĠĠĠĠĠĠĠ Ġheader : ĠComponent ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtext : ĠIterable < Component > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmsg Ġ{ Ġsend Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Ġ= Ġ+" #" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( listOf ( marker , Ġtitle , Ġmarker ). join ( Text Component . space ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . forEach ( send ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( +" ######################## ##### ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġ@ Throws ( Command Exception :: class ) ĊĠĠĠ Ġfun Ġcheck Subject Permission ( ĊĠĠĠĠĠĠĠ Ġsubject : ĠSubject Identifier , ĊĠĠĠĠĠĠĠ Ġbase Permission : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Permission ("$ base Permission .${ subject . key }.${ subject . value }") Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( subject Ġ!= Ġsubject Identifier Ġ|| Ġ! has Permission ("$ base Permission . own ")) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCommand Exception ( Messages . EXECUT OR _ ERROR _ NO _ PERMISSION ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ