package Ġio . e jek ta . k amb rik x . data Ċ Ċ import Ġio . e jek ta . k amb rik . K amb rik Ċ import Ġio . e jek ta . k amb rik . serial . serializers . Text Serializer Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . builtins . Map Serializer Ċ import Ġkotlinx . serialization . builtins . serializer Ċ import Ġkotlinx . serialization . json . Json Element Ċ import Ġkotlinx . serialization . serializer Ċ import Ġnet . minecraft . text . Text Ċ import Ġjava . io . File Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . full . star Project ed Type Ċ Ċ abstract Ġclass ĠData File ( val Ġsrc : ĠFile ) Ġ{ ĊĊĠĠĠ Ġinternal Ġdata Ġclass ĠData Request < T Ġ: ĠAny >( val Ġserializer : ĠK Serializer < T >, Ġval Ġdefault : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġencoded : ĠJson Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠK amb rik . Serial . Format . encode ToJson Element ( serializer , Ġdefault ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġencode ( value : ĠAny ?): ĠJson Element Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠK amb rik . Serial . Format . encode ToJson Element ( serializer , Ġvalue Ġas ? ĠT Ġ?: Ġdefault ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecode ( data : ĠJson Element ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠK amb rik . Serial . Format . decode FromJson Element ( serializer , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġ< T Ġ: ĠAny > Ġinvoke ( ĊĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġserializer : ĠK Serializer < T >, ĊĠĠĠĠĠĠĠ Ġdefault : Ġ() Ġ-> ĠT ĊĠĠĠ Ġ): ĠRead Write Property < Any , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠData Property ( key , Ġdefault , Ġserializer , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġof ( ĊĠĠĠĠĠĠĠ Ġkey : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġno inline Ġdefault : Ġ() Ġ-> ĠT ĊĠĠĠ Ġ): ĠRead Write Property < Any , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠData Property ( key , Ġdefault , Ġserializer (), Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrequests Ġ= Ġmutable Map Of < String , ĠData Request <* >>() ĊĊĠĠĠ Ġprivate Ġvar Ġresults Ġ= Ġmutable Map Of < String , ĠJson Element >() ĊĊĠĠĠ Ġprivate Ġval Ġresult Serializer Ġ= ĠMap Serializer ( String . serializer (), ĠJson Element . serializer ()) ĊĊĠĠĠ Ġprivate Ġval Ġloaded Objects Ġ= Ġmutable Map Of < String , ĠAny >() ĊĊĠĠĠ Ġfun Ġhas Requested ( key : ĠString ) Ġ= Ġkey Ġin Ġrequests ĊĊĠĠĠ Ġopen Ġfun Ġ< T Ġ: ĠAny > Ġrequest ( key : ĠString , Ġserializer : ĠK Serializer < T >, Ġdefault : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Requested Ġserializer : Ġ$ serializer ") ĊĠĠĠĠĠĠĠ Ġrequests [ key ] Ġ= ĠData Request ( serializer , Ġdefault ) ĊĠĠĠĠĠĠĠ Ġ// println (" Requested Ġ$ key Ġand Ġserializer Ġ$ serializer ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġload () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġsrc ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK amb rik . Serial . Format . encode ToString ( result Serializer , Ġresults ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= Ġfile . read Text (). if Blank Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"{} " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresults Ġ= ĠK amb rik . Serial . Format . decode FromString ( result Serializer , Ġcontents ). to Mutable Map () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( req Id , Ġreq Data ) Ġin Ġrequests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresults . get Or Put ( req Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq Data . encoded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġreq Data . decode ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Objects [ req Id ] Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġsrc ĊĊĠĠĠĠĠĠĠ Ġval Ġout Results Ġ= Ġmutable Map Of < String , ĠJson Element >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( obj Id , Ġobj ) Ġin Ġloaded Objects ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġrequests [ obj Id ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Results [ obj Id ] Ġ= Ġdata . encode ( obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠK amb rik . Serial . Format . encode ToString ( result Serializer , Ġout Results ) ĊĊĠĠĠĠĠĠĠ Ġfile . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate New File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( output ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThese Ġare Ġonly Ġcalled Ġvia Ġthe Ġdelegate Ġproperties , Ġso Ġcasting Ġis Ġguaranteed Ġto Ġsucceed ĊĊĠĠĠ Ġinternal Ġopen Ġfun Ġ< R Ġ: ĠAny > Ġload Result ( key : ĠString ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġloaded Objects [ key ] Ġas ĠR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġ< R Ġ: ĠAny > Ġset Result ( key : ĠString , Ġvalue : ĠR ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloaded Objects [ key ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfor Server ( file : ĠFile ) Ġ= ĠConfig Data File ( file ) ĊĠĠĠĠĠĠĠ Ġfun Ġfor Client ( file : ĠFile ) Ġ= ĠServer Data File ( file ) ĊĠĠĠ Ġ} Ċ }