/* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠL an tern Server , Ġlicensed Ġunder Ġthe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) ĠL an tern Power ed Ġ< https :// www . lan tern powered . org > Ċ Ġ* ĠCopyright Ġ( c ) ĠSp onge Power ed Ġ< https :// www . spongepowered . org > Ċ Ġ* ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the ĠSoftware ), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED ĠAS ĠIS , ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġorg . lan tern powered . api . inject . service Ċ Ċ import Ġcom . google . inject . Provided By Ċ import Ġorg . lan tern powered . api . Lan tern Ċ import Ġorg . lan tern powered . api . ext .* Ċ import Ġorg . lan tern powered . api . plugin . Plugin Container Ċ import Ġorg . spongepowered . api . service . Provider Registration Ċ import Ġjava . util . Optional Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġreference Ġfor Ġa Ġservice Ġof Ġtype Ġ[ T ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġservice Ġtype Ċ Ġ*/ Ċ @ Functional Interface Ċ @ Provided By ( Service Ref Provider :: class ) Ċ interface ĠService Ref < T > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġprovider Ġregistration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġregistration : ĠProvider Registration < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġservice Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtype : ĠClass < T > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . registration . service ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġ[ Plugin Container ] Ġthat Ġregistered Ġthe Ġservice Ġinstance . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġplugin : ĠPlugin Container ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . registration . plugin ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġservice Ġinstance . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġinstance : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . registration . provider ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke () Ġ= Ġthis . instance ĊĠĠĠ Ġfun Ġget () Ġ= Ġthis . instance ĊĊĠĠĠ Ġfun Ġ< E > Ġ` as `( type : ĠClass < E >): ĠOptional < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( type . is Instance ( instance )) ĠOptional . of ( type . cast ( instance )) Ġelse ĠOptional . empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Service Ref ] Ġreference Ġfor Ġthe Ġgiven Ġservice Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġof ( type : ĠClass < T >) Ġ= Ġobject Ġ: ĠService Ref < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġregistration : ĠProvider Registration < T > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! Lan tern . service Manager . get Registration ( type ) Ġ?: Ġthrow ĠIllegalStateException (" Service Ġnot Ġfound : Ġ${ type . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ