package Ġcom . he a 3 ven . util Ċ Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . Instance Creator Ċ import Ġnet . fabric mc . loader . Fabric Loader Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . nio . file . Files Ċ Ċ fun Ġ< T > Ġread Config ( config FileName : ĠString , Ġconfig Class : ĠClass < T >, Ġdefault Config Builder : Ġ() Ġ-> ĠT , ĊĠĠĠĠĠĠĠ Ġvar arg Ġconfig Builders : ĠPair < Type , Ġ() Ġ-> ĠAny >): ĠT Ġ{ ĊĊĠĠĠ Ġval Ġconfig Dir Ġ= ĠFabric Loader . INSTANCE . config Directory . to Path () ĊĠĠĠ Ġval Ġgson Ġ= ĠGson Builder (). set Pretty Print ing (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig Builders . forEach Ġ{ Ġbuilder Desc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Type Adapter ( builder Desc . first , ĠInstance Creator Ġ{ Ġbuilder Desc . second () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. create () ĊĠĠĠ Ġval Ġconfig File Ġ= Ġconfig Dir . resolve ("$ config FileName . json ") ĊĠĠĠ Ġif Ġ( Files . exists ( configFile )) Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . new BufferedReader ( configFile ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( it , Ġconfig Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcfg Ġ= Ġdefault Config Builder () ĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( configFile . parent ) ĊĠĠĠĠĠĠĠ ĠFiles . new Buffered Writer ( configFile ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson . toJson ( cfg , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcfg ĊĠĠĠ Ġ} Ċ } Ċ