package Ġme . ste ven . ind rev . networks Ċ Ċ import Ġit . un imi . ds i . fast util . long s . Long 2 Object Open HashMap Ċ import Ġit . un imi . ds i . fast util . objects . Object 2 Int Open HashMap Ċ 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 Ġme . ste ven . ind rev . packets . client . Sync Network Serv os Packet Ċ import Ġnet . fabric mc . fabric . api . networking . v 1 . Packet Byte Bu fs Ċ import Ġnet . fabric mc . fabric . api . networking . v 1 . Server Play Networking Ċ import Ġnet . minecraft . entity . player . Player Entity Ċ import Ġnet . minecraft . nbt . N bt Compound Ċ import Ġnet . minecraft . nbt . N bt List Ċ 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 . Long Function Ċ Ċ abstract Ġclass ĠSer vo Network State < T Ġ: ĠNetwork >( type : ĠNetwork . Type < T >, Ġworld : ĠServer World ) Ġ: ĠNetwork State < T >( type , Ġworld ) Ġ{ ĊĠĠĠ Ġval Ġendpoint Data Ġ= ĠLong 2 Object Open HashMap < Object 2 Object Open HashMap < Direction , ĠEndpoint Data >>() ĊĠĠĠ Ġprivate Ġval Ġrecently Removed Ġ= ĠLong 2 Object Open HashMap < Object 2 Object Open HashMap < Direction , ĠEndpoint Data >>() ĊĊĠĠĠ Ġprivate Ġval Ġsynced Maps Ġ= ĠObject 2 Int Open HashMap < UUID >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsynced Maps . default ReturnValue (- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġversion Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġtick ( world : ĠServer World ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . tick ( world ) ĊĊĠĠĠĠĠĠĠ Ġsync ( world ) ĊĠĠĠĠĠĠĠ Ġclear Cached Data ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsync ( world : ĠServer World ) Ġ{ ĊĠĠĠĠĠĠĠ Ġworld . players . forEach Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġsynced Maps . getInt ( player . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Ġ> Ġv ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠPacket Byte Bu fs . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . writeString ( type . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . create Client Network Info ( world )?. write ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠServer Play Networking . send ( player , ĠSync Network Serv os Packet . SYNC _ NETWORK _ SERV OS , Ġbuf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynced Maps [ player . uuid ] Ġ= version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Dim Change ( player Entity : ĠPlayer Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynced Maps . remove Int ( player Entity . uuid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Removed ( pos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠ Ġversion ++ ĊĠĠĠĠĠĠĠ Ġsuper . on Removed ( pos ) ĊĠĠĠĠĠĠĠ Ġif Ġ( endpoint Data . containsKey ( pos . as Long ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecently Removed [ pos . as Long ()] Ġ= Ġendpoint Data . remove ( pos . as Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Set ( block Pos : ĠBlockPos , Ġnetwork : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġversion ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( recent ly Removed . containsKey ( block Pos . as Long ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Data [ block Pos . as Long ()] Ġ= Ġrecently Removed . remove ( block Pos . as Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Ser vo ( block Pos : ĠBlockPos , Ġdirection : ĠDirection ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġendpoint Data . get ( block Pos . as Long ()) ?. get ( direction )?. type ?. let Ġ{ Ġit Ġ!= ĠEndpoint Data . Type . INPUT Ġ} Ġ== Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Endpoint Data ( pos : ĠBlockPos , Ġdirection : ĠDirection , Ġcreate If Absent : ĠBoolean Ġ= Ġfalse ): ĠEndpoint Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Endpoint Data ( pos . as Long (), Ġdirection , Ġcreate If Absent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Endpoint Data ( pos : ĠLong , Ġdirection : ĠDirection , Ġcreate If Absent : ĠBoolean Ġ= Ġfalse ): ĠEndpoint Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( create If Absent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Data . compute If Absent ( pos , ĠLong Function Ġ{ ĠObject 2 Object Open HashMap () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compute If Absent ( direction , ĠObject 2 Object Function Ġ{ ĠEndpoint Data ( Endpoint Data . Type . INPUT , Ġnull ) Ġ}) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Data . get ( pos )?. get ( direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Endpoint Data ( pos : ĠBlockPos , Ġdirection : ĠDirection ): ĠEndpoint Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġversion ++ ĊĠĠĠĠĠĠĠ Ġval Ġdatas Ġ= Ġendpoint Data . get ( pos . as Long ()) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġdatas . remove ( direction ) ĊĠĠĠĠĠĠĠ Ġif Ġ( datas . isEmpty ()) Ġendpoint Data . remove ( pos . as Long ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġd ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġclear Cached Data ( import Cache : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( import Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecently Removed . forEach Ġ{ Ġe Ġ-> Ġendpoint Data [ e . key ] Ġ= Ġe . value Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . recent ly Removed . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite N bt ( tag : ĠNbt Compound ): ĠNbt Compound Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodes Tag Ġ= ĠNbt List () ĊĠĠĠĠĠĠĠ Ġendpoint Data . forEach Ġ{ Ġ( pos , Ġmodes ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsides Tag Ġ= ĠNbt List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodes . forEach Ġ{ Ġ( dir , Ġmode ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= ĠNbt Compound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt . put ( dir . ordinal . toString (), Ġmode . write N bt ( N bt Compound ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsides Tag . add ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Tag Ġ= ĠNbt Compound () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpos Tag . put Long (" pos ", Ġpos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpos Tag . put (" sides ", Ġsides Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodes Tag . add ( pos Tag ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtag . put (" modes ", Ġmodes Tag ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . write N bt ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠNetwork , ĠP Ġ: ĠSer vo Network State < T >> Ġread N bt ( tag : ĠNbt Compound , Ġsupplier : Ġ() Ġ-> ĠP ): ĠP Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġsupplier () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodes Tag Ġ= Ġtag . getList (" modes ", Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodes Tag . forEach Ġ{ Ġpos Tag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Tag Ġas ĠNbt Compound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġpos Tag . getLong (" pos ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠObject 2 Object Open HashMap < Direction , ĠEndpoint Data >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsides Tag Ġ= Ġpos Tag . getList (" sides ", Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsides Tag . forEach Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġas ĠNbt Compound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt . keys . forEach Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠEndpoint Data ( Endpoint Data . Type . INPUT , ĠEndpoint Data . Mode . NE ARE ST _ FIRST ). read N bt ( t . get Compound ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠDirection . values ()[ id . toInt ()] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ dir ] Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . endpoint Data [ pos ] Ġ= Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }