package Ġme . han . m uff in . client . utils . com bat čĊč Ċ import Ġme . han . m uff in . client . M uff in č Ċ import Ġme . han . m uff in . client . core . Globals č Ċ import Ġme . han . m uff in . client . event . events . client . Tick Event č Ċ import Ġme . han . m uff in . client . event . events . network . Server Event č Ċ import Ġme . han . m uff in . client . utils . entity . Entity Util č Ċ import Ġme . han . m uff in . client . utils . extensions . mc . item . attack Damage č Ċ import Ġme . han . m uff in . client . utils . extensions . mc . item . filter By Stack č Ċ import Ġme . han . m uff in . client . utils . extensions . mc . item . hot bar Slots č Ċ import Ġme . han . m uff in . client . utils . extensions . mc . item . swap To Slot č Ċ import Ġnet . minecraft . ench ant ment . Enchant ment č Ċ import Ġnet . minecraft . ench ant ment . Enchant ment Helper č Ċ import Ġnet . minecraft . entity . Entity Living Base č Ċ import Ġnet . minecraft . entity . Shared Monster Attributes č Ċ import Ġnet . minecraft . entity . monster . Entity Mob č Ċ import Ġnet . minecraft . entity . player . Entity Player č Ċ import Ġnet . minecraft . init . Mob Effects č Ċ import Ġnet . minecraft . item . Item A xe č Ċ import Ġnet . minecraft . item . ItemStack č Ċ import Ġnet . minecraft . item . Item S word č Ċ import Ġnet . minecraft . item . Item Tool č Ċ import Ġnet . minecraft . util . Combat Rules č Ċ import Ġnet . minecraft . util . Damage Source č Ċ import Ġteam . st iff . p ome lo . impl . annotated . handler . annotation . Listener č Ċ import Ġjava . util .* č Ċ import Ġkotlin . math . max č Ċ import Ġkotlin . math . round čĊč Ċ object ĠCom bat Utils Ġ{ čĊĠĠĠ Ġprivate Ġval Ġcached Armor Values Ġ= ĠWeak HashMap < Entity Living Base , ĠPair < Float , ĠFloat >>() čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ ĠM uff in . getInstance (). event Manager . addEventListener ( this ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Listener čĊĠĠĠ Ġprivate Ġfun Ġon Tick ing ( event : ĠTick Event ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( Entity Util . full Null Check ()) Ġreturn čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( entity Ġin ĠGlobals . mc . world . loaded Entity List ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity Ġ! is ĠEntity Living Base ) Ġcontinue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarm or Value Ġ= Ġentity . total Armor Value . toFloat () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto ugh ness Ġ= Ġentity . getEntity Attribute ( Shared Monster Attributes . ARM OR _ TO UGH NESS ). attribute Value . toFloat () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Armor Values [ entity ] Ġ= Ġarm or Value Ġto Ġto ugh ness čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Listener čĊĠĠĠ Ġprivate Ġfun Ġon Disconnect ( event : ĠServer Event . Disconnect ) Ġ{ čĊĠĠĠĠĠĠĠ Ġcached Armor Values . clear () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġcalc Damage From Player ( entity : ĠEntity Player , Ġassume Critical : ĠBoolean Ġ= Ġfalse ): ĠFloat Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġitem Stack Ġ= Ġentity . held Item Main hand čĊĠĠĠĠĠĠĠ Ġvar Ġdamage Ġ= Ġitem Stack . attack Damage čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( assume Critical ) Ġdamage Ġ*= Ġ 1 . 5 F čĊĠĠĠĠĠĠĠ Ġreturn Ġcalc Damage ( Globals . mc . player , Ġdamage ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġcalc Damage From Mob ( entity : ĠEntity Mob ): ĠFloat Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġdamage Ġ= Ġentity . getEntity Attribute ( Shared Monster Attributes . ATT ACK _ DA MAGE ). attribute Value . toFloat () čĊĠĠĠĠĠĠĠ Ġdamage Ġ+= ĠEn chant ment Helper . get Modifier For Creature ( entity . held Item Main hand , ĠGlobals . mc . player . creature Attribute ) čĊĠĠĠĠĠĠĠ Ġreturn Ġcalc Damage ( Globals . mc . player , Ġdamage ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġcalc Damage ( entity : ĠEntity Living Base , Ġdamage In : ĠFloat Ġ= Ġ 1 0 0 f , Ġsource : ĠDamage Source Ġ= ĠDamage Source . GENERIC , Ġround Damage : ĠBoolean Ġ= Ġfalse ): ĠFloat Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( entity Ġis ĠEntity Player Ġ&& Ġentity . is Creative ) Ġreturn Ġ 0 . 0 F Ġ// ĠReturn Ġ 0 Ġdirectly Ġif Ġentity Ġis Ġa Ġplayer Ġand Ġin Ġcre ative Ġmode čĊčĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġcached Armor Values [ entity ] Ġ?: Ġreturn Ġ 0 . 0 F čĊĠĠĠĠĠĠĠ Ġvar Ġdamage Ġ= ĠCom bat Rules . get Damage After Ab sor b ( damage In , Ġpair . first , Ġpair . second ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( source Ġ!= ĠDamage Source . OUT _ OF _ WORLD ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity . getActive P otion Effect ( Mob Effects . RE SIST ANCE )?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġdamage Ġ*= Ġ( 2 5 Ġ- Ġ( it . amp l ifier Ġ+ Ġ 1 ) Ġ* Ġ 5 ) Ġ/ Ġ 2 5 . 0 f čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġdamage Ġ*= Ġmax ( 1 f Ġ- Ġit . amp l ifier Ġ* Ġ 0 . 2 f , Ġ 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdamage Ġ*= Ġmax ( 1 . 0 F Ġ- Ġ( it . amp l ifier Ġ+ Ġ 1 ) Ġ* Ġ 0 . 2 F , Ġ 0 . 0 F ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġdamage Ġ*= Ġget Protection Modifier ( entity , Ġsource ) čĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( round Damage ) Ġround ( damage ) Ġelse Ġdamage čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ@ see ĠCom bat Rules . get Damage After Magic Ab sor b čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġget Protection Modifier ( entity : ĠEntity Living Base , Ġdamage Source : ĠDamage Source ): ĠFloat Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġmodifier Ġ= Ġ 0 čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( armor Ġin Ġentity . armor Inventory List . toList ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( armor . isEmpty ) Ġcontinue Ġ// ĠSkip Ġif Ġitem Ġstack Ġis Ġempty čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn bt Tag List Ġ= Ġarm or . ench ant ment Tag List čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn bt Tag List . tag Count ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompound Tag Ġ= Ġn bt Tag List . get Compound Tag At ( i ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcompound Tag . getInteger (" id ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel Ġ= Ġcompound Tag . getInteger (" lvl ") čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn chant ment . get Enchant ment ByID ( id )?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ+= Ġit . calc Modifier Damage ( level , Ġdamage Source ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . coerce In ( 0 , Ġ 2 0 ) čĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 . 0 F Ġ- Ġmodifier Ġ/ Ġ 2 5 . 0 F čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun ĠItemStack . get Enchant ment Level ( ench ant ment Id : ĠInt ): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġthis . ench ant ment Tag List . tag Count ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġthis . ench ant ment Tag List . get Compound Tag At ( i ). getInteger (" id ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġen chant ment Id ) Ġcontinue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . ench ant ment Tag List . get Compound Tag At ( i ). getInteger (" lvl ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġequip Best Weapon ( prefer Weapon : ĠP refer Weapon Ġ= ĠP refer Weapon . NONE , Ġallow Tool : ĠBoolean Ġ= Ġfalse ) Ġ{ čĊĠĠĠĠĠĠĠ ĠGlobals . mc . player . hot bar Slots . filter By Stack Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġit . item čĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġis ĠItem S word Ġ|| Ġitem Ġis ĠItem A xe Ġ|| Ġallow Tool Ġ&& Ġitem Ġis ĠItem Tool čĊĠĠĠĠĠĠĠ Ġ}. max By OrNull Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Stack Ġ= Ġit . stack čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitem Stack . item čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdamage Ġ= Ġitem Stack . attack Damage čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefer Weapon Ġ== ĠP refer Weapon . S WORD Ġ&& Ġitem Ġis ĠItem S word Ġ-> Ġdamage Ġ* Ġ 1 0 . 0 F čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefer Weapon Ġ== ĠP refer Weapon . AX E Ġ&& Ġitem Ġis ĠItem A xe Ġ-> Ġdamage Ġ* Ġ 1 0 . 0 F čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdamage čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġswap To Slot ( it ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġenum Ġclass ĠP refer Weapon Ġ{ čĊĠĠĠĠĠĠĠ ĠS WORD , ĠAX E , ĠNONE čĊĠĠĠ Ġ} čĊč Ċ }