package Ġme . ste ven . ind rev . networks Ċ Ċ import Ġit . un imi . ds i . fast util . long s . Long Open HashSet Ċ import Ġit . un imi . ds i . fast util . objects . Object 2 Object Function Ċ import Ġit . un imi . ds i . fast util . objects . Object 2 Object Open HashMap Ċ import Ġit . un imi . ds i . fast util . objects . Object Open HashSet Ċ import Ġme . ste ven . ind rev . networks . client . Client Network Info Ċ import Ġme . ste ven . ind rev . networks . client . Client Ser vo Network Info Ċ import Ġme . ste ven . ind rev . networks . client . node . Client Ser vo NodeInfo Ċ import Ġme . ste ven . ind rev . networks . energy . Energy Network Ċ import Ġme . ste ven . ind rev . networks . factory . ENER GY _ NET _ FACTORY Ċ import Ġme . ste ven . ind rev . networks . factory . FL UID _ NET _ FACTORY Ċ import Ġme . ste ven . ind rev . networks . factory . ITEM _ NET _ FACTORY Ċ import Ġme . ste ven . ind rev . networks . factory . Network Factory Ċ import Ġme . ste ven . ind rev . networks . fluid . Fluid Network Ċ import Ġme . ste ven . ind rev . networks . fluid . Fluid Network State Ċ import Ġme . ste ven . ind rev . networks . item . Item Network Ċ import Ġme . ste ven . ind rev . networks . item . Item Network State Ċ import Ġme . ste ven . ind rev . utils . energy Network State Ċ import Ġme . ste ven . ind rev . utils . fluid Network State Ċ import Ġme . ste ven . ind rev . utils . item Network State Ċ import Ġnet . minecraft . block . Block Ċ import Ġnet . minecraft . server . world . Server World Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġnet . minecraft . util . math . Direction Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Function Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . HashMap Ċ Ċ abstract Ġclass ĠNetwork ( ĊĠĠĠ Ġval Ġtype : ĠType <* >, ĊĠĠĠ Ġval Ġworld : ĠServer World , ĊĠĠĠ Ġval Ġpipes : ĠMutable Set < Block Pos > Ġ= ĠObject Open HashSet (), ĊĠĠĠ Ġval Ġcontainers : ĠMutable Map < Block Pos , ĠEnum Set < Direction >> Ġ= ĠObject 2 Object Open HashMap () Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġstate Ġ= Ġtype . get Network State ( world ) ĊĊĠĠĠ Ġprotected Ġval Ġqueue Ġ= ĠObject 2 Object Open HashMap < Block Pos , ĠMutable List < Node >>( containers . size ) ĊĊĠĠĠ Ġprotected Ġfun Ġis Queue Valid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( queue . isEmpty () Ġ&& Ġcontainers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Queue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġqueue . isNotEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġbuild Queue () Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue . clear () ĊĠĠĠĠĠĠĠ Ġcontainers . forEach Ġ{ Ġ( pos , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind ( pos , Ġpos , Ġ 0 , ĠLong Open HashSet ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfind ( source : ĠBlockPos , Ġblock Pos : ĠBlockPos , Ġcount : ĠInt , Ġs : ĠLong Open HashSet ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDI RECTION S . forEach Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġblock Pos . offset ( dir . op pos ite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pipes . contains ( offset ) Ġ&& Ġs . add ( offset . as Long ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind ( source , Ġoffset , Ġcount Ġ+ Ġ 1 , Ġs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source Ġ!= Ġoffset Ġ&& Ġcontainers . contains ( offset ) Ġ&& Ġcontainers [ offset ] !!. contains ( dir )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . compute If Absent ( source , ĠObject 2 Object Function Ġ{ ĠArrayList ( containers . size ) Ġ}). add ( Node ( source , Ġoffset , Ġcount , Ġdir )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġtick ( world : ĠServer World ) ĊĊĠĠĠ Ġopen Ġfun Ġremove () Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . remove ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġopen Ġfun Ġappend Pipe ( block : ĠBlock , Ġblock Pos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpipes . add ( block Pos ) ĊĊĠĠĠĠĠĠĠ Ġstate [ block Pos ] Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġappend Container ( block Pos : ĠBlockPos , Ġdirection : ĠDirection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontainers . compute If Absent ( block Pos ) Ġ{ ĠEnum Set . none Of ( Direction :: class . java ) Ġ}. add ( direction ) ĊĠĠĠĠĠĠĠ Ġstate [ block Pos ] Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠDI RECTION S Ġ= ĠDirection . values () ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠNetwork > Ġhandle Break ( state : ĠNetwork State < T >, Ġpos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . network sBy Pos [ pos . as Long ()] ?. remove () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDI RECTION S . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġpos . offset ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Update ( state , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠNetwork > Ġhandle Update ( state : ĠNetwork State < T >, Ġpos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . network sBy Pos [ pos . as Long ()] ?. remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . queue Update ( pos . as Long (), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġabstract Ġclass ĠType < T Ġ: ĠNetwork >( val Ġkey : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġabstract Ġval Ġfactory : ĠNetwork Factory < T > ĊĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġcreate Empty ( world : ĠServer World ): ĠT ĊĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġget Network State ( world : ĠServer World ): ĠNetwork State < T > ĊĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġcreate Client Network Info ( world : ĠServer World ): ĠClient Network Info < *> ? ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN ER GY Ġ= Ġobject Ġ: ĠType < Energy Network >( Network State . ENER GY _ KEY ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġfactory : ĠNetwork Factory < Energy Network > Ġ= ĠEN ER GY _ NET _ FACTORY ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Empty ( world : ĠServer World ): ĠEnergy Network Ġ= ĠEnergy Network ( world ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Network State ( world : ĠServer World ): ĠNetwork State < Energy Network > Ġ= Ġworld . energy Network State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Client Network Info ( world : ĠServer World ): ĠClient Network Info < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFL UID Ġ= Ġobject Ġ: ĠType < Fluid Network >( Network State . FL UID _ KEY ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġfactory : ĠNetwork Factory < Fluid Network > Ġ= ĠFL UID _ NET _ FACTORY ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Empty ( world : ĠServer World ): ĠFluid Network Ġ= ĠFluid Network ( world ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Network State ( world : ĠServer World ): ĠFluid Network State Ġ= Ġworld . fluid Network State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Client Network Info ( world : ĠServer World ): ĠClient Network Info < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġget Network State ( world ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClient Ser vo Network Info (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . endpoint Data . forEach Ġ{ Ġ( pos , Ġdata ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠClient Ser vo NodeInfo ( pos , ĠObject 2 Object Open HashMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . forEach Ġ{ Ġ( dir , Ġendpoint Data ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . serv os [ dir ] Ġ= Ġendpoint Data . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pipes [ pos ] Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠITEM Ġ= Ġobject Ġ: ĠType < Item Network >( Network State . ITEM _ KEY ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġfactory : ĠNetwork Factory < Item Network > Ġ= ĠITEM _ NET _ FACTORY ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Empty ( world : ĠServer World ): ĠItem Network Ġ= ĠItem Network ( world ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Network State ( world : ĠServer World ): ĠItem Network State Ġ= Ġworld . item Network State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Client Network Info ( world : ĠServer World ): ĠClient Network Info < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġget Network State ( world ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClient Ser vo Network Info (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . endpoint Data . forEach Ġ{ Ġ( pos , Ġdata ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠClient Ser vo NodeInfo ( pos , ĠObject 2 Object Open HashMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . forEach Ġ{ Ġ( dir , Ġendpoint Data ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . serv os [ dir ] Ġ= Ġendpoint Data . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pipes [ pos ] Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġvalue Of ( string : ĠString ): ĠType < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( string ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . ENER GY _ KEY Ġ-> ĠEN ER GY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . FL UID _ KEY Ġ-> ĠFL UID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . ITEM _ KEY Ġ-> ĠITEM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown Ġnetwork Ġtype Ġ$ string ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }