package Ġbr . com . dev srs ou za . kotlin bukkit api . dsl . menu Ċ Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . dsl . menu . slot . Slot DSL Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . dsl . menu . slot . Slot DS LI mpl Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . dsl . menu . slot . Slot EventHandler DSL Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . extensions . plugin . With Plugin Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . extensions . scheduler . task Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . menu .* Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . menu . slot . Slot Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . menu . slot . Menu Player Slot Render Ċ import Ġbr . com . dev srs ou za . kotlin bukkit api . menu . slot . Menu Player Slot Update Ċ import Ġorg . bukkit . Bu kkit Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . inventory . Inventory Ċ import Ġorg . bukkit . plugin . Plugin Ċ import Ġorg . bukkit . scheduler . Bu kkit Task Ċ import Ġjava . util .* Ċ Ċ inline Ġfun ĠWith Plugin <* >. menu ( ĊĠĠĠĠĠĠĠ ĠdisplayName : ĠString , ĊĠĠĠĠĠĠĠ Ġlines : ĠInt , ĊĠĠĠĠĠĠĠ Ġcancel OnClick : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġblock : ĠMenu DSL . () Ġ-> ĠUnit Ċ ): ĠMenu DSL Ġ= Ġplugin . menu ( displayName , Ġlines , Ġcancel OnClick , Ġblock ) Ċ Ċ inline Ġfun ĠPlugin . menu ( ĊĠĠĠĠĠĠĠ ĠdisplayName : ĠString , ĊĠĠĠĠĠĠĠ Ġlines : ĠInt , ĊĠĠĠĠĠĠĠ Ġcancel OnClick : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġblock : ĠMenu DSL . () Ġ-> ĠUnit Ċ ): ĠMenu DSL Ġ= Ġmenu ( displayName , Ġlines , Ġthis , Ġcancel OnClick , Ġblock ) Ċ Ċ inline Ġfun Ġmenu ( ĊĠĠĠĠĠĠĠ ĠdisplayName : ĠString , ĊĠĠĠĠĠĠĠ Ġlines : ĠInt , ĊĠĠĠĠĠĠĠ Ġplugin : ĠPlugin , ĊĠĠĠĠĠĠĠ Ġcancel OnClick : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġblock : ĠMenu DSL . () Ġ-> ĠUnit Ċ ): ĠMenu DSL Ġ= ĠMenu DS LI mpl ( plugin , ĠdisplayName , Ġlines , Ġcancel OnClick ). apply ( block ) Ċ Ċ class ĠMenu DS LI mpl ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġplugin : ĠPlugin , ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġlines : ĠInt , ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġcancel OnClick : ĠBoolean Ċ ) Ġ: ĠMenu DSL Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtask : ĠBu kkit Task ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġupdate Delay : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ> Ġ 0 Ġ&& Ġview ers . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset New Task () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġview ers : ĠMutable Map < Player , ĠInventory > Ġ= ĠWeak HashMap () ĊĠĠĠ Ġoverride Ġval Ġslots : ĠTreeMap < Int , ĠSlot DSL > Ġ= ĠTreeMap () ĊĊĠĠĠ Ġoverride Ġval Ġdata Ġ= ĠWeak HashMap < String , ĠAny >() ĊĠĠĠ Ġoverride Ġval Ġplayer Data Ġ= ĠWeak HashMap < Player , ĠWeak HashMap < String , ĠAny >>() ĊĊĠĠĠ Ġoverride Ġval Ġevent Handler Ġ= ĠMenu EventHandler DSL ( this ) ĊĊĠĠĠ Ġoverride Ġvar Ġbase Slot : ĠSlot DSL Ġ= ĠSlot DS LI mpl ( null , Ġcancel OnClick , ĠSlot EventHandler DSL ()) ĊĊĠĠĠ Ġoverride Ġfun Ġset Slot ( slot : ĠInt , Ġslot Obj : ĠSlot DSL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġslots . put ( slot , Ġslot Obj ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( players : ĠSet < Player >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview ers Ġ= Ġview ers From Players ( players ) ĊĠĠĠĠĠĠĠ Ġfor (( player , Ġinventory ) Ġin Ġview ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= ĠMenu Player Update ( this , Ġplayer , Ġinventory , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Handler . update ( update ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* if ( update . title Ġ!= Ġtitle ) */ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġrange Of Slots ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot Or Base Slot ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Slot Only Pos ( i , Ġslot , Ġplayer , Ġinventory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Slot ( slot : ĠSlot , Ġplayers : ĠSet < Player >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslots : ĠMap < Int , ĠSlot DSL > Ġ= Ġif ( slot Ġ=== Ġbase Slot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrange Of Slots (). map NotNull Ġ{ Ġif ( slots [ it ] Ġ== Ġnull ) Ġit Ġto Ġslot Ġelse Ġnull Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrange Of Slots (). map NotNull Ġ{ Ġif ( slot Ġ=== Ġslots [ it ]) Ġit Ġto Ġslot Ġelse Ġnull Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor (( player , Ġinventory ) Ġin Ġview ers From Players ( players )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor (( pos , Ġslot ) Ġin Ġslots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Slot Only Pos ( pos , Ġslot , Ġplayer , Ġinventory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Slot Only Pos ( pos : ĠInt , Ġslot : ĠSlot , Ġplayer : ĠPlayer , Ġinventory : ĠInventory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslot Update Ġ= ĠMenu Player Slot Update ( this , Ġpos , Ġslot , Ġplayer , Ġinventory ) ĊĠĠĠĠĠĠĠ Ġslot . event Handler . update ( slot Update ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġopen To Player ( var arg Ġplayers : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( player Ġin Ġplayers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( player , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv Ġ= Ġinventory ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ers . put ( player , Ġinv ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpre Open Ġ= ĠMenu Player Pre Open ( this , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Handler . pre Open ( pre Open ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pre Open . c anceled ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġrange Of Slots ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot Or Base Slot ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrender Ġ= ĠMenu Player Slot Render ( this , Ġi , Ġslot , Ġplayer , Ġinv ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot . event Handler . render ( render ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . open Inventory ( inv ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopen Ġ= ĠMenu Player Open ( this , Ġplayer , Ġinventory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Handler . open ( open ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Ġ== Ġnull Ġ&& Ġupdate Delay Ġ> Ġ 0 Ġ&& Ġview ers . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset New Task () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Player ( player , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Inventory (): ĠInventory Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslots Ġ= Ġrange Of Slots () ĊĠĠĠĠĠĠĠ Ġval Ġinventory Ġ= ĠBu kkit . create Inventory ( this , Ġslots . end Inclusive , Ġtitle ) ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġslots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot Or Base Slot ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġslot . item ?. clone () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinventory . setItem ( i Ġ- Ġ 1 , Ġitem ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinventory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Player ( player : ĠPlayer , Ġclose Inventory : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( close Inventory ) Ġplayer . close Inventory () ĊĊĠĠĠĠĠĠĠ Ġval Ġviewing Ġ= Ġview ers . remove ( player ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġif ( view ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Player Data ( player ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġviewing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose ( player : ĠPlayer , Ġclose Inventory : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( remove Player ( player , Ġclose Inventory )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Close Ġ= ĠMenu Player Close ( this , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Handler . close ( menu Close ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Ġ!= Ġnull Ġ&& Ġupdate Delay Ġ> Ġ 0 Ġ&& Ġview ers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Task () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset New Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Ġ= Ġtask ( repeat Delay Ġ= Ġupdate Delay ) Ġ{ Ġupdate () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Task () Ġ{ ĊĠĠĠĠĠĠĠ Ġtask ?. cancel () ĊĠĠĠĠĠĠĠ Ġtask Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }