package Ġme . r icky . k pl . ench ants Ċ Ċ import Ġorg . bukkit . event . Event Ċ import Ġkotlin . reflect . K Class Ċ Ċ type alias ĠCE Listener DSL < E > Ġ= ĠCE Listener DSL Data < E >. () Ġ-> ĠUnit Ċ Ċ class ĠCE Listener DSL Data < E > Ġ{ ĊĠ Ġvar Ġactivate : ĠE .( lvl : ĠInt ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠ Ġvar Ġdeactivate : ĠE .( lvl : ĠInt ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠ Ġfun Ġon Activation ( on Activate : ĠE .( lvl : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġactivate Ġ= Ġon Activate ĊĠ Ġ} ĊĊĠ Ġfun Ġon De activation ( on De activate : ĠE .( lvl : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġdeactivate Ġ= Ġon De activate ĊĠ Ġ} Ċ } Ċ Ċ class ĠCE t Listeners DSL Ġ: ĠMutable Map < K Class <* >, ĠCE t Listener <* >> Ġby Ġmutable Map Of () Ġ{ ĊĠ Ġinline Ġfun Ġ< re ified ĠE Ġ: ĠEvent > Ġlistener Of ( ĊĠĠĠ Ġno inline Ġactivate : ĠE .( lvl : ĠInt ) Ġ-> ĠUnit , ĊĠĠĠ Ġno inline Ġdeactivate : ĠE .( lvl : ĠInt ) Ġ-> ĠUnit ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis [ E :: class ] Ġ= ĠCE t Listener ( activate , Ġdeactivate ) ĊĠ Ġ} ĊĊĠ Ġinline Ġfun Ġ< re ified ĠE Ġ: ĠEvent > Ġlistener Of ( dsl : ĠCE Listener DSL < E >) Ġ{ ĊĠĠĠ Ġval Ġdata Ġ= ĠCE Listener DSL Data < E >(). apply ( dsl ) ĊĠĠĠ Ġthis [ E :: class ] Ġ= ĠCE t Listener ( data . activate , Ġdata . deactivate ) ĊĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġcustom Enchant Listeners ( dsl : ĠCE t Listeners DSL . () Ġ-> ĠUnit ): ĠMap < K Class <* >, ĠCE t Listener <* >> Ġ{ ĊĠ Ġreturn ĠCE t Listeners DSL (). apply ( dsl ) Ċ } Ċ Ċ inline Ġfun Ġcustom Enchant ( ĊĠ Ġid : ĠString , ĊĠ Ġname : ĠString , ĊĠ Ġlvl Range : ĠInt Range , ĊĠ Ġtarget : ĠEn chant Target , ĊĠ Ġd sl : ĠCE t Listeners DSL . () Ġ-> ĠUnit Ċ ): ĠCustom Enchant Ġ{ ĊĠ Ġreturn ĠSimple Custom Enchant ( id , Ġname , Ġlvl Range , Ġtarget , Ġcustom Enchant Listeners ( dsl )) Ċ } Ċ Ċ inline Ġfun ĠCE Manager . Companion . add Enchant ( ĊĠ Ġid : ĠString , ĊĠ Ġname : ĠString , ĊĠ Ġlvl Range : ĠInt Range , ĊĠ Ġtarget : ĠEn chant Target , ĊĠ Ġd sl : ĠCE t Listeners DSL . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġadd Enchant ( custom Enchant ( id , Ġname , Ġlvl Range , Ġtarget , Ġd sl )) Ċ }