package Ġmods . oct ar ine core . common . config Ċ Ċ import Ġmods . oct ar ine core . client . gui . Non Verbose Array Entry Ċ import Ġmods . oct ar ine core . client . resource . get Ċ import Ġmods . oct ar ine core . client . resource . get Lines Ċ import Ġmods . oct ar ine core . client . resource . resource Manager Ċ import Ġnet . minecraftforge . common . config . Configuration Ċ import Ġnet . minecraftforge . common . config . Property Ċ Ċ abstract Ġclass ĠBlack White List Config Option < VALUE >( val Ġdomain : ĠString , Ġval Ġpath : ĠString ) Ġ: ĠConfig Property Base () Ġ{ ĊĊĠĠĠ Ġval Ġblack List Ġ= Ġmutable ListOf < VALUE >() ĊĠĠĠ Ġval Ġwhite List Ġ= Ġmutable ListOf < VALUE >() ĊĠĠĠ Ġvar Ġblacklist Property : ĠProperty ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġwhitelist Property : ĠProperty ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġhas Changed : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġblacklist Property ?. has Changed () Ġ?: Ġfalse Ġ|| Ġwhitelist Property ?. has Changed () Ġ?: Ġfalse ĊĊĠĠĠ Ġoverride Ġval Ġgui Properties : ĠList < Property > Ġget () Ġ= ĠlistOf ( whitelist Property !! , Ġblacklist Property !! ) ĊĊĠĠĠ Ġoverride Ġfun Ġattach ( target : ĠConfiguration , Ġlang Prefix : ĠString , Ġcategory Name : ĠString , ĠpropertyName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlang Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdefaults Ġ= Ġread Defaults ( domain , Ġpath ) ĊĠĠĠĠĠĠĠ Ġblacklist Property Ġ= Ġtarget . get ( category Name , Ġ"${ propertyName } Black list ", Ġdefaults . first ) ĊĠĠĠĠĠĠĠ Ġwhitelist Property Ġ= Ġtarget . get ( category Name , Ġ"${ propertyName } Whitelist ", Ġdefaults . second ) ĊĠĠĠĠĠĠĠ ĠlistOf ( blacklist Property !! , Ġwhitelist Property !! ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . config Entry Class Ġ= ĠNon Verbose Array Entry :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . language Key Ġ= Ġ"$ lang Prefix .$ category Name .${ it . name }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġread () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġconvert Value ( line : ĠString ): ĠVALUE ? ĊĊĠĠĠ Ġoverride Ġfun Ġread () Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( Pair ( black List , Ġblacklist Property !! ), ĠPair ( white List , Ġwhitelist Property !! )). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . first . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . string List . forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġconvert Value ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġit . first . add ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġread Defaults ( domain : ĠString , Ġpath : ĠString ): ĠPair < Array < String >, ĠArray < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblack List Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġwhite List Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġdefaults Ġ= Ġresource Manager [ domain , Ġpath ]?. get Lines () ĊĠĠĠĠĠĠĠ Ġdefaults ?. map { Ġit . trim () Ġ} ?. filter Ġ{ Ġ! it . startsWith ("// ") Ġ&& Ġit . isNotEmpty () Ġ} ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . startsWith ("- ")) Ġ{ Ġblack List . add ( it . substring ( 1 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ Ġwhite List . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ( black List . to Typed Array () Ġto Ġwhite List . to Typed Array ()) ĊĠĠĠ Ġ} Ċ }