package Ġio . dr ak on . forge . kotlin Ċ Ċ import Ġnet . minecraftforge . fml . common . IL anguage Adapter Ċ import Ġnet . minecraftforge . fml . common . F ML Mod Container Ċ import Ġnet . minecraftforge . fml . common . Mod Container Ċ import Ġnet . minecraftforge . fml . rel a unch er . Side Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Method Ċ Ċ /** Ċ Ġ* ĠKotlin Ġimplementation Ġof ĠF ML 's ĠI Language Adapter . Ċ Ġ* Ċ Ġ* ĠUse Ġby Ġsetting Ġ< pre > mod Language Adapter Ġ= Ġ" io . dr ak on . forge . kotlin . Kotlin Adapter "</ pre > Ġin Ġthe ĠMod Ġannotation . Ċ Ġ* ĠYour ĠKotlin Ġ@ Mod Ġimplementation Ġ< b > must </ b > Ġbe Ġan Ġ< pre > object </ pre > Ġtype . Ċ Ġ* Ġ( Forge Ġ 1 . 8 - 1 1 . 1 4 . 1 . 1 3 7 1 Ġand ĠKotlin ĠRC 1 Ġor Ġabove Ġrequired ) Ċ Ġ* Ċ Ġ* Ġ@ author ĠAr kan Ġ< ark an @ dr ak on . io > Ċ Ġ* Ġ@ author ĠCar rot Ġ< git @ bun n ies . io > Ċ Ġ*/ Ċ @ Suppress (" UNUSED ") Ċ class ĠKotlin Adapter Ġ: ĠI Language Adapter Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLog Manager . getLogger (" IL anguage Adapter / Kotlin ") ĊĊĠĠĠ Ġoverride Ġfun Ġset Proxy ( target : ĠField , Ġproxy Target : ĠClass <* >, Ġproxy : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug (" Setting Ġproxy Ġon Ġtarget : Ġ{} . {} Ġ-> Ġ{}", Ġtarget . decl aring Class . simple Name , Ġtarget . name , Ġproxy ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance Field Ġ= Ġfind Instance Field OrThrow ( proxy Target ) ĊĠĠĠĠĠĠĠ Ġval Ġmod Object Ġ= Ġfind Mod Object OrThrow ( instance Field ) ĊĊĠĠĠĠĠĠĠ Ġtarget . set ( mod Object , Ġproxy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget New Instance ( container : ĠF ML Mod Container ?, Ġobject Class : ĠClass <* >, Ġclass Loader : ĠClassLoader , Ġfactory Marked Annotation : ĠMethod ?): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug (" Construct ing Ġnew Ġinstance Ġof Ġ{}", Ġobject Class . simple Name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance Field Ġ= Ġfind Instance Field OrThrow ( object Class ) ĊĠĠĠĠĠĠĠ Ġval Ġmod Object Ġ= Ġfind Mod Object OrThrow ( instance Field ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmod Object ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsupports Statics () Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġset Internal Prox ies ( mod : ĠMod Container ?, Ġside : ĠSide ?, Ġloader : ĠClassLoader ?) Ġ= ĠUnit ĊĊĠĠĠ Ġprivate Ġfun Ġfind Instance Field OrThrow ( target Class : ĠClass < *> ): ĠField Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Field : ĠField Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Class . getField (" INSTANCE ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠNoSuch Field Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġno Instance Field Exception ( exception ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġinstance Security Exception ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinstance Field ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Mod Object OrThrow ( instance Field : ĠField ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmod Object Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Field . get ( null ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġunexpected Initializer Signature Exception ( exception ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġwrong Visibility On Initializer Exception ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmod Object ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġno Instance Field Exception ( exception : ĠException ) Ġ= ĠKotlin Adapter Exception (" Couldn 't Ġfind ĠINSTANCE Ġsingleton Ġon ĠKotlin Ġ@ Mod Ġcontainer ", Ġexception ) ĊĠĠĠ Ġprivate Ġfun Ġinstance Security Exception ( exception : ĠException ) Ġ= ĠKotlin Adapter Exception (" Security Ġviolation Ġaccessing ĠINSTANCE Ġsingleton Ġon ĠKotlin Ġ@ Mod Ġcontainer ", Ġexception ) ĊĠĠĠ Ġprivate Ġfun Ġunexpected Initializer Signature Exception ( exception : ĠException ) Ġ= ĠKotlin Adapter Exception (" Kotlin Ġ@ Mod Ġobject Ġhas Ġan Ġunexpected Ġinitializer Ġsignature , Ġsomehow ?", Ġexception ) ĊĠĠĠ Ġprivate Ġfun Ġwrong Visibility On Initializer Exception ( exception : ĠException ) Ġ= ĠKotlin Adapter Exception (" Initializer Ġon ĠKotlin Ġ@ Mod Ġobject Ġisn 't Ġ` public `", Ġexception ) ĊĊĠĠĠ Ġprivate Ġclass ĠKotlin Adapter Exception ( message : ĠString , Ġexception : ĠException ): ĠRuntimeException (" Kotlin Ġadapter Ġerror Ġ- Ġdo Ġnot Ġreport Ġto ĠFor ge ! Ġ" Ġ+ Ġmessage , Ġexception ) Ċ }