/* ĠCopyright Ġ( c ) Ġ 2 0 1 9 - 2 0 2 0 ĠDe fl ated Pick le Ġunder Ġthe ĠMIT Ġlicense Ġ*/ Ċ Ċ package Ġcom . def lated pickle . bug magic . common . capability Ċ Ċ import Ġcom . def lated pickle . bug magic . Reference Ċ import Ġcom . def lated pickle . bug magic . api . capability . Spell C aster Ċ import Ġcom . def lated pickle . bug magic . api . spell . Spell Ċ import Ġjava . util . UUID Ċ import Ġjava . util . concurrent . Callable Ċ import Ġkotlin . collections . HashMap Ċ import Ġnet . minecraft . nbt . NBT Base Ċ import Ġnet . minecraft . nbt . NBT Tag Compound Ċ import Ġnet . minecraft . util . Enum Facing Ċ import Ġnet . minecraft . util . Resource Location Ċ import Ġnet . minecraftforge . common . capabilities . Capability Ċ import Ġnet . minecraftforge . common . capabilities . Capability Inject Ċ import Ġnet . minecraftforge . common . capabilities . Capability Manager Ċ import Ġnet . minecraftforge . common . capabilities . IC ap ability Provider Ċ import Ġnet . minecraftforge . common . capabilities . IC ap ability Serializable Ċ Ċ /** Ċ Ġ* ĠStores Ġthe Ġcast ed Ġspell s , Ġuser , Ġcasting Ġstate Ġand Ġcasting Ġprogress Ċ Ġ*/ Ċ object ĠSpell C aster Capability Ġ{ ĊĠĠĠ Ġval ĠNAME Ġ= ĠResource Location ( Reference . MOD _ ID , Ġ" spell _ caster ") ĊĊĠĠĠ Ġfun Ġis Cap able ( thing : ĠI Capability Provider ): ĠSpell C aster ? Ġ= Ġthing . get Capability ( Provider . CAP ABILITY , Ġnull ) ĊĊĠĠĠ Ġclass ĠImplementation Ġ: ĠSpell C aster Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcast Spell Map Ġ= Ġhash Map Of < Spell , ĠInt >() ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġowner : ĠUUID ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Cast ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcasting For Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠNew ly Ġcast Ġspell s Ġwill Ġincrease Ġthe Ġcount Ġof Ġthe Ġspell ĊĠĠĠĠĠĠĠĠ Ġ* ĠUn cast Ġspell s Ġwill Ġdecrease Ġthe Ġcount , Ġunless Ġde creasing Ġit Ġwould Ġresult Ġin Ġ 0 , Ġthen Ġthe Ġspell Ġkey Ġis Ġremoved ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Cast Spell Map (): ĠHashMap < Spell , ĠInt > Ġ= Ġcast Spell Map ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Owner ( value : ĠUUID ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Owner (): ĠUUID ? Ġ= Ġowner ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Cast ing ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! value ) Ġcasting For Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cast ing Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Cast ing (): ĠBoolean Ġ= Ġis Cast ing ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Cast ing Current ( value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcasting For Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Cast ing Current (): ĠFloat Ġ= Ġcasting For ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠStorage Ġ: ĠCap ability . I Storage < Spell C aster > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread NBT ( capability : ĠCap ability < Spell C aster > ?, Ġinstance : ĠSpell C aster ?, Ġside : ĠEnum Facing ?, Ġn bt : ĠN BT Base ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġis ĠImplementation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( nbt Ġas ĠN BT Tag Compound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . is Cast ing Ġ= Ġthis . getBoolean (" is Cast ing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . cast ing Current Ġ= Ġthis . get Float (" cast ing Current ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Can Ġnot Ġdeserialize Ġto Ġan Ġinstance Ġthat Ġisn 't Ġthe Ġdefault Ġimplementation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite NBT ( capability : ĠCap ability < Spell C aster > ?, Ġinstance : ĠSpell C aster ?, Ġside : ĠEnum Facing ?): ĠN BT Base ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠN BT Tag Compound (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Boolean (" is Cast ing ", Ġinstance . is Cast ing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Float (" cast ing Current ", Ġinstance . cast ing Current ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFactory Ġ: ĠCallable < Spell C aster > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠSpell C aster Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠImplementation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠProvider Ġ: ĠI Capability Serializable < NBT Base > Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Capability Inject ( Spell C aster :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠCAP ABILITY : ĠCap ability < Spell C aster > ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠINSTANCE Ġ= ĠCAP ABILITY . default Instance ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Capability ( capability : ĠCap ability <* >, Ġfacing : ĠEnum Facing ?): ĠBoolean Ġ= Ġcapability Ġ== ĠCAP ABILITY ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġget Capability ( capability : ĠCap ability < T >, Ġfacing : ĠEnum Facing ?): ĠT ? Ġ= Ġif Ġ( capability Ġ== ĠCAP ABILITY ) ĠCAP ABILITY . cast ( this . INSTANCE ) Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize NBT (): ĠN BT Base Ġ= ĠCAP ABILITY . storage . write NBT ( CAP ABILITY , Ġthis . INSTANCE , Ġnull ) !! ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize NBT ( nbt : ĠN BT Base ) Ġ= ĠCAP ABILITY . storage . read NBT ( CAP ABILITY , Ġthis . INSTANCE , Ġnull , Ġn bt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister () Ġ{ ĊĠĠĠĠĠĠĠ ĠCap ability Manager . INSTANCE . register ( Spell C aster :: class . java , ĠStorage (), ĠFactory ()) ĊĠĠĠ Ġ} Ċ } Ċ