package Ġme . b scal . run ec raft . gui . run ec r after Ċ Ċ import Ġcom . github . st ef v ans ch ie . inventory framework . gui . Gui Item Ċ import Ġcom . github . st ef v ans ch ie . inventory framework . gui . type . Chest Gui Ċ import Ġcom . github . st ef v ans ch ie . inventory framework . pane . Static Pane Ċ import Ġkotlinx . serialization . decode From ByteArray Ċ import Ġkotlinx . serialization . encode To ByteArray Ċ import Ġkotlinx . serialization . protobuf . Proto Buf Ċ import Ġme . b scal . run ec raft . Rune Ċ import Ġme . b scal . run ec raft . Rune Craft Ċ import Ġme . b scal . run ec raft . gui . Gui Items Ċ import Ġme . b scal . run ec raft . items . rune items . Rune Craft Items Ċ import Ġnet . ax ay . k sp ig ot . chat . K Colors Ċ import Ġnet . ax ay . k sp ig ot . items . item Stack Ċ import Ġorg . bukkit . Material Ċ import Ġorg . bukkit . Name spaced Key Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . inventory . ItemStack Ċ import Ġorg . bukkit . persistence . Persistent DataType Ċ import Ġjava . util . logging . Level Ċ Ċ /** Ċ Ġ* ĠGUI Ġinterface Ġfor Ġmanaging Ġrun es Ġon Ġan ĠItemStack Ċ Ġ*/ Ċ class ĠCr after GUI ( val ĠItemStack : ĠItemStack , Ġval ĠSize : ĠInt ) Ċ { Ċ ĉ comp anion Ġobject Ċ ĉ { Ċĉ ĉ private Ġval ĠItemStack Run es Key Ġ= ĠName spaced Key ( Rune Craft . INSTANCE , Ġ" item _ run es ") ĊĊĉ ĉ fun ĠSlot To Index ( slot : ĠInt ): ĠInt Ċĉ ĉ { Ċĉĉ ĉ return Ġwhen Ġ( slot ) Ċĉĉ ĉ { Ċĉĉĉĉ 1 3 Ġ-> Ġ 0 Ċĉĉĉĉ 2 2 Ġ-> Ġ 1 Ċĉĉĉĉ 3 1 Ġ-> Ġ 2 Ċĉĉĉĉ 4 0 Ġ-> Ġ 3 Ċĉĉĉ ĉ else Ġ-> Ġ- 1 Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ private Ġval Ġm _ Gui : ĠC hest Gui Ġ= ĠC hest Gui ( 6 , Ġ"${ K Colors . DARK SL ATE GRAY } Item 's ĠRun es ") Ċ ĉ late init Ġvar Ġm _ Run es : ĠArrayList < Rune >; Ġprivate Ġset ĊĊ ĉ fun ĠOpen ( player : ĠPlayer ) Ċ ĉ { Ċĉ ĉ Deserialize () Ċĉ ĉ Rune Craft . Log Debug ( Level . INFO , Ġ"$ m _ Run es ") ĊĊĉ ĉ val Ġbackground Ġ= ĠStatic Pane ( 9 , Ġ 6 ) Ċĉ ĉ background . fill With ( Gui Items . Separator Icon ) Ċĉ ĉ background . addItem ( Create Help Icon (), Ġ 0 , Ġ 0 ) ĊĊĉ ĉ for Ġ( i Ġin Ġ 0 .. Size . coerce At Most ( 4 )) Ċĉ ĉ { Ċĉĉ ĉ if Ġ( i Ġ< Ġm _ Run es . size ) Ġbackground . addItem ( Load Rune Icon ( m _ Run es [ i ]), Ġ 4 , Ġi Ġ+ Ġ 1 ) Ċĉĉ ĉ else Ġbackground . removeItem ( 4 , Ġi Ġ+ Ġ 1 ) Ċĉ ĉ } ĊĊĉ ĉ background . setOn Click Ġ{ Ċĉĉ ĉ it . is Cancelled Ġ= Ġtrue Ċĉĉ ĉ if Ġ( it . currentItem Ġ== Ġnull Ġ&& Ġit . cursor Ġ!= Ġnull ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġcursor : ĠItemStack Ġ= Ġit . cursor !! Ċĉĉĉ ĉ Add Rune To Stack ( player , Ġcursor . clone (), Ġit . slot ) Ċĉĉĉ ĉ if Ġ( cursor . amount Ġ< Ġ 2 ) Ġit . cursor Ġ= Ġnull Ċĉĉĉ ĉ else Ġcursor . amount Ġ= Ġcursor . amount Ġ- Ġ 1 Ċĉĉĉ ĉ Serialize () Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ m _ Gui . add Pane ( background ) ĊĊĉ ĉ m _ Gui . setOn Close Ġ{ Ċĉĉ ĉ Serialize () Ċĉ ĉ } Ċĉ ĉ m _ Gui . show ( player ) Ċ ĉ } ĊĊ ĉ fun ĠSerialize () Ċ ĉ { Ċĉ ĉ val Ġmeta Ġ= ĠItemStack . item Meta Ċĉ ĉ meta . persistent Data Container . set ( ItemStack Run es Key , ĠPersistent DataType . BYTE _ ARRAY , ĠProto Buf . encode To ByteArray ( m _ Run es )) Ċĉ ĉ ItemStack . item Meta Ġ= Ġmeta Ċ ĉ } ĊĊ ĉ fun ĠDeserialize () Ċ ĉ { Ċĉ ĉ if Ġ( ItemStack . has Item Meta ()) Ċĉ ĉ { Ċĉĉ ĉ val Ġbytes Ġ= ĠItemStack . item Meta . persistent Data Container . get ( ItemStack Run es Key , ĠPersistent DataType . BYTE _ ARRAY ) Ċĉĉ ĉ val Ġlist : ĠArrayList < Rune > Ġ= Ċĉĉĉ ĉ if Ġ( bytes Ġ== Ġnull Ġ|| Ġbytes . isEmpty ()) ĠArrayList () Ġelse ĠProto Buf . decode From ByteArray ( bytes ) Ġas ĠArrayList < Rune > Ċĉĉ ĉ m _ Run es Ġ= Ġif Ġ( list . isEmpty ()) ĠArrayList () Ġelse Ġlist Ċĉĉ ĉ return Ċĉ ĉ } Ċĉ ĉ m _ Run es Ġ= ĠArrayList () Ċ ĉ } ĊĊ ĉ private Ġfun ĠCreate Help Icon (): ĠGui Item Ċ ĉ { Ċĉ ĉ return ĠGui Item ( item Stack ( Material . BOOK ) Ġ{ ĊĊĉ ĉ }) Ċ ĉ } ĊĊ ĉ private Ġfun ĠLoad Rune Icon ( rune : ĠRun e ): ĠGui Item Ċ ĉ { Ċĉ ĉ return ĠGui Item ( Rune Craft Items . CAR VED _ RUN E . New Stack ( rune )) Ċ ĉ } ĊĊ ĉ private Ġfun ĠAdd Rune To Stack ( player : ĠPlayer , Ġitem Stack : ĠItemStack , Ġslot : ĠInt ) Ċ ĉ { Ċĉ ĉ if Ġ( Rune Craft Items . CAR VED _ RUN E . Is ( item Stack )) Ċĉ ĉ { Ċĉĉ ĉ val Ġx : ĠInt Ġ= Ġslot Ġ% Ġ 9 Ċĉĉ ĉ val Ġy : ĠInt Ġ= Ġslot Ġ/ Ġ 9 Ċĉĉ ĉ ( m _ Gui . pan es [ 0 ] Ġas ĠStatic Pane ). addItem ( Gui Item ( item Stack ), Ġx , Ġy ) Ċĉĉ ĉ m _ Gui . update () ĊĊĉĉ ĉ val Ġrun e Ġ= ĠRun e . Deserialize ( item Stack ) Ċĉĉ ĉ if Ġ( rune Ġ!= Ġnull ) Ċĉĉ ĉ { Ċĉĉĉ ĉ m _ Run es . add ( rune ) Ċĉĉĉ ĉ rune . Add Rune To Item ( player , ĠItemStack ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ }