package Ġcom . exp an se mc . b ending . api . registry Ċ Ċ import Ġorg . bukkit . Bu kkit Ċ import Ġjava . util .* Ċ Ċ interface ĠFactory Registry Ġ{ ĊĠĠĠ Ġfun Ġ< T : ĠAny > Ġregister ( type : ĠClass < T >, Ġsupplier : Ġ() Ġ-> ĠT ): ĠFactory Registry ĊĊĠĠĠ Ġ@ Throws ( NoSuch ElementException :: class ) ĊĠĠĠ Ġfun Ġ< T : ĠAny > Ġcreate ( type : ĠClass < T >): ĠT ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġbetter Ġnull Ġhandling ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠFactory Registry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ ĠBu kkit . get Services Manager (). get Registration ( Factory Registry :: class . java ) !!. provider ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠFactory Registry . register ( no inline Ġsupplier : Ġ() Ġ-> ĠT ): ĠFactory Registry Ġ= ĊĠĠĠ Ġthis . register ( T :: class . java , Ġsupplier ) Ċ Ċ @ Throws ( NoSuch ElementException :: class ) Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠFactory Registry . create (): ĠT Ġ= ĊĠĠĠ Ġthis . create ( T :: class . java )