package Ġme . ste ven . ind rev . energy Ċ Ċ import Ġdev . tech n ici 4 n . fast transfer lib . api . Simulation Ċ import Ġdev . tech n ici 4 n . fast transfer lib . api . energy . Energy Io Ċ import Ġdev . tech n ici 4 n . fast transfer lib . api . energy . Energy Movement Ċ import Ġit . un imi . ds i . fast util . long s . Long Open HashSet Ċ import Ġit . un imi . ds i . fast util . objects . Object 2 Double Open HashMap Ċ import Ġme . ste ven . ind rev . Ind ustrial Re volution Ċ import Ġme . ste ven . ind rev . api . machines . Tier Ċ import Ġme . ste ven . ind rev . blocks . machine . Cable Block Ċ import Ġme . ste ven . ind rev . utils . energy Of Ċ import Ġnet . minecraft . nbt . Compound Tag Ċ import Ġnet . minecraft . nbt . List Tag Ċ import Ġnet . minecraft . nbt . Long Tag Ċ import Ġnet . minecraft . nbt . String Tag Ċ import Ġnet . minecraft . server . world . Server World Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġnet . minecraft . util . math . Direction Ċ import Ġnet . minecraft . world . chunk . Chunk Ċ import Ġjava . util .* Ċ import Ġkotlin . math . absolute Value Ċ Ċ class ĠEnergy Network ( ĊĠĠĠ Ġval Ġworld : ĠServer World , ĊĠĠĠ Ġval Ġc ables : ĠMutable Set < Block Pos > Ġ= Ġhash Set Of (), ĊĠĠĠ Ġval Ġmachines : ĠMutable Map < Block Pos , ĠEnum Set < Direction >> Ġ= Ġhash Map Of () Ċ ) Ġ{ ĊĊĠĠĠ Ġvar Ġtier Ġ= ĠT ier . MK 1 ĊĠĠĠ Ġprivate Ġval Ġmax Cable Transfer : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( tier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT ier . MK 1 Ġ-> ĠInd ustrial Re volution . CONFIG . c ables . c able Mk 1 . max Input ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT ier . MK 2 Ġ-> ĠInd ustrial Re volution . CONFIG . c ables . c able Mk 2 . max Input ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT ier . MK 3 Ġ-> ĠInd ustrial Re volution . CONFIG . c ables . c able Mk 3 . max Input ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠInd ustrial Re volution . CONFIG . c ables . c able Mk 4 . max Input ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġqueue Ġ= Ġhash Map Of < Block Pos , ĠPriority Queue < Node >>() ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Queue () Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue . clear () ĊĠĠĠĠĠĠĠ Ġmachines . forEach Ġ{ Ġ( pos , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind ( pos , Ġpos , Ġ 0 , ĠLong Open HashSet ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind ( source : ĠBlockPos , Ġblock Pos : ĠBlockPos , Ġcount : ĠShort , Ġs : ĠLong Open HashSet ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDI RECTION S . forEach Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġblock Pos . offset ( dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c ables . contains ( offset ) Ġ&& Ġs . add ( offset . as Long ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind ( source , Ġoffset , Ġ( count Ġ+ Ġ 1 ). to Short (), Ġs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source Ġ!= Ġoffset Ġ&& Ġmachines . contains ( offset ) Ġ&& Ġmachines [ offset ] !!. contains ( dir . op pos ite )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . compute If Absent ( source ) Ġ{ ĠPriority Queue ( machines . size ) Ġ}. add ( Node ( source , Ġoffset , Ġcount , Ġdir . op pos ite )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtick ( world : ĠServer World ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( machines . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( queue . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Queue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremaining Inputs Ġ= ĠObject 2 Double Open HashMap < Block Pos >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachines . forEach Ġ{ Ġ( pos , Ġdirections ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq Ġ= ĠPriority Queue ( queue [ pos ] Ġ?: Ġreturn @ forEach ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirections . forEach Ġinner @{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenergy Io Ġ= Ġenergy Of ( world , Ġpos , Ġdir ) Ġ?: Ġreturn @ inner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġremaining Ġ= Ġenergy Io . max Output ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( q . isNotEmpty () Ġ&& Ġenergy Io . supports Extraction () Ġ&& Ġremaining Ġ> Ġ 1 e - 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġtarget Pos , Ġ_, Ġtarget Dir ) Ġ= Ġq . poll () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġenergy Of ( world , Ġtarget Pos , Ġtarget Dir ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Input Ġ= Ġremaining Inputs . compute If Absent ( target Pos ) Ġ{ Ġtarget . max Input Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Input Ġ< Ġ 1 e - 9 ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġremaining . coerce At Most ( max Input ). coerce At Most ( max Cable Transfer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= Ġtarget . energy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmoved Ġ= ĠEnergy Movement . move ( energy Io , Ġtarget , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġafter Ġ= Ġtarget . energy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( moved Ġ> Ġ 1 e - 9 Ġ&& Ġ( after Ġ- Ġbefore ). absolute Value Ġ> Ġ 1 e - 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ-= Ġmoved ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Inputs . addTo ( target Pos , Ġ- moved ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠEnergy Network State . get Network State ( world ) ĊĠĠĠĠĠĠĠ Ġstate . networks . remove ( this ) ĊĠĠĠĠĠĠĠ Ġc ables . forEach Ġ{ Ġstate . network sBy Pos . remove ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Cable ( state : ĠEnergy Network State , Ġblock : ĠC able Block , Ġblock Pos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtier Ġ= Ġblock . tier ĊĠĠĠĠĠĠĠ Ġc ables . add ( block Pos ) ĊĠĠĠĠĠĠĠ Ġstate . network sBy Pos [ block Pos ] Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Machine ( block Pos : ĠBlockPos , Ġdirection : ĠDirection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmachines . compute If Absent ( block Pos ) Ġ{ ĠEnum Set . none Of ( Direction :: class . java ) Ġ}. add ( direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Tag ( tag : ĠCompound Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc ables List Ġ= ĠList Tag () ĊĠĠĠĠĠĠĠ Ġc ables . forEach Ġ{ Ġpos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ables List . add ( Long Tag . of ( pos . as Long ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmachines List Ġ= ĠList Tag () ĊĠĠĠĠĠĠĠ Ġmachines . forEach Ġ{ Ġ( pos , Ġdirections ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmachine Tag Ġ= ĠCompound Tag () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine Tag . put Long (" pos ", Ġpos . as Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir List Ġ= ĠList Tag () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirections . forEach Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdir List . add ( String Tag . of ( dir . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine Tag . put (" dir ", Ġdir List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachines List . add ( machine Tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtag . put (" c ables ", Ġc ables List ) ĊĠĠĠĠĠĠĠ Ġtag . put (" machines ", Ġmachines List ) ĊĠĠĠĠĠĠĠ Ġtag . put Int (" tier ", Ġtier . ordinal ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION S Ġ= ĠDirection . values () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ VALUE Ġ= Ġ( Integer . MAX _ VALUE Ġ- Ġ 1 ). toDouble () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEnergy Io . max Input : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠMAX _ VALUE Ġ- Ġinsert ( MAX _ VALUE , ĠSimulation . SI MUL ATE ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEnergy Io . max Output : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġextract ( MAX _ VALUE , ĠSimulation . SI MUL ATE ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Break ( world : ĠServer World , Ġpos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠEnergy Network State . get Network State ( world ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . network sBy Pos . containsKey ( pos )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . network sBy Pos [ pos ]?. remove () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDI RECTION S . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġpos . offset ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Update ( world , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Update ( world : ĠServer World , Ġpos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠEnergy Network State . get Network State ( world ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . network sBy Pos . containsKey ( pos )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . network sBy Pos [ pos ]?. remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠEnergy Network ( world ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . networks . add ( network ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscanned Ġ= Ġhash Set Of < Block Pos >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDI RECTION S . forEach Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Network ( sc anned , Ġstate , Ġnetwork , Ġworld . get Chunk ( pos ), Ġworld , Ġpos , Ġpos , Ġdir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network . machines . isEmpty () Ġ|| Ġnetwork . c ables . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . mark Dirty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Network ( sc anned : ĠMutable Set < Block Pos >, Ġstate : ĠEnergy Network State , Ġnetwork : ĠEnergy Network , Ġchunk : ĠChunk , Ġworld : ĠServer World , Ġblock Pos : ĠBlockPos , Ġsource : ĠBlockPos , Ġdirection : ĠDirection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( energy Of ( world , Ġblock Pos , Ġdirection . op pos ite ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . append Machine ( block Pos , Ġdirection . op pos ite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block Pos Ġ!= Ġsource Ġ&& Ġ! sc anned . add ( block Pos )) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock State Ġ= Ġchunk . getBlock State ( block Pos ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġblock State . block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block Ġis ĠC able Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . network sBy Pos . containsKey ( block Pos )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Network Ġ= Ġstate . network sBy Pos [ block Pos ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . networks . contains ( old Network ) Ġ&& Ġold Network Ġ!= Ġnetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Network ?. remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDI RECTION S . forEach Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block State [ Cable Block . getProperty ( dir )]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Pos Ġ= Ġblock Pos . offset ( dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Pos . x Ġshr Ġ 4 Ġ== Ġchunk . pos . x Ġ&& Ġn Pos . z Ġshr Ġ 4 Ġ== Ġchunk . pos . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Network ( sc anned , Ġstate , Ġnetwork , Ġchunk , Ġworld , Ġn Pos , Ġsource , Ġdir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Network ( sc anned , Ġstate , Ġnetwork , Ġworld . get Chunk ( n Pos ), Ġworld , Ġn Pos , Ġsource , Ġdir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block State [ Cable Block . getProperty ( direction . op pos ite )]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . append Cable ( state , Ġblock , Ġblock Pos . to Immutable ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Tag ( world : ĠServer World , Ġtag : ĠCompound Tag ): ĠEnergy Network Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc ables List Ġ= Ġtag . getList (" c ables ", Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmachines List Ġ= Ġtag . getList (" machines ", Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠEnergy Network ( world ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ables List . forEach Ġ{ Ġc able Tag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc able Tag Ġas ĠLong Tag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . c ables . add ( Block Pos . from Long ( c able Tag . long ). to Immutable ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachines List . forEach Ġ{ Ġmachine Tag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmachine Tag Ġas ĠCompound Tag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Long Ġ= Ġmachine Tag . getLong (" pos ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠBlockPos . from Long ( pos Long ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir List Ġ= Ġmachine Tag . getList (" dir ", Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirections Ġ= ĠEnum Set . none Of ( Direction :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdir List . forEach Ġ{ Ġdir Tag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdir Tag Ġas ĠString Tag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠDirection . valueOf ( dir Tag . asString (). toUpperCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirections . add ( dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . machines [ pos ] Ġ= Ġdirections ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtier Ġ= ĠT ier . values ()[ tag . getInt (" tier ")] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . tier Ġ= Ġtier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnetwork ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }