package Ġcom . github . hot m . aur an et Ċ Ċ import Ġa lex i il . mc . lib . net . IM sg Read Ctx Ċ import Ġa lex i il . mc . lib . net . IM sg Write Ctx Ċ import Ġa lex i il . mc . lib . net . Net Byte Buf Ċ import Ġcom . github . hot m . Hot M Constants . str Ċ import Ġcom . github . hot m . net . s 2 c ReadWrite Ċ import Ġcom . github . hot m . net . send To Clients Ċ import Ġcom . github . hot m . util . Codec Utils Ċ import Ġcom . github . hot m . util . Dim Block Pos Ċ import Ġcom . github . hot m . util . Stream Utils Ċ import Ġcom . github . hot m . world . aur an et . A ura Net Access Ċ import Ġcom . moj ang . serialization . Codec Ċ import Ġcom . moj ang . serialization . code cs . Record Codec Builder Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Stream Ċ Ċ class ĠBasic S iph on A ura Node ( ĊĠĠĠ Ġaccess : ĠA ura Net Access , ĊĠĠĠ Ġupdate Listener : ĠRunnable ?, ĊĠĠĠ Ġpos : ĠBlockPos , ĊĠĠĠ Ġprivate Ġvar Ġvalue : ĠFloat , ĊĠĠĠ Ġchild Pos : ĠBlockPos ? Ċ ) Ġ: ĠAbstract Depend able A ura Node ( Type , Ġaccess , Ġupdate Listener , Ġpos ), ĠS iph on A ura Node , ĠRender ed Depend able A ura Node , ĠVal ued A ura Node Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNET _ PARENT Ġ= ĠA ura Node . NET _ ID . sub Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBasic S iph on A ura Node :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr (" basic _ s iph on _ a ura _ node ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠID _ VALUE _ CHANGE Ġ= ĠNET _ PARENT . id Data (" VALUE _ CHANGE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. s 2 c ReadWrite ({ Ġvalue Ġ= Ġit . read Float () Ġ}, Ġ{ Ġit . write Float ( value ) Ġ}) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠID _ CHILD _ POS _ CHANGE Ġ= ĠNET _ PARENT . id Data (" CHILD _ POS _ CHANGE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. s 2 c ReadWrite ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġchild Pos Ġ= Ġif Ġ( it . read Boolean ()) Ġit . read Block Pos () Ġelse Ġnull Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Pos Ġ= Ġchild Pos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Boolean ( child Pos Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Pos ?. let Ġ{ Ġpos Ġ-> Ġit . write Block Pos ( pos ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġchild Pos Ġ= Ġchild Pos ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġval Ġmax Distance Ġ= Ġ 3 2 . 0 ĊĊĠĠĠ Ġoverride Ġval Ġblock able Ġ= Ġtrue ĊĊĠĠĠ Ġfun Ġupdate Value ( value : ĠFloat , Ġvisited Nodes : ĠMutable Set < Dim Block Pos >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġmark Dirty () ĊĠĠĠĠĠĠĠ ĠID _ VALUE _ CHANGE . send To Clients ( world , Ġpos , Ġthis ) ĊĠĠĠĠĠĠĠ ĠA ura Node Utils . node At < Depend ant A ura Node >( child Pos , Ġaccess )?. re calculate Desc endants ( visited Nodes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Child Pos ( child Pos : ĠBlockPos ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . child Pos Ġ= Ġchild Pos ĊĠĠĠĠĠĠĠ Ġmark Dirty () ĊĠĠĠĠĠĠĠ ĠID _ CHILD _ POS _ CHANGE . send To Clients ( world , Ġpos , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwould Cause Dependency Loop ( ĊĠĠĠĠĠĠĠ Ġpotential Ancestor : ĠDim Block Pos , ĊĠĠĠĠĠĠĠ Ġvisited Nodes : ĠMutable Set < Dim Block Pos > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( potential Ancestor Ġ== Ġdim Pos Ġ|| Ġvisited Nodes . contains ( dim Pos )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Nodes . add ( dim Pos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠA ura Node Utils . node At < Depend ant A ura Node >( child Pos , Ġaccess ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . would Cause Dependency Loop ( potential Ancestor , Ġvisited Nodes ) Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Nodes . remove ( dim Pos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre calculate S iph on Value ( chunk A ura : ĠFloat , Ġs iph on Count : ĠInt , Ġvisited Nodes : ĠMutable Set < Dim Block Pos >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visited Nodes . contains ( dim Pos )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDependency Ġloop Ġdetected , Ġdisconnect Ġthe Ġchild Ġbecause Ġthat 's Ġthe Ġonly Ġplace Ġthe Ġloop Ġcould Ġbe Ġcoming ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfrom . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDependency A ura Node Utils . parent Disconnect ( child Pos , Ġaccess , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvisited Nodes . add ( dim Pos ) ĊĊĠĠĠĠĠĠĠ Ġupdate Value ( A ura Node Utils . calculate S iph on Value ( 1 0 f , Ġ 2 f , Ġchunk A ura , Ġs iph on Count ), Ġvisited Nodes ) ĊĊĠĠĠĠĠĠĠ Ġvisited Nodes . remove ( dim Pos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Child Valid ( node : ĠDepend ant A ura Node ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Child ( node : ĠDepend ant A ura Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġprevious Ġchild ĊĠĠĠĠĠĠĠ ĠDependency A ura Node Utils . parent Disconnect ( child Pos , Ġaccess , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġupdate Child Pos ( node . pos . to Immutable ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Child ( pos : ĠBlockPos ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ!= Ġchild Pos ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġupdate Child Pos ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Supp lied A ura ( child : ĠDepend ant A ura Node ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children (): ĠCollection < Block Pos > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset Of NotNull ( child Pos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children For Render (): ĠStream < Block Pos > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStream Utils . of Nullable ( child Pos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Supp lied A ura For Render ( pos : ĠBlockPos ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetC rown Roll Speed ( pos : ĠBlockPos ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġ* Ġ 3 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue (): ĠFloat Ġ= Ġvalue ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Packet ( buf : ĠNet Byte Buf , Ġctx : ĠI Msg Write Ctx ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuf . write Float ( value ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Pos Ġ= Ġchild Pos ĊĠĠĠĠĠĠĠ Ġif Ġ( child Pos Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . write Boolean ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . write Block Pos ( child Pos ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . write Boolean ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠBasic S iph on A ura Node ĊĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġother . value ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( child Pos Ġ!= Ġother . child Pos ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġvalue . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( child Pos ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠType Ġ: ĠA ura NodeType < Basic S iph on A ura Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Codec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccess : ĠA ura Net Access , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Listener : ĠRunnable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpos : ĠBlockPos ĊĠĠĠĠĠĠĠ Ġ): ĠCodec < Basic S iph on A ura Node > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRecord Codec Builder . create Ġ{ Ġinstance : ĠRecord Codec Builder . Instance < Basic S iph on A ura Node > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . group ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecord Codec Builder . point ( access ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecord Codec Builder . point ( update Listener ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecord Codec Builder . point ( pos ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCodec Utils . PREFER _ FLOAT _ OR _ INT . field Of (" value "). for Getter ( Basic S iph on A ura Node :: value ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlockPos . CODEC . optional Field Of (" child _ pos "). for Getter Ġ{ ĠOptional . of Nullable ( it . child Pos ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply ( instance ) Ġ{ Ġaccess , Ġupdate Listener , Ġpos , Ġvalue , Ġchild Pos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic S iph on A ura Node ( access , Ġupdate Listener , Ġpos , Ġvalue , Ġchild Pos . orElse ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccess : ĠA ura Net Access , Ġpos : ĠBlockPos , Ġbuf : ĠNet Byte Buf , Ġctx : ĠI Msg Read Ctx ĊĠĠĠĠĠĠĠ Ġ): ĠBasic S iph on A ura Node Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġbuf . read Float () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Pos Ġ= Ġif Ġ( buf . read Boolean ()) Ġbuf . read Block Pos () Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBasic S iph on A ura Node ( access , Ġnull , Ġpos , Ġvalue , Ġchild Pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }