package Ġio . astr al forge . astr al tech . tile Ċ Ċ import Ġio . astr al forge . astr al items . A stral Items Ċ import Ġio . astr al forge . astr al items . block . tile .* Ċ import Ġio . astr al forge . astr al tech . A stral Tech Ċ import Ġorg . bukkit .* Ċ import Ġorg . bukkit . Registry . MAT ERIAL Ċ import Ġorg . bukkit . block . Block Face Ċ import Ġorg . bukkit . block . Container Ċ import Ġorg . bukkit . entity . Item Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . event . block . Action Ċ import Ġorg . bukkit . event . inventory . Inventory Action Ċ import Ġorg . bukkit . event . inventory . Inventory Click Event Ċ import Ġorg . bukkit . event . inventory . Inventory Drag Event Ċ import Ġorg . bukkit . event . player . Player Interact Event Ċ import Ġorg . bukkit . inventory . ItemStack Ċ import Ġorg . bukkit . persistence . Persistent Data Container Ċ import Ġorg . bukkit . persistence . Persistent DataType Ċ Ċ class ĠItem Collector Tile : ĠA stral TileEntity (), ĠTech Inventory Listener , ĠInventory Holder , ĠItem Transfer Handler Ġ{ ĊĠ Ġprivate Ġval Ġinventory Ġ= ĠBu kkit . create Inventory ( null , Ġ 3 * 9 , Ġ" Item ĠCollector "). register With Tech ( this ) ĊĠ Ġprivate Ġval Ġoutput Box Ġ= ĠBox ( ĠXY ( 3 , 0 ), ĠXY ( 5 , 2 ) Ġ) ĊĠ Ġprivate Ġval Ġrange Selector Box Ġ= ĠBox ( ĠXY ( 7 , 0 ), ĠXY ( 7 , 2 ) Ġ) ĊĠ Ġprivate Ġval Ġcontainer Item Handler Ġ= ĠM apped Inventory Item Handler ( inventory , Ġoutput Box . get Box (), Ġthis ) ĊĠ Ġprivate Ġvar Ġwas Power ed Ġ= Ġfalse ĊĊĠ Ġprivate Ġvar Ġradius Ġ= Ġ 1 ĊĠ Ġprivate Ġvar Ġactivation Counter Ġ= Ġ 0 ĊĊĠ Ġcompanion Ġobject Ġ: ĠBuilder Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild (): ĠItem Collector Tile Ġ{ ĊĠĠĠĠĠ Ġreturn ĠItem Collector Tile () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonLoad ( container : ĠPersistent Data Container ) Ġ{ ĊĠĠĠ Ġsuper . on Load ( container ) ĊĊĠĠĠ Ġ// ĠLoad Ġinventory ĊĠĠĠ Ġfill With Background ( inventory ) ĊĠĠĠ Ġoutput Box . get Box (). forEach Ġ{ Ġslot Ġ-> ĊĠĠĠĠĠ Ġinventory . clear ( slot ) ĊĠĠĠĠĠ ĠgetItem From Container ( slot , Ġcontainer ). let Ġ{ Ġinventory . setItem ( slot , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( container . has ( Name spaced Key ( A stral Tech . instance , Ġ" radius "), ĠPersistent DataType . INTEGER )) Ġ{ ĊĠĠĠĠĠ Ġradius Ġ= Ġcontainer . get ( Name spaced Key ( A stral Tech . instance , Ġ" radius "), ĠPersistent DataType . INTEGER ) !! ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( container . has ( Name spaced Key ( A stral Tech . instance , Ġ" activation _ counter "), ĠPersistent DataType . INTEGER )) Ġ{ ĊĠĠĠĠĠ Ġactivation Counter Ġ= Ġcontainer . get ( Name spaced Key ( A stral Tech . instance , Ġ" activation _ counter "), ĠPersistent DataType . INTEGER ) !! ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Unload ( container : ĠPersistent Data Container ) Ġ{ ĊĠĠĠ Ġsuper . on Unload ( container ) ĊĠĠĠ Ġoutput Box . get Box (). forEach Ġ{ Ġslot Ġ-> ĊĠĠĠĠĠ Ġwrite Item To Container ( inventory . getItem ( slot ), Ġslot , Ġcontainer ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcontainer . set ( Name spaced Key ( A stral Tech . instance , Ġ" radius "), ĠPersistent DataType . INTEGER , Ġradius ) ĊĠĠĠ Ġcontainer . set ( Name spaced Key ( A stral Tech . instance , Ġ" activation _ counter "), ĠPersistent DataType . INTEGER , Ġactivation Counter ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġtick () Ġ{ ĊĠĠĠ Ġsuper . tick () ĊĊĠĠĠ Ġoption Selector ( inventory , ĠlistOf ( 7 , Ġ 1 6 , Ġ 2 5 ), Ġradius . toString (), ĠlistOf (" 8 ", Ġ" 4 ", Ġ" 1 "), Ġ" Pickup ĠRadius ") ĊĊĠĠĠ Ġif Ġ( this . location . block . is Block Indirect ly Power ed Ġ&& Ġ! was Power ed ) Ġ{ ĊĠĠĠĠĠ Ġwas Power ed Ġ= Ġtrue ĊĠĠĠĠĠ Ġdo Collection () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġactivation Counter ++ ĊĠĠĠĠĠ Ġif Ġ(! this . location . block . is Block Indirect ly Power ed Ġ&& Ġwas Power ed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwas Power ed Ġ= Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( activation Counter Ġ> Ġ 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Collection () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġfor Ġ( slot Ġin Ġ 0 Ġuntil Ġcontainer Item Handler . size ) Ġ{ ĊĠĠĠĠĠ Ġcontainer Item Handler . getItem ( slot )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation . world ?. drop Item ( location , Ġit ) ĊĠĠĠĠĠĠĠ Ġcontainer Item Handler . setItem ( slot , Ġnull ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdo Collection () Ġ{ ĊĠĠĠ Ġactivation Counter Ġ= Ġ 0 ĊĠĠĠ Ġlocation . world ?. get Near by Entities ( location , Ġradius . toDouble () Ġ+ Ġ 0 . 5 , Ġradius . toDouble () Ġ+ Ġ 0 . 5 , Ġradius . toDouble () Ġ+ Ġ 0 . 5 ) ĊĠĠĠĠĠ Ġ? . filter Is Instance < Item >() ĊĠĠĠĠĠ Ġ? . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġlef to ver Ġ= Ġcontainer Item Handler . insert Item ( item . item Stack ) ĊĠĠĠĠĠĠĠ Ġif Ġ( isNull Or Air ( le f to ver ) Ġ|| Ġlef to ver !!. amount Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġitem . remove () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġitem . item Stack Ġ= Ġlef to ver ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Interact ( event : ĠPlayer Interact Event ) Ġ{ ĊĠĠĠ Ġsuper . on Interact ( event ) ĊĊĠĠĠ Ġif Ġ( event . action Ġ== ĠAction . RIGHT _ CLICK _ BLOCK ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! event . player . is S ne aking ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġevent . player . open Inventory ( inventory ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! event . is Block In Hand ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġevent . player . open Inventory ( inventory ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Inventory Interact ( event : ĠInventory Click Event ) Ġ{ ĊĠĠĠ Ġif Ġ( event . clicked Inventory Ġ== Ġinventory ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Ġevent . slot Ġ! in Ġoutput Box ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( Ġevent . slot Ġin Ġrange Selector Box Ġ&& Ġevent . action Ġ== ĠInventory Action . P ICK UP _ ALL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . who Clicked Ġis ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ( event . who Clicked Ġas ĠPlayer ). play Sound ( event . who Clicked . location , ĠSound . BLOCK _ NOTE _ BLOCK _ H AT , ĠSound Category . PLAY ERS , Ġ 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġwhen Ġ( event . slot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ( 7 ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ( 7 Ġ+ Ġ 1 * 9 ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Inventory Drag ( event : ĠInventory Drag Event ) Ġ{ ĊĠĠĠ Ġfor Ġ( slot Ġin Ġevent . raw Slots ) Ġ{ ĊĠĠĠĠĠ Ġval Ġinv Slot Ġ= Ġevent . view . convert Slot ( slot ) ĊĠĠĠĠĠ Ġif Ġ( event . view . get Inventory ( slot )?. equals ( inventory ) Ġ== Ġtrue Ġ&& Ġinv Slot Ġ! in Ġoutput Box ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetItem Handler (): ĠItem Handler Ġ{ ĊĠĠĠ Ġreturn Ġcontainer Item Handler ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Items Transfer red () Ġ{ ĊĊĠ Ġ} Ċ } Ċ