package Ġio . github . fa ec raft . heart sh aped box . logic . damage Ċ Ċ import Ġio . github . fa ec raft . heart sh aped box . bad . Bad Mixin Atomic Flags Ċ import Ġio . github . fa ec raft . heart sh aped box . body . Body Part Provider Ċ import Ġio . github . fa ec raft . heart sh aped box . logic . damage . impl .* Ċ import Ġnet . minecraft . ench ant ment . Enchant ment Helper Ċ import Ġnet . minecraft . entity . Damage Util Ċ import Ġnet . minecraft . entity . damage . Damage Source Ċ import Ġnet . minecraft . entity . effect . Status Effects Ċ import Ġnet . minecraft . server . network . Server Player Entity Ċ import Ġnet . minecraft . stat . Stats Ċ import Ġjava . util .* Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . round ToInt Ċ Ċ public Ġobject ĠDamage Handler Dispatcher Ġ{ ĊĠĠĠ Ġprivate Ġval Ġhandlers Ġ= ĠArrayList < Damage Handler >() ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Suppress (" Magic Number ") Ġ Ġ// ĠBased Ġon Ġvanilla Ġcode ĊĠĠĠ Ġpublic Ġfun Ġhandle Damage ( player : ĠServer Player Entity , Ġsource : ĠDamage Source , Ġamount : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmut Amount Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġplayer Ġas ĠBody Part Provider ĊĊĠĠĠĠĠĠĠ Ġ// ĠT aken Ġdirectly Ġfrom Ġdamage Ġlogic ĊĠĠĠĠĠĠĠ Ġif Ġ( player . has Status Effect ( Status Effects . RE SIST ANCE ) Ġ&& Ġsource Ġ!= ĠDamage Source . OUT _ OF _ WORLD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġ( player . getStatus Effect ( Status Effects . RE SIST ANCE ) !!. amp l ifier Ġ+ Ġ 1 ) Ġ* Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġ 2 5 Ġ- Ġk ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġmut Amount Ġ* Ġj . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġmut Amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmut Amount Ġ= Ġmax ( f Ġ/ Ġ 2 5 . 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġg Ġ- Ġmut Amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h Ġ> Ġ 0 . 0 f Ġ&& Ġh Ġ< ĠFloat . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . increase Stat ( Stats . DA MAGE _ RE SIST ED , Ġ( h Ġ* Ġ 1 0 . 0 f ). round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDone Ġto Ġdeal Ġdamage Ġin Ġa Ġsingle Ġgo ĊĠĠĠĠĠĠĠ Ġvar Ġcollected Damage Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ// ĠS aves Ġstate Ġbefore Ġdamage Ġhandled ĊĠĠĠĠĠĠĠ Ġval Ġstate Before Ġ= Ġprovider . writeTo Tag () ĊĠĠĠĠĠĠĠ Ġfor Ġ( possible Handler Ġin Ġhandlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( possible Handler . should Handle ( source )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġpossible Handler . get Possible Armor Pieces ( source , Ġplayer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= ĠEn chant ment Helper . get Protection Amount ( items , Ġsource ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmut Amount Ġ= ĠDamage Util . get Inf lict ed Damage ( mut Amount , Ġk . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpossible Handler . handle Damage ( player , Ġplayer Ġas ĠBody Part Provider , Ġsource , Ġmut Amount ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollected Damage Ġ+= Ġmut Amount Ġ- Ġresult . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmut Amount Ġ= Ġresult . second ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . first Ġ|| Ġresult . second Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġdeal Ġdamage , Ġroll Ġback Ġif Ġfailed ĊĠĠĠĠĠĠĠ Ġ// Ġsee ĠBad Mixin Atomic Flags Ġfor Ġthe Ġreason Ġbehind Ġthis ĊĠĠĠĠĠĠĠ ĠBad Mixin Atomic Flags . call Super Damage . set ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġdid Deal Damage Ġ= Ġplayer . damage ( source , Ġcollected Damage ) ĊĠĠĠĠĠĠĠ ĠBad Mixin Atomic Flags . call Super Damage . set ( false ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRe vert Ġthe Ġstate Ġif Ġvanilla Ġdoesn 't Ġlike Ġour Ġdamage Ġfor Ġwhatever Ġreason ĊĠĠĠĠĠĠĠ Ġif Ġ(! did Deal Damage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . read From Tag ( state Before ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdid Deal Damage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġregister Handlers () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLower Ġindices Ġget Ġtested Ġfirst Ġ( i . e Ġhigher Ġpriority ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠL ik ely Ġentities ĊĠĠĠĠĠĠĠ Ġhandlers . add ( Entity Damage Handler ()) ĊĠĠĠĠĠĠĠ Ġhandlers . add ( Projectile Damage Handler ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnvironment ĊĠĠĠĠĠĠĠ Ġhandlers . add ( D rown Damage Handler ()) ĊĠĠĠĠĠĠĠ Ġhandlers . add ( Fall ing Block Damage Handler ()) ĊĠĠĠĠĠĠĠ Ġhandlers . add ( Fall Damage Handler ()) ĊĠĠĠĠĠĠĠ Ġhandlers . add ( Hot Floor Damage Handler ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOther ĊĠĠĠĠĠĠĠ Ġhandlers . add ( Generic And Remaining Damage Handler ()) ĊĠĠĠ Ġ} Ċ } Ċ