@ file : Suppress (" Un stable Api Usage ") Ċ Ċ package Ġdev . ad ire lle . adic rate . block . entity Ċ Ċ import Ġdev . ad ire lle . adic rate . Controller Ċ import Ġdev . ad ire lle . adic rate . C rate Ċ import Ġdev . ad ire lle . adic rate . ab straction . Front Interaction Handler Ċ import Ġdev . ad ire lle . adic rate . ab straction . Network Ċ import Ġdev . ad ire lle . adic rate . ab straction . Network . Info Ċ import Ġdev . ad ire lle . adic rate . ab straction . Network . Node Ċ import Ġdev . ad ire lle . adic rate . utils . extensions . set Ċ import Ġdev . ad ire lle . adic rate . utils . logger Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . context . Container Item Context Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . item . Item Variant Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . item . Player Inventory Storage Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . storage . Storage Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . storage . Storage Util Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . storage . Storage View Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . storage . base . Single Slot Storage Ċ import Ġnet . fabric mc . fabric . api . transfer . v 1 . transaction . Transaction Context Ċ import Ġnet . minecraft . block . BlockState Ċ import Ġnet . minecraft . block . entity . Block Entity Ċ import Ġnet . minecraft . entity . player . Player Entity Ċ import Ġnet . minecraft . nbt . N bt Compound Ċ import Ġnet . minecraft . state . property . Properties Ċ import Ġnet . minecraft . util . Hand Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġnet . minecraft . util . math . Direction Ċ import Ġnet . minecraft . world . World Ċ import Ġjava . util .* Ċ Ċ class ĠController Block Entity ( pos : ĠBlockPos , Ġstate : ĠBlock State ) Ġ: ĊĠĠĠ ĠBlock Entity ( Controller . BLOCK _ ENTITY _ TYPE , Ġpos , Ġstate ), ĊĠĠĠ ĠNetwork , ĊĠĠĠ ĠInfo , ĊĠĠĠ ĠFront Interaction Handler Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ DISTANCE Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ NODE _ COUNT Ġ= Ġ 2 5 6 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġamount Comparator Ġ= ĠComparator . comp aring < Network . Storage , ĠLong > Ġ{ Ġit . amount Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠLOGGER Ġby Ġlogger ĊĊĠĠĠ Ġprivate Ġval Ġnodes Ġ= ĠHashSet < Node >() ĊĊĠĠĠ Ġval Ġstorage : ĠStorage < Item Variant > Ġ= ĠStorage Adapter () ĊĊĠĠĠ Ġoverride Ġval Ġfacing : ĠDirection ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcached State . get ( Properties . HORIZONTAL _ F ACING ) ĊĊĠĠĠ Ġoverride Ġval Ġinfo : ĠInfo ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġvar Ġname : ĠString Ġ= Ġpos . to Short String () ĊĊĠĠĠ Ġprivate Ġvar Ġdirty Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġdestroyed Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( node : ĠNode ) Ġ= ĊĠĠĠĠĠĠĠ Ġnodes . size Ġ< ĠMAX _ NODE _ COUNT Ġ&& Ġnode . get Pos (). get Man h att an Distance ( this . pos ) Ġ<= ĠMAX _ DISTANCE ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( node : ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! destroy ed Ġ&& Ġaccept ( node ) Ġ&& Ġnodes . add ( node )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . debug (" added Ġ${ node . get Pos () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( node : ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! destroy ed Ġ&& Ġnodes . remove ( node )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . debug (" removed Ġ${ node . get Pos () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( destroy ed ) Ġreturn ĊĠĠĠĠĠĠĠ Ġdestroyed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġnode List Ġ= Ġnodes . toList () ĊĠĠĠĠĠĠĠ Ġnodes . clear () ĊĠĠĠĠĠĠĠ Ġnode List . forEach ( Node :: disconnect ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtick ( world : ĠWorld ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dirty ) Ġreturn ĊĠĠĠĠĠĠĠ Ġdirty Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrebuild ( world ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread N bt ( nbt : ĠNbt Compound ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . read N bt ( nbt ) ĊĠĠĠĠĠĠĠ Ġn bt [" name "] Ġ= Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite N bt ( nbt : ĠNbt Compound ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . write N bt ( nbt ) ĊĠĠĠĠĠĠĠ Ġn bt . getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Unless Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrebuild ( world : ĠWorld ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġun visited Ġ= ĠHashMap < Block Pos , ĠNode >( nodes . size ) ĊĠĠĠĠĠĠĠ Ġval Ġvisited Ġ= ĠHashSet < Block Pos >( nodes . size Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠLinkedList < Block Pos >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġenqueue ( pos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visited . add ( pos )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġenqueue ( pos ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġqueue . remove () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġworld . getBlock State ( pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . is Of ( C rate . BLOCK ) ĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġconnect Ġnew Ġcr ates ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un visited . remove ( pos ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġworld . getBlock Entity ( pos , ĠC rate . BLOCK _ ENTITY _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠIllegalArgumentException (" expected Ġa ĠC rate Block EntityType ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! node . connect To ( this )) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . is Of ( Controller . BLOCK ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġother Ġcontrollers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ!= Ġthis . pos ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġnon - mod Ġblocks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( pos . north ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( pos . east ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( pos . up ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( pos . south ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( pos . west ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( pos . down ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġun visited . values . map ( Node :: disconnect ) ĊĊĠĠĠĠĠĠĠ ĠLOGGER . debug (" nodes : Ġ${ nodes . map ( Node :: get Pos ). join ToString () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpull Items ( player : ĠPlayer Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( player . get Stack In Hand ( Hand . MAIN _ HAND ). isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Inventory Storage . of ( player ). slots . forEach (:: rest ock ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest ock ( Container Item Context . of Player Hand ( player , ĠHand . MAIN _ HAND ). main Slot ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrest ock ( slot : ĠSingle Slot Storage < Item Variant >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( slot . is Resource Blank Ġ|| Ġslot . amount Ġ>= Ġslot . capacity ) Ġreturn ĊĠĠĠĠĠĠĠ ĠStorage Util . move ( storage , Ġslot , Ġ{ Ġit Ġ== Ġslot . resource Ġ}, Ġslot . capacity Ġ- Ġslot . amount , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpush Items ( player : ĠPlayer Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . get Stack In Hand ( Hand . MAIN _ HAND ). isEmpty ) ĠPlayer Inventory Storage . of ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠContainer Item Context . of Player Hand ( player , ĠHand . MAIN _ HAND ). main Slot ĊĠĠĠĠĠĠĠ ĠStorage Util . move ( source , Ġstorage , Ġ{ Ġtrue Ġ}, ĠLong . MAX _ VALUE , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠStorage Adapter Ġ: ĠStorage < Item Variant > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstorage s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnodes . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Node :: storage ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinsert ( resource : ĠItem Variant , Ġmax Amount : ĠLong , Ġtx : ĠTransaction Context ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġviews Ġ= Ġstorage s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . is Resource Blank Ġ&& Ġit . can Insert ( resource ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . capacity Ġ- Ġit . amount Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinserted Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( view Ġin Ġviews ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinserted Ġ+= Ġview . insert ( resource , Ġmax Amount Ġ- Ġinserted , Ġtx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inserted Ġ>= Ġmax Amount ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinserted ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġextract ( resource : ĠItem Variant , Ġmax Amount : ĠLong , Ġtx : ĠTransaction Context ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġviews Ġ= Ġstorage s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . can Extract ( resource ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . amount Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġextracted Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( view Ġin Ġviews ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextracted Ġ+= Ġview . extract ( resource , Ġmax Amount Ġ- Ġextracted , Ġtx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extract ed Ġ>= Ġmax Amount ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġextracted ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġiterator ( tx : ĠTransaction Context ): ĠMutable Iterator < Storage View < Item Variant >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage s . iterator () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexact View ( tx : ĠTransaction Context , Ġresource : ĠItem Variant ): ĠStorage View < Item Variant >? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . resource Ġ== Ġresource Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max ( amount Comparator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse ( null ) ĊĠĠĠ Ġ} Ċ } Ċ