package Ġmods . better fol i age . render . particle Ċ Ċ import Ġmods . better fol i age . util . Double 3 Ċ import Ġnet . minecraft . client . Minecraft Client Ċ import Ġnet . minecraft . client . particle . Sprite Bill board Particle Ċ import Ġnet . minecraft . client . render . Camera Ċ import Ġnet . minecraft . client . render . Vertex Consumer Ċ import Ġnet . minecraft . client . texture . Sprite Ċ import Ġnet . minecraft . client . world . Client World Ċ import Ġnet . minecraft . util . math . Math Helper Ċ import Ġnet . minecraft . util . math . Vec 3 f Ċ Ċ abstract Ġclass ĠAbstract Particle ( world : ĠClient World , Ġx : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ) Ġ: ĠSprite Bill board Particle ( world , Ġx , Ġy , Ġz ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġval Ġsin Ġ= ĠArray ( 6 4 ) Ġ{ Ġidx Ġ-> ĠMath . sin ( PI 2 Ġ/ Ġ 6 4 . 0 Ġ* Ġidx ) Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġval Ġcos Ġ= ĠArray ( 6 4 ) Ġ{ Ġidx Ġ-> ĠMath . cos ( PI 2 Ġ/ Ġ 6 4 . 0 Ġ* Ġidx ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbill board Rot Ġ= ĠPair ( Double 3 . zero , ĠDouble 3 . zero ) ĊĠĠĠ Ġval Ġcurrent Pos Ġ= ĠDouble 3 . zero ĊĠĠĠ Ġval Ġprev Pos Ġ= ĠDouble 3 . zero ĊĠĠĠ Ġval Ġvelocity Ġ= ĠDouble 3 . zero ĊĊĠĠĠ Ġoverride Ġfun Ġtick () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . tick () ĊĠĠĠĠĠĠĠ Ġcurrent Pos . set To ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠ Ġprev Pos . set To ( prev Pos X , Ġprev Pos Y , Ġprev Pos Z ) ĊĠĠĠĠĠĠĠ Ġvelocity . set To ( velocity X , Ġvelocity Y , Ġvelocity Z ) ĊĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġcurrent Pos . x ; Ġy Ġ= Ġcurrent Pos . y ; Ġz Ġ= Ġcurrent Pos . z ; ĊĠĠĠĠĠĠĠ Ġvelocity X Ġ= Ġvelocity . x ; Ġvelocity Y Ġ= Ġvelocity . y ; Ġvelocity Z Ġ= Ġvelocity . z ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠUpdate Ġparticle Ġon Ġworld Ġtick . Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġupdate () ĊĊĠĠĠ Ġ/** ĠTrue Ġif Ġthe Ġparticle Ġis Ġrender able . Ġ*/ ĊĠĠĠ Ġabstract Ġval ĠisValid : ĠBoolean ĊĊĠĠĠ Ġ/** ĠAdd Ġthe Ġparticle Ġto Ġthe Ġeffect Ġrenderer Ġif Ġit Ġis Ġvalid . Ġ*/ ĊĠĠĠ Ġfun Ġadd If Valid () Ġ{ Ġif Ġ( isValid ) ĠMinecraft Client . getInstance (). particle Manager . add Particle ( this ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Geometry ( vertex Consumer : ĠVertex Consumer , Ġcamera : ĠCamera , Ġtick Delta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrender Particle Quad ( vertex Consumer , Ġcamera , Ġtick Delta ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRender Ġa Ġparticle Ġquad . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param [ tes sell ator ] Ġthe Ġ[ Tes sell ator ] Ġinstance Ġto Ġuse ĊĠĠĠĠ Ġ* Ġ@ param [ tick Delta ] Ġpartial Ġtick Ġtime ĊĠĠĠĠ Ġ* Ġ@ param [ current Pos ] Ġrender Ġposition ĊĠĠĠĠ Ġ* Ġ@ param [ prev Pos ] Ġprevious Ġtick Ġposition Ġfor Ġinterpolation ĊĠĠĠĠ Ġ* Ġ@ param [ size ] Ġparticle Ġsize ĊĠĠĠĠ Ġ* Ġ@ param [ current Angle ] Ġview point - dependent Ġparticle Ġrotation Ġ( 6 4 Ġsteps ) ĊĠĠĠĠ Ġ* Ġ@ param [ sprite ] Ġparticle Ġtexture ĊĠĠĠĠ Ġ* Ġ@ param [ is Mir rored ] Ġmirror Ġparticle Ġtexture Ġalong ĠV - axis ĊĠĠĠĠ Ġ* Ġ@ param [ alpha ] Ġa pl ha Ġbl ending ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrender Particle Quad ( vertex Consumer : ĠVertex Consumer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera : ĠCamera , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Delta : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Pos : ĠDouble 3 Ġ= Ġthis . current Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Pos : ĠDouble 3 Ġ= Ġthis . prev Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize : ĠDouble Ġ= Ġscale . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Angle : ĠFloat Ġ= Ġthis . angle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Angle : ĠFloat Ġ= Ġthis . prev Angle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsprite : ĠSprite Ġ= Ġthis . sprite , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha : ĠFloat Ġ= Ġthis . alpha ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= ĠDouble 3 . lerp ( tick Delta . toDouble (), Ġprev Pos , Ġcurrent Pos ) ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= ĠMath Helper . lerp ( tick Delta , Ġprev Angle , Ġcurrent Angle ) ĊĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġcamera . rotation . copy (). apply Ġ{ Ġh amil ton Product ( Vec 3 f . POSITIVE _ Z . get Rad ial Quaternion ( angle )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlight map Coord Ġ= Ġget Brightness ( tick Delta ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcoords Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble 3 (- 1 . 0 , Ġ- 1 . 0 , Ġ 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble 3 (- 1 . 0 , Ġ 1 . 0 , Ġ 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble 3 ( 1 . 0 , Ġ 1 . 0 , Ġ 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble 3 ( 1 . 0 , Ġ- 1 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġit . rotate ( rotation ). mul ( size ). add ( center ). sub ( camera . pos . x , Ġcamera . pos . y , Ġcamera . pos . z ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrender Vertex ( vertex : ĠDouble 3 , Ġu : ĠFloat , Ġv : ĠFloat ) Ġ= Ġvertex Consumer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertex ( vertex . x , Ġvertex . y , Ġvertex . z ). texture ( u , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. color ( red , Ġgreen , Ġblue , Ġalpha ). light ( light map Coord ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. next () ĊĊĠĠĠĠĠĠĠ Ġrender Vertex ( coords [ 0 ], Ġsprite . max U , Ġsprite . max V ) ĊĠĠĠĠĠĠĠ Ġrender Vertex ( coords [ 1 ], Ġsprite . max U , Ġsprite . min V ) ĊĠĠĠĠĠĠĠ Ġrender Vertex ( coords [ 2 ], Ġsprite . min U , Ġsprite . min V ) ĊĠĠĠĠĠĠĠ Ġrender Vertex ( coords [ 3 ], Ġsprite . min U , Ġsprite . max V ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Color ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġblue Ġ= Ġ( color Ġand Ġ 2 5 5 ) Ġ/ Ġ 2 5 6 . 0 f ĊĠĠĠĠĠĠĠ Ġgreen Ġ= Ġ(( color Ġshr Ġ 8 ) Ġand Ġ 2 5 5 ) Ġ/ Ġ 2 5 6 . 0 f ĊĠĠĠĠĠĠĠ Ġred Ġ= Ġ(( color Ġshr Ġ 1 6 ) Ġand Ġ 2 5 5 ) Ġ/ Ġ 2 5 6 . 0 f ĊĠĠĠ Ġ} Ċ } ĊĊ