package Ġnet . az zy . forgot ten . entity Ċ Ċ import Ġio . netty . buffer . Un p ooled Ċ import Ġnet . az zy . forgot ten . registry . Entity Packet Registry Ċ import Ġnet . az zy . forgot ten . registry . Entity Registry Ċ import Ġnet . az zy . forgot ten . util . context . Context Consumer Ċ import Ġnet . az zy . forgot ten . util . context . Context Map Ċ import Ġnet . az zy . forgot ten . util . context . Spell Context Ċ import Ġnet . az zy . forgot ten . util . context . construct Ċ import Ġnet . fabric mc . api . Env Type Ċ import Ġnet . fabric mc . api . Environment Ċ import Ġnet . fabric mc . fabric . api . network . Server Side Packet Registry Ċ import Ġnet . minecraft . ench ant ment . Enchant ment Helper Ċ import Ġnet . minecraft . entity . Entity Ċ import Ġnet . minecraft . entity . EntityType Ċ import Ġnet . minecraft . entity . Living Entity Ċ import Ġnet . minecraft . entity . damage . Damage Source Ċ import Ġnet . minecraft . entity . project ile . Abstract Fire ball Entity Ċ import Ġnet . minecraft . entity . project ile . Projectile Util Ċ import Ġnet . minecraft . network . Packet Ċ import Ġnet . minecraft . network . Packet Byte Buf Ċ import Ġnet . minecraft . network . packet . s 2 c . play . Entity Spawn S 2 CP acket Ċ import Ġnet . minecraft . particle . Particle Types Ċ import Ġnet . minecraft . server . world . Server World Ċ import Ġnet . minecraft . util . hit . Block Hit Result Ċ import Ġnet . minecraft . util . hit . Entity Hit Result Ċ import Ġnet . minecraft . util . hit . Hit Result Ċ import Ġnet . minecraft . util . math . Direction Ċ import Ġnet . minecraft . world . World Ċ import Ġjava . util . function . Consumer Ċ Ċ private Ġtype alias ĠSpell Context Consumer Ġ= ĠContext Consumer < Spell Context . Spell Package < Projectile Spell Entity >, ĠSpell Context > Ċ private Ġtype alias ĠSpell Context Map Ġ= ĠContext Map < Spell Context . Spell Package < Projectile Spell Entity >, ĠSpell Context > Ċ Ċ class ĠProject ile Spell Entity Ġ: ĠAbstract Fire ball Entity , ĠSpell Entity Ġ{ ĊĊĠĠĠ Ġvar Ġcontext Map : ĠContext Map < Spell Context . Spell Package < Projectile Spell Entity >, ĠSpell Context > ĊĠĠĠ Ġval Ġmod Map Ġ= Ġmutable Map Of < Spell Context , ĠAny >() ĊĠĠĠ Ġvar Ġl if es pan Ġ= Ġ 1 6 0 ĊĠĠĠ Ġvar Ġp ier cing Ġ= Ġfalse ĊĠĠĠ Ġval Ġpkg Ġ= ĠSpell Context . Spell Package ( this , Ġworld , Ġblock Pos , Ġnull ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Map Ġ= Ġconstruct ( array Of < Spell Context Consumer >()) Ġas ĠSpell Context Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( entity Type : ĠEntityType < out ĠAbstract Fire ball Entity >, Ġworld : ĠWorld ) Ġ: Ġsuper ( entity Type , Ġworld ) ĊĊĠĠĠ Ġconstructor ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble , Ġspeed X : ĠDouble , Ġspeed Y : ĠDouble , Ġspeed Z : ĠDouble , Ġworld : ĠWorld , Ġconsumers : ĠArray < Spell Context Consumer >) Ġ: Ġsuper ( Entity Registry . PROJECT ILE _ SPE LL _ ENTITY , Ġx , Ġy , Ġz , Ġspeed X , Ġspeed Y , Ġspeed Z , Ġworld ){ ĊĠĠĠĠĠĠĠ Ġcontext Map Ġ= Ġconstruct ( consum ers ) Ġas ĠSpell Context Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Environment ( Env Type . CLIENT ) ĊĠĠĠ Ġconstructor ( world : ĠWorld ?, Ġx : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble , Ġvelocity X : ĠDouble , Ġvelocity Y : ĠDouble , Ġvelocity Z : ĠDouble , Ġconsumers : ĠArray < Spell Context Consumer >) Ġ: Ġsuper ( Entity Registry . PROJECT ILE _ SPE LL _ ENTITY , Ġx , Ġy , Ġz , Ġvelocity X , Ġvelocity Y , Ġvelocity Z , Ġworld ) ĊĊĠĠĠ Ġconstructor ( owner : ĠL iving Entity , Ġspeed X : ĠDouble , Ġspeed Y : ĠDouble , Ġspeed Z : ĠDouble , Ġworld : ĠWorld , Ġconsumers : ĠArray < Spell Context Consumer >): Ġthis ( owner . x , Ġowner . eye Y , Ġowner . z , Ġspeed X , Ġspeed Y , Ġspeed Z , Ġworld , Ġconsumers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . owner Ġ= Ġowner ĊĠĠĠĠĠĠĠ Ġthis . setRotation ( owner . yaw , Ġowner . pitch ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( owner : ĠL iving Entity , Ġspeed X : ĠDouble , Ġspeed Y : ĠDouble , Ġspeed Z : ĠDouble , Ġworld : ĠWorld , Ġl if es pan : ĠInt , Ġp ier cing : ĠBoolean , Ġconsumers : ĠArray < Spell Context Consumer >): Ġthis ( owner , Ġspeed X , Ġspeed Y , Ġspeed Z , Ġworld , Ġconsumers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . lif es pan Ġ= Ġl if es pan ĊĠĠĠĠĠĠĠ Ġthis . pi erc ing Ġ= Ġp ier cing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtick () Ġ{ ĊĠĠĠĠĠĠĠ Ġbase Tick () ĊĠĠĠĠĠĠĠ Ġif (! world . is Client ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpkg . pos Ġ= Ġblock Pos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( age Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute ( pkg , ĠSpell Context . INIT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( age Ġ>= Ġl if es pan ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute With Fallback ( pkg , ĠSpell Context . DE SPA WN ) Ġ{ Ġsuper Kill () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Flag ( 6 , Ġthis . is G low ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( world . time Ġ% Ġ 2 Ġ== Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( world Ġas ĠServer World ). spawn Particles ( Particle Types . SO UL _ FIRE _ FL AME , Ġx , Ġy , Ġz , Ġworld . random . nextInt ( 3 ), Ġ 0 . 2 , Ġ 0 . 2 , Ġ 0 . 2 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute With Fallback ( pkg , ĠSpell Context . POS CHECK , Ġthis :: fallback Check ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute With Fallback ( pkg , ĠSpell Context . MOVE , Ġthis :: fallback Move ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute ( pkg , ĠSpell Context . TICK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmap ( values : ĠArray < Pair < Spell Context , ĠAny >>) Ġ= Ġvalues . forEach Ġ{ Ġvalue Ġ-> Ġmod Map [ value . first ] Ġ= Ġvalue . second Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Collision ( hit Result : ĠHit Result ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( hit Result Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute With Fallback ( Spell Context . Spell Package ( this , Ġworld , Ġblock Pos , Ġhit Result ), ĠSpell Context . COLL IDE , Ġthis :: fallback Collision ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Spawn Packet (): ĠPacket < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠPacket Byte Buf ( Un p ooled . buffer ()) ĊĠĠĠĠĠĠĠ ĠEntity Spawn S 2 CP acket ( this ). write ( buffer ) ĊĠĠĠĠĠĠĠ Ġreturn ĠServer Side Packet Registry . INSTANCE . to Packet ( Entity Packet Registry . CLIENT _ ENTITY _ SPA WN , Ġbuffer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Entity Hit ( entity Hit Result : ĠEntity Hit Result ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Entity Hit ( entity Hit Result ) ĊĠĠĠĠĠĠĠ Ġif ( entity Hit Result Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute With Fallback ( Spell Context . Spell Package ( this , Ġworld , Ġblock Pos , Ġentity Hit Result ), ĠSpell Context . ENTITY HIT , Ġthis :: fallback Entity Hit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Block Hit ( block Hit Result : ĠBlock Hit Result ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( block Hit Result Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Map . execute With Fallback ( Spell Context . Spell Package ( this , Ġworld , Ġblock Pos , Ġblock Hit Result ), ĠSpell Context . BLOCK HIT , Ġthis :: fallback Block Hit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġkill () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Map . execute With Fallback ( pkg , ĠSpell Context . DE ATH ) Ġ{ Ġsuper . kill () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsuper Kill () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . kill () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeal Damage ( attack er : ĠL iving Entity ?, Ġtarget : ĠEntity ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Map . execute ( Spell Context . Spell Package ( this , Ġworld , Ġblock Pos , Ġnull , Ġtarget ), ĠSpell Context . DA MAGE ) ĊĠĠĠĠĠĠĠ Ġsuper . deal Damage ( attack er , Ġtarget ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdamage ( source : ĠDamage Source ?, Ġamount : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Inv ulner able To ( source ) Ġ|| Ġsource ?. attack er Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfallback Move ( spell Package : ĠSpell Context . Spell Package < Projectile Spell Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvis cos ity Ġ= Ġif ( isIn L ava ) Ġ 0 . 4 5 f Ġelse Ġif ( is Sub merged In Water ) Ġ 0 . 8 f Ġelse Ġ 1 f ĊĠĠĠĠĠĠĠ Ġval Ġdelta X Ġ= Ġx Ġ+ Ġ( velocity . x Ġ* Ġvis cos ity ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta Y Ġ= Ġy Ġ+ Ġ( velocity . y Ġ* Ġvis cos ity ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta Z Ġ= Ġz Ġ+ Ġ( velocity . z Ġ* Ġvis cos ity ) ĊĠĠĠĠĠĠĠ Ġupdate Position ( delta X , Ġdelta Y , Ġdelta Z ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfallback Check ( spell Package : ĠSpell Context . Spell Package < Projectile Spell Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhit Result Ġ= ĠProject ile Util . get Collision ( this ) Ġ{ Ġentity : ĠEntity ? Ġ-> Ġmethod _ 2 6 9 5 8 ( entity ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( hit Result . type Ġ!= ĠHit Result . Type . MIS S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Collision ( hit Result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Block Collision () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Block Collision () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( world . getBlock State ( block Pos ). is Opaque ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Collision ( Block Hit Result ( pos , ĠDirection . NORTH , Ġblock Pos , Ġtrue )) ĊĠĠĠĠĠĠĠ Ġsuper . check Block Collision () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfallback Collision ( spell Package : ĠSpell Context . Spell Package < Projectile Spell Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhit Result Ġ= Ġspell Package . hit Result ĊĠĠĠĠĠĠĠ Ġif ( hit Result Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠHit Result . Type Ġ= Ġhit Result . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠHit Result . Type . ENTITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Entity Hit ( hit Result Ġas ĠEntity Hit Result ?) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠHit Result . Type . BLOCK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Block Hit ( hit Result Ġas ĠBlock Hit Result ?) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfallback Entity Hit ( spell Package : ĠSpell Context . Spell Package < Projectile Spell Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhit Result Ġ= Ġspell Package . hit Result Ġas ĠEntity Hit Result ĊĠĠĠĠĠĠĠ Ġhit Result . entity . kill () ĊĠĠĠĠĠĠĠ Ġkill () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfallback Block Hit ( spell Package : ĠSpell Context . Spell Package < Projectile Spell Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhit Result Ġ= Ġspell Package . hit Result Ġas ĠBlock Hit Result ĊĠĠĠĠĠĠĠ Ġval Ġblock State Ġ= Ġworld . getBlock State ( hit Result . block Pos ) ĊĠĠĠĠĠĠĠ Ġblock State . on Projectile Hit ( world , Ġblock State , Ġhit Result , Ġthis ) ĊĠĠĠĠĠĠĠ Ġkill () ĊĠĠĠ Ġ} Ċ } Ċ