package Ġcom . red gr ape fruit . fabric regist rar Ċ Ċ import Ġnet . minecraft . util . Identifier Ċ import Ġnet . minecraft . util . registry . Mutable Registry Ċ import Ġnet . minecraft . util . registry . Registry Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Registry Provider ] Ġis Ġa Ġwrapper Ġaround Ġa Ġmethod Ġof Ġregistering Ġcontent Ġthat Ġuses Ġ[ Identifier ] s Ġas Ġkeys . Ċ Ġ* Ċ Ġ* ĠThe Ġmain Ġreason Ġfor Ġdoing Ġthis Ġis Ġthat Ġnot Ġall Ġcontent Ġis Ġstored Ġwithin Ġa Ċ Ġ* Ġstandard Ġ[ Registry ], Ġfor Ġexample , Ġ` Fabric Model Predicate Provider Registry ` Ġand Ġeven Ġsome Ġexamples Ġin Ġvanilla Ċ Ġ* ĠMinecraft Ġcode ! Ċ Ġ* Ċ Ġ* Ġ[ Registry Provider ] Ġ** does n 't Ġuse Ġgener ics **, Ġas Ġthat Ġwould Ġmake Ġtrouble Ġwith Ġthe Ġ_ lo vel y _ Ġ` Any ?` Ġtypes Ġin Ċ Ġ* ĠKotlin Ġreflection , Ġso Ġyou Ġhave Ġto Ġcast Ġyour Ġtypes Ġin Ġan Ġunsafe Ġmanner . Ċ Ġ* Ċ Ġ* Ġ** There Ġare Ġbuilt - in Ġ[ Registry Provider ] s ** Ġfor Ġstandard Ġ[ Registry ] s Ġand Ġsimple Ġ[ Mutable Map ] s . ĠCreate Ġthem Ċ Ġ* Ġwith Ġ[ for Registry ] Ġand Ġ[ for Map ]. Ċ Ġ* Ċ Ġ* ĠYou Ġdon 't Ġhave Ġto Ġimplement Ġthis Ġinterface Ġto Ġdefine Ġa Ġ[ Registry Provider ], Ġif Ġyou 're Ġa Ġfan Ġof Ġexcess ive Ċ Ġ* Ġlambda Ġusage Ġ( like Ġme ), Ġyou Ġcan Ġuse Ġthe Ġ[ create ] Ġfunction . Ċ Ġ*/ Ċ interface ĠRegistry Provider Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegister Ġyour Ġ[ content ] Ġunder Ġa Ġgiven Ġ[ id ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġregister ( id : ĠIdentifier , Ġcontent : ĠAny ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Registry Provider ] Ġbacked Ġby Ġa Ġsimple ĠKotlin Ġ[ Mutable Map ]. ĠUses Ġ[ Map Registry Provider ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġfor Map ( map : ĠMutable Map < Identifier , ĠT >): ĠRegistry Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Registry Provider ( map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Registry Provider ] Ġbacked Ġby Ġa Ġstandard ĠMinecraft Ġ[ Registry ]. ĠUses Ġ[ Standard Registry Provider ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġfor Registry ( registry : ĠRegistry < T >): ĠRegistry Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( registry Ġ! is ĠMutable Registry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Tri ed Ġto Ġobtain Ġregistry Ġprovider Ġfor Ġan Ġimmutable Ġregistry !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStandard Registry Provider ( registry ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġcustom Ġ[ Registry Provider ] Ġbacked Ġby Ġa Ġgiven Ġlambda Ġexpression . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( lambda : Ġ( id : ĠIdentifier , Ġcontent : ĠAny ) Ġ-> ĠUnit ): ĠRegistry Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLambda Registry Provider ( lambda ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġinternal Register ( id : ĠIdentifier , Ġcontent : ĠAny , Ġprovider : ĠRegistry Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . register ( id , Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegistry Provider Use Callback . EVENT . inv oker (). on Provider Used ( provider , Ġid , Ġcontent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Registry Provider ] Ġimplementation Ġbacked Ġby Ġa Ġlambda Ġexpression . Ċ Ġ*/ Ċ class ĠLambda Registry Provider ( private Ġval Ġimpl : Ġ( id : ĠIdentifier , Ġcontent : ĠAny ) Ġ-> ĠUnit ) ĊĠĠĠ Ġ: ĠRegistry Provider Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġregister ( id : ĠIdentifier , Ġcontent : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimpl ( id , Ġcontent ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Registry Provider ] Ġimplementation Ġbacked Ġby Ġa Ġstandard ĠMinecraft Ġ[ Registry ]. Ċ Ġ*/ Ċ class ĠStandard Registry Provider < T >( private Ġval Ġregistry : ĠMutable Registry < T >) Ġ: ĠRegistry Provider Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġregister ( id : ĠIdentifier , Ġcontent : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRegistry . register ( registry , Ġid , Ġcontent Ġas ĠT ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Registry Provider ] Ġimplementation Ġbacked Ġby Ġa Ġsimple Ġ[ Mutable Map ]. Ċ Ġ*/ Ċ class ĠMap Registry Provider < T >( private Ġval Ġmap : ĠMutable Map < Identifier , ĠT >) Ġ: ĠRegistry Provider Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġregister ( id : ĠIdentifier , Ġcontent : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap [ id ] Ġ= Ġcontent Ġas ĠT ĊĠĠĠ Ġ} Ċ } Ċ