@ file : Use Serial izers ( Duration Serializer :: class ) Ċ Ċ package Ġcom . mine in aby ss . cur se . effects Ċ Ċ import Ġcom . mine in aby ss . id of r ont . de structure . component 1 Ċ import Ġcom . mine in aby ss . id of r ont . de structure . component 2 Ċ import Ġcom . mine in aby ss . id of r ont . de structure . component 3 Ċ import Ġcom . mine in aby ss . id of r ont . serialization . Duration Serializer Ċ import Ġcom . mine in aby ss . id of r ont . time . ticks Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Transient Ċ import Ġkotlinx . serialization . Use Serial izers Ċ import Ġorg . bukkit . Particle Ċ import Ġorg . bukkit . Sound Ċ import Ġorg . bukkit . attribute . Attribute Ċ import Ġorg . bukkit . attribute . Attribute Modifier Ċ import Ġorg . bukkit . entity . Player Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . time . Duration Ċ Ċ @ Serializable Ċ @ Serial Name (" max Health ") Ċ data Ġclass ĠMax Health Change Effect Ġconstructor ( ĊĠĠĠ Ġval Ġadd Max Health : ĠDouble , ĊĠĠĠ Ġoverride Ġval Ġoffset : ĠDuration Ġ= Ġ 0 . ticks , ĊĠĠĠ Ġoverride Ġval Ġduration : ĠDuration , ĊĠĠĠ Ġoverride Ġval Ġiterations : ĠInt Ġ= Ġ 1 , ĊĠĠĠ Ġval Ġmin Health : ĠDouble ? Ġ= Ġnull , Ċ ) Ġ: ĠAbstract Asc ension Effect () Ġ{ ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġvar Ġmodifier : ĠAttribute Modifier ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġapply Effect ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Health Ġ= Ġplayer . getAttribute ( Attribute . GENERIC _ MAX _ HE ALTH )?. value Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ// if Ġmore Ġhealth Ġthan Ġmin Health , Ġor Ġenough Ġhealth Ġto Ġsafely Ġremove Ġadd Max Health ĊĠĠĠĠĠĠĠ Ġif Ġ( max Health Ġ> Ġmin Health Ġ?: Ġabs ( add Max Health )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Mod Ġ= ĠAttribute Modifier ( CUR SE _ MAX _ HE ALTH , Ġadd Max Health , ĠAttribute Modifier . Operation . ADD _ NUMBER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġnew Mod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Effects . add ( new Mod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . getAttribute ( Attribute . GENERIC _ MAX _ HE ALTH )?. add Modifier ( new Mod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( x , Ġy , Ġz ) Ġ= Ġplayer . eye Location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . spawn Particle ( Particle . SO UL , Ġx , Ġy , Ġz , Ġ 6 , Ġ 0 . 2 , Ġ 0 . 5 , Ġ 0 . 2 , Ġ 0 . 0 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . play Sound ( player . location , ĠSound . P ARTIC LE _ SO UL _ ESCAPE , Ġ 1 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclean Up ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactive Effects . remove ( modifier ) ĊĠĠĠĠĠĠĠ Ġmodifier ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . getAttribute ( Attribute . GENERIC _ MAX _ HE ALTH )?. remove Modifier ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactive Effects Ġ= Ġmutable Set Of < Attribute Modifier >() ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCUR SE _ MAX _ HE ALTH Ġ= Ġ" cur se . max _ health " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone () Ġ= Ġcopy () Ċ } Ċ