package Ġwire seg al . class yh ats . command Ċ Ċ import Ġnet . minecraft . command . Command Base Ċ import Ġnet . minecraft . command . Command Exception Ċ import Ġnet . minecraft . command . IC ommand Sender Ċ import Ġnet . minecraft . command . Wrong Usage Exception Ċ import Ġnet . minecraft . entity . Entity List Ċ import Ġnet . minecraft . entity . Entity Living Ċ import Ġnet . minecraft . entity . player . Entity Player MP Ċ import Ġnet . minecraft . item . ItemStack Ċ import Ġnet . minecraft . nbt . NBT Tag Compound Ċ import Ġnet . minecraft . server . Minecraft Server Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġwire seg al . class yh ats . Class y H ats Config Ċ import Ġwire seg al . class yh ats . Class y H ats Content Ċ import Ġwire seg al . class yh ats . capability . Capability Hat Container Ċ import Ġwire seg al . class yh ats . event . Capability Events Ċ Ċ /** Ċ Ġ* Ġ@ author ĠWire Se gal Ċ Ġ* ĠCreated Ġat Ġ 9 : 4 3 ĠPM Ġon Ġ 1 1 / 7 / 1 7 . Ċ Ġ*/ Ċ object ĠCommand Change Hat Ġ: ĠCommand Base () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetName () Ġ= Ġ" replace hat " ĊĊĠĠĠ Ġoverride Ġfun Ġget Required Permission Level () Ġ= Ġ 2 ĊĊĠĠĠ Ġprivate Ġval Ġmsg Fail Ġ= Ġ" commands . replace item . failed " ĊĠĠĠ Ġprivate Ġval Ġmsg Success Ġ= Ġ" commands . replace item . success " ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( server : ĠMinecraft Server , Ġsender : ĠICommand Sender , Ġargs : ĠArray < out ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ< Ġ 2 ) Ġthrow ĠWrong Usage Exception ( get Usage ()) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( args [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" equ ipped " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ< Ġ 3 ) Ġthrow ĠWrong Usage Exception ( get Usage (" equ ipped ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġget Entity ( server , Ġsender , Ġargs [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhat Id Ġ= Ġargs [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġif Ġ( hat Id Ġ!= Ġ" none ") ĠClass y H ats Content . H AT . of Hat ( hat Id ) Ġelse ĠItemStack . EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Ġis ĠEntity Player MP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcap Ġ= ĠCap ability Hat Container . get Capability ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Class y H ats Content . H AT . get Hat ( cap . equ ipped ) Ġ== ĠClass y H ats Content . H AT . get Hat ( stack )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCommand Exception ( msg Fail , Ġ" equ ipped ", Ġ 1 , Ġif Ġ( stack . isEmpty ) Ġ" Air " Ġelse Ġstack . text Component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcap . equ ipped Ġ= Ġstack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Command Listener ( sender , Ġthis , Ġmsg Success , Ġ" equ ipped ", Ġ 1 , Ġif Ġ( stack . isEmpty ) Ġ" Air " Ġelse Ġstack . text Component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCap ability Events . sync Data For ( player , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Entity List . getKey ( player ). toString () Ġin ĠClass y H ats Config . names Ġ&& Ġplayer Ġis ĠEntity Living ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġplayer . entity Data . getString ( Capability Events . custom Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Ġ== Ġhat Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCommand Exception ( msg Fail , Ġ" equ ipped ", Ġ 1 , Ġif Ġ( stack . isEmpty ) Ġ" Air " Ġelse Ġstack . text Component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . read From NBT ( player . writeTo NBT ( NBT Tag Compound ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hat Id Ġ== Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . entity Data . setString ( Capability Events . custom Key , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . entity Data . setString ( Capability Events . custom Key , Ġhat Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Command Listener ( sender , Ġthis , Ġmsg Success , Ġ" equ ipped ", Ġ 1 , Ġif Ġ( stack . isEmpty ) Ġ" Air " Ġelse Ġstack . text Component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCommand Exception ( msg Fail , Ġ" equ ipped ", Ġ 1 , Ġif Ġ( stack . isEmpty ) Ġ" Air " Ġelse Ġstack . text Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" page " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ< Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWrong Usage Exception ( get Usage (" page ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġget Player ( server , Ġsender , Ġargs [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcap Ġ= ĠCap ability Hat Container . get Capability ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġ" page \\ .( \\ d +) \\ .( \\ d +) ". to Regex (). match Ent ire ( args [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠCommand Exception ( get Usage (" invalid . page "), Ġargs [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhat Id Ġ= Ġargs [ 3 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhat Page Ġ= Ġmatch . group Values [ 1 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhat Idx Ġ= Ġmatch . group Values [ 2 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hat Page Ġ! in Ġ 0 Ġuntil Ġ 2 0 Ġ|| Ġhat Idx Ġ! in Ġ 0 Ġuntil Ġ 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCommand Exception ( get Usage (" invalid . page "), Ġargs [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġhat Page Ġ* Ġ 5 0 Ġ+ Ġhat Idx ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġif Ġ( hat Id Ġ!= Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass y H ats Content . H AT . of Hat ( hat Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItemStack . EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Class y H ats Content . H AT . get Hat ( cap . h ats . get Stack In Slot ( pos )) Ġ== ĠClass y H ats Content . H AT . get Hat ( stack )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCommand Exception ( msg Fail , Ġargs [ 2 ], Ġ 1 , Ġstack . text Component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcap . h ats . set Stack In Slot ( pos , Ġstack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Command Listener ( sender , Ġthis , Ġmsg Success , Ġargs [ 2 ], Ġ 1 , Ġstack . text Component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCap ability Events . sync Data For ( player , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠWrong Usage Exception ( get Usage ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Usage ( key : ĠString ? Ġ= Ġnull ) Ġ= Ġ" command . class yh ats . replace hat . usage " Ġ+ Ġif Ġ( key Ġ== Ġnull ) Ġ"" Ġelse Ġ".$ key " ĊĊĠĠĠ Ġoverride Ġfun Ġget Usage ( sender : ĠICommand Sender ?) Ġ= Ġget Usage () ĊĊĠĠĠ Ġprivate Ġval Ġpages Ġ= Ġ( 0 Ġuntil Ġ 2 0 ). flatMap Ġ{ Ġk Ġ-> Ġ( 0 Ġuntil Ġ 5 0 ). map Ġ{ Ġ" page .$ k .$ it " Ġ} Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tab Comp letions ( server : ĠMinecraft Server , Ġsender : ĠICommand Sender , Ġargs : ĠArray < String >, Ġtarget Pos : ĠBlockPos ?): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( args . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġreturn ĠCommand Base . get ListOf Strings Matching Last Word ( args , Ġ* server . online Player Names ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġreturn ĠCommand Base . get ListOf Strings Matching Last Word ( args , Ġ" equ ipped ", Ġ" page ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( args [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" equ ipped " Ġ-> Ġif Ġ( args . size Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCommand Base . get ListOf Strings Matching Last Word ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs , Ġ" none ", Ġ* Class y H ats Config . h ats . keys . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" page " Ġ-> Ġwhen Ġ( args . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġreturn ĠCommand Base . get ListOf Strings Matching Last Word ( args , Ġpages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġreturn ĠCommand Base . get ListOf Strings Matching Last Word ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs , Ġ" none ", Ġ* Class y H ats Config . h ats . keys . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Username Index ( args : ĠArray < String >, Ġindex : ĠInt ) Ġ= Ġindex Ġ== Ġ 0 Ċ } Ċ