@@ -21,6 +21,7 @@ import com.google.gson.JsonElement
2121import com.google.gson.JsonObject
2222import com.google.gson.reflect.TypeToken
2323import com.lambda.Lambda.LOG
24+ import com.lambda.config.Configuration.Companion.configurables
2425import com.lambda.config.settings.CharSetting
2526import com.lambda.config.settings.FunctionSetting
2627import com.lambda.config.settings.StringSetting
@@ -61,7 +62,7 @@ import java.awt.Color
6162 * @property settings A set of [SettingCore]s that this configurable manages.
6263 */
6364abstract class Configurable (
64- private val configuration : Configuration ,
65+ val configuration : Configuration ,
6566) : Jsonable, Nameable {
6667 val settings = mutableListOf<Setting <* , * >>()
6768 val settingGroups = mutableListOf<SettingGroup >()
@@ -70,7 +71,11 @@ abstract class Configurable(
7071 registerConfigurable()
7172 }
7273
73- private fun registerConfigurable () = configuration.configurables.add(this )
74+ private fun registerConfigurable () {
75+ if (configurables.any { it.name == name })
76+ throw IllegalStateException (" Configurable with name $name already exists" )
77+ configuration.configurables.add(this )
78+ }
7479
7580 fun <T : SettingCore <R >, R : Any > Setting <T , R >.register () = apply {
7681 if (settings.any { it.name == name })
@@ -101,22 +106,22 @@ abstract class Configurable(
101106 defaultValue : Boolean ,
102107 description : String = "",
103108 visibility : () -> Boolean = { true },
104- ) = Setting (name, description, BooleanSetting (defaultValue), visibility).register()
109+ ) = Setting (name, description, BooleanSetting (defaultValue), this , visibility).register()
105110
106111 inline fun <reified T : Enum <T >> setting (
107112 name : String ,
108113 defaultValue : T ,
109114 description : String = "",
110115 noinline
111116 visibility : () -> Boolean = { true },
112- ) = Setting (name, description,EnumSetting (defaultValue), visibility).register()
117+ ) = Setting (name, description,EnumSetting (defaultValue), this , visibility).register()
113118
114119 fun setting (
115120 name : String ,
116121 defaultValue : Char ,
117122 description : String = "",
118123 visibility : () -> Boolean = { true },
119- ) = Setting (name, description, CharSetting (defaultValue), visibility).register()
124+ ) = Setting (name, description, CharSetting (defaultValue), this , visibility).register()
120125
121126 fun setting (
122127 name : String ,
@@ -125,7 +130,7 @@ abstract class Configurable(
125130 flags : Int = ImGuiInputTextFlags .None ,
126131 description : String = "",
127132 visibility : () -> Boolean = { true },
128- ) = Setting (name, description, StringSetting (defaultValue, multiline, flags), visibility).register()
133+ ) = Setting (name, description, StringSetting (defaultValue, multiline, flags), this , visibility).register()
129134
130135 @JvmName(" collectionSetting1" )
131136 fun setting (
@@ -134,7 +139,7 @@ abstract class Configurable(
134139 immutableCollection : Collection <Block > = Registries .BLOCK .toList(),
135140 description : String = "",
136141 visibility : () -> Boolean = { true },
137- ) = Setting (name, description, BlockCollectionSetting (immutableCollection, defaultValue.toMutableList()), visibility).register()
142+ ) = Setting (name, description, BlockCollectionSetting (immutableCollection, defaultValue.toMutableList()), this , visibility).register()
138143
139144 @JvmName(" collectionSetting2" )
140145 fun setting (
@@ -143,7 +148,7 @@ abstract class Configurable(
143148 immutableCollection : Collection <Item > = Registries .ITEM .toList(),
144149 description : String = "",
145150 visibility : () -> Boolean = { true },
146- ) = Setting (name, description, ItemCollectionSetting (immutableCollection, defaultValue.toMutableList()), visibility).register()
151+ ) = Setting (name, description, ItemCollectionSetting (immutableCollection, defaultValue.toMutableList()), this , visibility).register()
147152
148153 @JvmName(" collectionSetting3" )
149154 inline fun <reified T : Comparable <T >> setting (
@@ -160,6 +165,7 @@ abstract class Configurable(
160165 immutableList,
161166 TypeToken .getParameterized(Collection ::class .java, T ::class .java).type
162167 ),
168+ this ,
163169 visibility
164170 ).register()
165171
@@ -170,7 +176,7 @@ abstract class Configurable(
170176 immutableList : Collection <T > = defaultValue,
171177 description : String = "",
172178 noinline visibility : () -> Boolean = { true },
173- ) = Setting (name, description, ClassCollectionSetting (immutableList, defaultValue.toMutableList()), visibility).register()
179+ ) = Setting (name, description, ClassCollectionSetting (immutableList, defaultValue.toMutableList()), this , visibility).register()
174180
175181 // ToDo: Actually implement maps
176182 inline fun <reified K : Any , reified V : Any > setting (
@@ -185,6 +191,7 @@ abstract class Configurable(
185191 defaultValue.toMutableMap(),
186192 TypeToken .getParameterized(MutableMap ::class .java, K ::class .java, V ::class .java).type
187193 ),
194+ this ,
188195 visibility
189196 ).register()
190197
@@ -196,7 +203,7 @@ abstract class Configurable(
196203 description : String = "",
197204 unit : String = "",
198205 visibility : () -> Boolean = { true },
199- ) = Setting (name, description, DoubleSetting (defaultValue, range, step, unit), visibility).register()
206+ ) = Setting (name, description, DoubleSetting (defaultValue, range, step, unit), this , visibility).register()
200207
201208 fun setting (
202209 name : String ,
@@ -206,7 +213,7 @@ abstract class Configurable(
206213 description : String = "",
207214 unit : String = "",
208215 visibility : () -> Boolean = { true },
209- ) = Setting (name, description, FloatSetting (defaultValue, range, step, unit), visibility).register()
216+ ) = Setting (name, description, FloatSetting (defaultValue, range, step, unit), this , visibility).register()
210217
211218 fun setting (
212219 name : String ,
@@ -216,7 +223,7 @@ abstract class Configurable(
216223 description : String = "",
217224 unit : String = "",
218225 visibility : () -> Boolean = { true },
219- ) = Setting (name, description, IntegerSetting (defaultValue, range, step, unit), visibility).register()
226+ ) = Setting (name, description, IntegerSetting (defaultValue, range, step, unit), this , visibility).register()
220227
221228 fun setting (
222229 name : String ,
@@ -226,61 +233,61 @@ abstract class Configurable(
226233 description : String = "",
227234 unit : String = "",
228235 visibility : () -> Boolean = { true },
229- ) = Setting (name, description, LongSetting (defaultValue, range, step, unit), visibility).register()
236+ ) = Setting (name, description, LongSetting (defaultValue, range, step, unit), this , visibility).register()
230237
231238 fun setting (
232239 name : String ,
233240 defaultValue : Bind ,
234241 description : String = "",
235242 visibility : () -> Boolean = { true },
236- ) = Setting (name, description, KeybindSettingCore (defaultValue), visibility).register()
243+ ) = Setting (name, description, KeybindSettingCore (defaultValue), this , visibility).register()
237244
238245 fun setting (
239246 name : String ,
240247 defaultValue : KeyCode ,
241248 description : String = "",
242249 visibility : () -> Boolean = { true },
243- ) = Setting (name, description, KeybindSettingCore (defaultValue), visibility).register()
250+ ) = Setting (name, description, KeybindSettingCore (defaultValue), this , visibility).register()
244251
245252 fun setting (
246253 name : String ,
247254 defaultValue : Color ,
248255 description : String = "",
249256 visibility : () -> Boolean = { true },
250- ) = Setting (name, description, ColorSetting (defaultValue), visibility).register()
257+ ) = Setting (name, description, ColorSetting (defaultValue), this , visibility).register()
251258
252259 fun setting (
253260 name : String ,
254261 defaultValue : Vec3d ,
255262 description : String = "",
256263 visibility : () -> Boolean = { true },
257- ) = Setting (name, description, Vec3DSetting (defaultValue), visibility).register()
264+ ) = Setting (name, description, Vec3DSetting (defaultValue), this , visibility).register()
258265
259266 fun setting (
260267 name : String ,
261268 defaultValue : BlockPos .Mutable ,
262269 description : String = "",
263270 visibility : () -> Boolean = { true },
264- ) = Setting (name, description, BlockPosSetting (defaultValue), visibility).register()
271+ ) = Setting (name, description, BlockPosSetting (defaultValue), this , visibility).register()
265272
266273 fun setting (
267274 name : String ,
268275 defaultValue : BlockPos ,
269276 description : String = "",
270277 visibility : () -> Boolean = { true },
271- ) = Setting (name, description, BlockPosSetting (defaultValue), visibility).register()
278+ ) = Setting (name, description, BlockPosSetting (defaultValue), this , visibility).register()
272279
273280 fun setting (
274281 name : String ,
275282 defaultValue : Block ,
276283 description : String = "",
277284 visibility : () -> Boolean = { true },
278- ) = Setting (name, description, BlockSetting (defaultValue), visibility).register()
285+ ) = Setting (name, description, BlockSetting (defaultValue), this , visibility).register()
279286
280287 fun setting (
281288 name : String ,
282289 defaultValue : () -> Unit ,
283290 description : String = "",
284291 visibility : () -> Boolean = { true }
285- ) = Setting (name, description, FunctionSetting (defaultValue), visibility).register()
292+ ) = Setting (name, description, FunctionSetting (defaultValue), this , visibility).register()
286293}
0 commit comments