package Ġtab ool ib . module . ui . re cept acle Ċ Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . inventory . ItemStack Ċ import Ġtab ool ib . common . platform . submit Ċ import Ġtab ool ib . module . nms . nms Proxy Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAr asp le Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 1 1 / 2 9 Ġ 1 0 : 3 8 Ċ Ġ*/ Ċ open Ġclass ĠRe cept acle ( var Ġtype : ĠRe cept acle Type , Ġtitle : ĠString Ġ= Ġtype . to Bu kkit Type (). default Title ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġviewer : ĠPlayer ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġon Open : Ġ(( player : ĠPlayer , Ġre cept acle : ĠRe cept acle ) Ġ-> ĠUnit ) Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĊĠĠĠ Ġprivate Ġvar ĠonClose : Ġ(( player : ĠPlayer , Ġre cept acle : ĠRe cept acle ) Ġ-> ĠUnit ) Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĊĠĠĠ Ġprivate Ġvar ĠonClick : Ġ(( player : ĠPlayer , Ġevent : ĠRe cept acle Interact Event ) Ġ-> ĠUnit ) Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcontents Ġby Ġlazy Ġ{ ĠarrayOf Null s < ItemStack ? >( type . total Size ) Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġhide Player Inventory Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġstate Id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtitle Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit ( delay Ġ= Ġ 3 , Ġasync Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialization Packets () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Player Inventory ( hide Player Inventory : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . hide Player Inventory Ġ= Ġhide Player Inventory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetItem ( slot : ĠInt ): ĠItemStack ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Player Inventory Slots () ĊĠĠĠĠĠĠĠ Ġreturn Ġcontents . get OrNull ( slot ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Item ( slot : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetItem ( slot ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Item ( item Stack : ĠItemStack ? Ġ= Ġnull , Ġslots : ĠCollection < Int >, Ġdisplay : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Item ( item Stack , Ġ* slots . to IntArray (), Ġdisplay Ġ= Ġdisplay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Item ( item Stack : ĠItemStack ? Ġ= Ġnull , Ġvar arg Ġslots : ĠInt , Ġdisplay : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġslots . forEach Ġ{ Ġcontents [ it ] Ġ= Ġitem Stack Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( display Ġ&& Ġviewer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslots . forEach Ġ{ ĠPacket Window Set Slot ( it , Ġitem Stack , Ġstate Id Ġ= Ġstate Id ). send ( viewer !! ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear ( display : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontents . indices . forEach Ġ{ Ġcontents [ it ] Ġ= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( display ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh ( slot : ĠInt Ġ= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Player Inventory Slots () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPacket Window Set Slot ( slot , Ġcontents [ slot ], Ġstate Id Ġ= Ġstate Id ). send ( viewer !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPacket Window Items ( contents ). send ( viewer !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Open ( handler : Ġ( player : ĠPlayer , Ġre cept acle : ĠRe cept acle ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Open Ġ= Ġhandler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClose ( handler : Ġ( player : ĠPlayer , Ġre cept acle : ĠRe cept acle ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . onClose Ġ= Ġhandler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick ( click Event : Ġ( player : ĠPlayer , Ġevent : ĠRe cept acle Interact Event ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . onClick Ġ= Ġclick Event ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġviewer Ġ= Ġplayer ĊĠĠĠĠĠĠĠ Ġinitialization Packets () ĊĠĠĠĠĠĠĠ Ġplayer . setView ing Re cept acle ( this ) ĊĠĠĠĠĠĠĠ Ġon Open ( player , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose ( send Packet : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( send Packet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPacket Window Close (). send ( viewer !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClose ( viewer !! , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviewer !!. setView ing Re cept acle ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcall Event Click ( event : ĠRe cept acle Interact Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( viewer !! , Ġevent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinitialization Packets () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn ms Proxy < N MS >(). send Inventory Packet ( viewer !! , ĠPacket Window Open ( type , Ġtitle )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġsetup Player Inventory Slots () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( hide Player Inventory Ġ|| Ġviewer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġviewer !!. inventory . contents . forEach Indexed Ġ{ Ġindex , Ġitem Stack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Stack Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 .. 8 Ġ-> Ġtype . hot Bar Slots [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 9 .. 3 5 Ġ-> Ġtype . main Inv Slots [ index Ġ- Ġ 9 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontents [ slot ] Ġ= Ġitem Stack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ