package Ġcom . w yn n lab . min est om . core . damage Ċ Ċ import Ġcom . w yn n lab . min est om . core . Element Ċ import Ġcom . w yn n lab . min est om . core . player .* Ċ import Ġcom . w yn n lab . min est om . items . Def ense Ċ import Ġcom . w yn n lab . min est om . items . Identification Ċ import Ġcom . w yn n lab . min est om . util . tag Ċ import Ġnet . ky ori . ad venture . audience . Audience Ċ import Ġnet . ky ori . ad venture . text . Component Ċ import Ġnet . min est om . server . coordinate . Pos Ċ import Ġnet . min est om . server . instance . Instance Ċ import Ġnet . min est om . server . item . ItemStack Ċ import Ġnet . min est om . server . tag . Boolean Tag Ċ import Ġnet . min est om . server . tag . Tag Ċ import Ġnet . min est om . server . tag . Tag Handler Ċ import Ġjava . util .* Ċ Ċ interface ĠDamage Source Ġ{ ĊĠĠĠ Ġval Ġweapon : ĠItemStack ? ĊĠĠĠ Ġfun Ġget Skill ( index : ĠInt ): ĠInt ĊĠĠĠ Ġfun ĠgetId ( identification : ĠIdent ification ): ĠInt ĊĠĠĠ Ġval Ġattack Speed Multiplier : ĠFloat ĊĠĠĠ Ġval Ġposition : ĠPos ĊĊĠĠĠ Ġ@ Jvm Inline ĊĠĠĠ Ġvalue Ġclass ĠPlayer ( val Ġplayer : Ġnet . min est om . server . entity . Player ) Ġ: ĠDamage Source Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġweapon Ġget () Ġ= Ġplayer . item Weapon ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Skill ( index : ĠInt ): ĠInt Ġ= Ġplayer . get Effective Skill ( index ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetId ( identification : ĠIdent ification ): ĠInt Ġ= ĠgetId ( player , Ġidentification ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġattack Speed Multiplier : ĠFloat Ġget () Ġ= Ġget Attack Speed ( player )?. spell Multiplier Ġ?: Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġposition : ĠPos Ġget () Ġ= Ġplayer . position ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠDamage Target Ġ: ĠTag Handler Ġ{ ĊĠĠĠ Ġfun Ġdamage ( value : ĠFloat ) ĊĠĠĠ Ġval Ġhealth : ĠFloat ĊĠĠĠ Ġval Ġmax Health : ĠFloat ĊĠĠĠ Ġval Ġinstance : ĠInstance ? ĊĠĠĠ Ġval Ġposition : ĠPos ĊĠĠĠ Ġval Ġeye Height : ĠDouble ĊĠĠĠ Ġval Ġuuid : ĠUUID ĊĠĠĠ Ġval Ġis Dead : ĠBoolean ĊĠĠĠ Ġval Ġcustom Name : ĠComponent ? ĊĠĠĠ Ġval Ġbase Def ense : ĠFloat ĊĠĠĠ Ġval Ġdef ense : ĠDef ense ĊĠĠĠ Ġfun Ġget Ele Def Percent ( index : ĠInt ): ĠFloat ĊĠĠĠ Ġfun Ġtake Kn ock back ( a : ĠFloat , Ġb : ĠDouble , Ġc : ĠDouble ) ĊĠĠĠ Ġval Ġview ers As Audience : ĠAud ience ĊĊĠĠĠ Ġ@ Jvm Inline ĊĠĠĠ Ġvalue Ġclass ĠPlayer ( val Ġplayer : Ġnet . min est om . server . entity . Player ) Ġ: ĠDamage Target Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdamage ( value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . damage ( net . min est om . server . entity . damage . Damage Type (" minecraft : custom "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ* Ġ 2 0 f Ġ/ Ġmax Health ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġinstance Ġget () Ġ= Ġplayer . instance ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġposition Ġget () Ġ= Ġplayer . position ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġeye Height Ġget () Ġ= Ġplayer . eye Height ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġuuid Ġget () Ġ= Ġplayer . uuid ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġis Dead Ġget () Ġ= Ġplayer . is Dead ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcustom Name Ġget () Ġ= Ġplayer . name ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġhealth Ġget () Ġ= Ġplayer . health Ġ* Ġmax Health Ġ/ Ġ 2 0 f ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmax Health Ġget () Ġ= Ġplayer . getTag ( player Max Health Tag ) !!. toFloat () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġbase Def ense Ġget () Ġ= Ġ 0 f Ġ// TODO ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdef ense Ġget () Ġ= Ġget Def ense ( player ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Ele Def Percent ( index : ĠInt ): ĠFloat Ġ= ĠgetId ( player , Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠIdent ification . Bonus Earth Def ense ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠIdent ification . Bonus Th under Def ense ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠIdent ification . Bonus Water Def ense ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> ĠIdent ification . Bonus Fire Def ense ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> ĠIdent ification . Bonus Air Def ense ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" unreachable ") ĊĠĠĠĠĠĠĠ Ġ}) Ġ/ Ġ 1 0 0 f ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtake Kn ock back ( a : ĠFloat , Ġb : ĠDouble , Ġc : ĠDouble ) Ġ= Ġplayer . take Kn ock back ( a , Ġb , Ġc ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġview ers As Audience Ġget () Ġ= Ġplayer . view ers As Audience ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> Ġget Tag ( tag : ĠTag < T >): ĠT ? Ġ= Ġplayer . getTag ( tag ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> Ġset Tag ( tag : ĠTag < T >, Ġvalue : ĠT ?) Ġ= Ġplayer . setTag ( tag , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠDamage ( ĊĠĠĠ Ġval Ġneutral : ĠInt , ĊĠĠĠ Ġval Ġearth : ĠInt , ĊĠĠĠ Ġval Ġth under : ĠInt , ĊĠĠĠ Ġval Ġwater : ĠInt , ĊĠĠĠ Ġval Ġfire : ĠInt , ĊĠĠĠ Ġval Ġair : ĠInt , Ċ ) Ġ: ĠIterable < Damage Part > Ġ{ ĊĠĠĠ Ġval Ġsum Ġ= Ġneutral Ġ+ Ġearth Ġ+ Ġth under Ġ+ Ġwater Ġ+ Ġfire Ġ+ Ġair ĊĠĠĠ Ġval Ġzero Ġ= Ġsum Ġ== Ġ 0 ĊĊĠĠĠ Ġfun Ġapply Conversion ( conversion : ĠConversion ) Ġ= ĠDamage ( ĊĠĠĠĠĠĠĠ Ġ( neutral Ġ* Ġconversion . neutral ). toInt (), ĊĠĠĠĠĠĠĠ Ġ( earth Ġ* Ġconversion . earth ). toInt (), ĊĠĠĠĠĠĠĠ Ġ( th under Ġ* Ġconversion . th under ). toInt (), ĊĠĠĠĠĠĠĠ Ġ( water Ġ* Ġconversion . water ). toInt (), ĊĠĠĠĠĠĠĠ Ġ( fire Ġ* Ġconversion . fire ). toInt (), ĊĠĠĠĠĠĠĠ Ġ( air Ġ* Ġconversion . air ). toInt (), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġiterator () Ġ= ĠIterator () ĊĊĠĠĠ Ġinner Ġclass ĠIterator Ġ: Ġkotlin . collections . Iterator < Damage Part > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġi Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next () Ġ= Ġi Ġ< Ġ 6 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠDamage Part Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ i ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDamage Part ( Element . values ()[ if Ġ( i Ġ== Ġ 1 ) Ġ 0 Ġelse Ġi ], Ġwhen Ġ( i Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġneutral ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġearth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġth under ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġwater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġfire ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġair ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith ( transform : Ġ( index : ĠInt , Ġdamage : ĠInt ) Ġ-> ĠInt ) Ġ= ĠDamage ( ĊĠĠĠĠĠĠĠ Ġtransform ( 0 , Ġneutral ), ĊĠĠĠĠĠĠĠ Ġtransform ( 1 , Ġearth ), ĊĠĠĠĠĠĠĠ Ġtransform ( 2 , Ġth under ), ĊĠĠĠĠĠĠĠ Ġtransform ( 3 , Ġwater ), ĊĠĠĠĠĠĠĠ Ġtransform ( 4 , Ġfire ), ĊĠĠĠĠĠĠĠ Ġtransform ( 5 , Ġair ), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ) Ġ= Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġneutral ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġearth ĊĠĠĠĠĠĠĠĠ 2 Ġ-> Ġth under ĊĠĠĠĠĠĠĠĠ 3 Ġ-> Ġwater ĊĠĠĠĠĠĠĠĠ 4 Ġ-> Ġfire ĊĠĠĠĠĠĠĠĠ 5 Ġ-> Ġair ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" unreachable ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠZero Ġ= ĠDamage ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun ĠDamage ( generator : Ġ( Int ) Ġ-> ĠInt ) Ġ= ĊĠĠĠ ĠDamage ( generator ( 0 ), Ġgenerator ( 1 ), Ġgenerator ( 2 ), Ġgenerator ( 3 ), Ġgenerator ( 4 ), Ġgenerator ( 5 )) Ċ Ċ data Ġclass ĠDamage Part ( ĊĠĠĠ Ġval Ġelement : ĠElement , ĊĠĠĠ Ġval Ġvalue : ĠInt Ċ ) Ċ Ċ data Ġclass ĠDamage Modifiers ( ĊĠĠĠ Ġval Ġspell : ĠBoolean , ĊĠĠĠ Ġval Ġmultiplier : ĠFloat , ĊĠĠĠ Ġval Ġconversion : ĠConversion Ċ ) Ċ Ċ data Ġclass ĠConversion ( ĊĠĠĠ Ġval Ġneutral : ĠFloat , ĊĠĠĠ Ġval Ġearth : ĠFloat , ĊĠĠĠ Ġval Ġth under : ĠFloat , ĊĠĠĠ Ġval Ġwater : ĠFloat , ĊĠĠĠ Ġval Ġfire : ĠFloat , ĊĠĠĠ Ġval Ġair : ĠFloat , Ċ ) Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ) Ġ= Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġneutral ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġearth ĊĠĠĠĠĠĠĠĠ 2 Ġ-> Ġth under ĊĠĠĠĠĠĠĠĠ 3 Ġ-> Ġwater ĊĠĠĠĠĠĠĠĠ 4 Ġ-> Ġfire ĊĠĠĠĠĠĠĠĠ 5 Ġ-> Ġair ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" unreachable ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠNe utral Conversion Ġ= ĠConversion ( 1 f , Ġ 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) Ċ Ċ val ĠNe utral Damage Modifiers Ġ= ĠDamage Modifiers ( false , Ġ 1 f , ĠNe utral Conversion ) Ċ Ċ private Ġval Ġplayer Po ison ed Tag Ġ= ĠBoolean Tag (" po ison ed ")