Skip to content

Commit a7ef8b7

Browse files
committed
Setting uniqueness safety check
1 parent caa1add commit a7ef8b7

File tree

3 files changed

+35
-58
lines changed

3 files changed

+35
-58
lines changed

common/src/main/kotlin/com/lambda/config/AbstractSetting.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,7 @@ abstract class AbstractSetting<T : Any>(
127127
class ValueListener<T>(val requiresValueChange: Boolean, val execute: (from: T, to: T) -> Unit)
128128

129129
override fun toString() = "Setting $name: $value of type ${type.typeName}"
130+
131+
override fun equals(other: Any?) = other is AbstractSetting<*> && name == other.name
132+
override fun hashCode() = name.hashCode()
130133
}

common/src/main/kotlin/com/lambda/config/Configurable.kt

Lines changed: 22 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,15 @@ abstract class Configurable(
5555
val settings = mutableSetOf<AbstractSetting<*>>()
5656

5757
init {
58-
register()
58+
registerConfigurable()
5959
}
6060

61-
private fun register() = configuration.configurables.add(this)
61+
private fun registerConfigurable() = configuration.configurables.add(this)
62+
63+
inline fun <reified T : AbstractSetting<*>> T.register(): T {
64+
check(settings.add(this)) { "Setting with name $name already exists for configurable: ${this@Configurable.name}" }
65+
return this
66+
}
6267

6368
override fun toJson() =
6469
JsonObject().apply {
@@ -99,9 +104,7 @@ abstract class Configurable(
99104
defaultValue: Boolean,
100105
description: String = "",
101106
visibility: () -> Boolean = { true },
102-
) = BooleanSetting(name, defaultValue, description, visibility).also {
103-
settings.add(it)
104-
}
107+
) = BooleanSetting(name, defaultValue, description, visibility).register()
105108

106109
/**
107110
* Creates an [EnumSetting] with the provided parameters and adds it to the [settings].
@@ -124,9 +127,7 @@ abstract class Configurable(
124127
defaultValue: T,
125128
description: String = "",
126129
noinline visibility: () -> Boolean = { true },
127-
) = EnumSetting(name, defaultValue, description, visibility).also {
128-
settings.add(it)
129-
}
130+
) = EnumSetting(name, defaultValue, description, visibility).register()
130131

131132
/**
132133
* Creates a [CharSetting] with the provided parameters and adds it to the [settings].
@@ -143,9 +144,7 @@ abstract class Configurable(
143144
defaultValue: Char,
144145
description: String = "",
145146
visibility: () -> Boolean = { true },
146-
) = CharSetting(name, defaultValue, description, visibility).also {
147-
settings.add(it)
148-
}
147+
) = CharSetting(name, defaultValue, description, visibility).register()
149148

150149
/**
151150
* Creates a [StringSetting] with the provided parameters and adds it to the [settings].
@@ -166,9 +165,7 @@ abstract class Configurable(
166165
defaultValue: String,
167166
description: String = "",
168167
visibility: () -> Boolean = { true },
169-
) = StringSetting(name, defaultValue, description, visibility).also {
170-
settings.add(it)
171-
}
168+
) = StringSetting(name, defaultValue, description, visibility).register()
172169

173170
/**
174171
* Constructs a [ListSetting] instance with the specified parameters and appends it to the [settings] collection.
@@ -199,9 +196,7 @@ abstract class Configurable(
199196
TypeToken.getParameterized(MutableList::class.java, T::class.java).type,
200197
description,
201198
visibility,
202-
).also {
203-
settings.add(it)
204-
}
199+
).register()
205200

206201
/**
207202
* Constructs a [MapSetting] instance with the specified parameters and appends it to the [settings] collection.
@@ -232,9 +227,7 @@ abstract class Configurable(
232227
TypeToken.getParameterized(MutableMap::class.java, K::class.java, V::class.java).type,
233228
description,
234229
visibility
235-
).also {
236-
settings.add(it)
237-
}
230+
).register()
238231

239232
/**
240233
* Constructs a [SetSetting] instance with the specified parameters and appends it to the [settings] collection.
@@ -264,9 +257,7 @@ abstract class Configurable(
264257
TypeToken.getParameterized(MutableSet::class.java, T::class.java).type,
265258
description,
266259
visibility,
267-
).also {
268-
settings.add(it)
269-
}
260+
).register()
270261

271262
/**
272263
* Creates a [DoubleSetting] with the provided parameters and adds it to the [settings].
@@ -291,9 +282,7 @@ abstract class Configurable(
291282
description: String = "",
292283
unit: String = "",
293284
visibility: () -> Boolean = { true },
294-
) = DoubleSetting(name, defaultValue, range, step, description, visibility, unit).also {
295-
settings.add(it)
296-
}
285+
) = DoubleSetting(name, defaultValue, range, step, description, visibility, unit).register()
297286

298287
/**
299288
* Creates a [FloatSetting] with the provided parameters and adds it to the [settings].
@@ -318,9 +307,7 @@ abstract class Configurable(
318307
description: String = "",
319308
unit: String = "",
320309
visibility: () -> Boolean = { true },
321-
) = FloatSetting(name, defaultValue, range, step, description, visibility, unit).also {
322-
settings.add(it)
323-
}
310+
) = FloatSetting(name, defaultValue, range, step, description, visibility, unit).register()
324311

325312
/**
326313
* Creates an [IntegerSetting] with the provided parameters and adds it to the [settings].
@@ -345,9 +332,7 @@ abstract class Configurable(
345332
description: String = "",
346333
unit: String = "",
347334
visibility: () -> Boolean = { true },
348-
) = IntegerSetting(name, defaultValue, range, step, description, visibility, unit).also {
349-
settings.add(it)
350-
}
335+
) = IntegerSetting(name, defaultValue, range, step, description, visibility, unit).register()
351336

352337
/**
353338
* Creates a [LongSetting] with the provided parameters and adds it to the [settings].
@@ -372,9 +357,7 @@ abstract class Configurable(
372357
description: String = "",
373358
unit: String = "",
374359
visibility: () -> Boolean = { true },
375-
) = LongSetting(name, defaultValue, range, step, description, visibility, unit).also {
376-
settings.add(it)
377-
}
360+
) = LongSetting(name, defaultValue, range, step, description, visibility, unit).register()
378361

379362
/**
380363
* Creates a [KeyBindSetting] with the provided parameters and adds it to the [settings].
@@ -391,9 +374,7 @@ abstract class Configurable(
391374
defaultValue: KeyCode,
392375
description: String = "",
393376
visibility: () -> Boolean = { true },
394-
) = KeyBindSetting(name, defaultValue, description, visibility).also {
395-
settings.add(it)
396-
}
377+
) = KeyBindSetting(name, defaultValue, description, visibility).register()
397378

398379
/**
399380
* Creates a [ColorSetting] with the provided parameters and adds it to the [settings].
@@ -410,9 +391,7 @@ abstract class Configurable(
410391
defaultValue: Color,
411392
description: String = "",
412393
visibility: () -> Boolean = { true },
413-
) = ColorSetting(name, defaultValue, description, visibility).also {
414-
settings.add(it)
415-
}
394+
) = ColorSetting(name, defaultValue, description, visibility).register()
416395

417396
/**
418397
* Creates a [BlockPosSetting] with the provided parameters and adds it to the [settings].
@@ -429,9 +408,7 @@ abstract class Configurable(
429408
defaultValue: BlockPos,
430409
description: String = "",
431410
visibility: () -> Boolean = { true },
432-
) = BlockPosSetting(name, defaultValue, description, visibility).also {
433-
settings.add(it)
434-
}
411+
) = BlockPosSetting(name, defaultValue, description, visibility).register()
435412

436413
/**
437414
* Creates a [BlockSetting] with the provided parameters and adds it to the [settings].
@@ -448,7 +425,5 @@ abstract class Configurable(
448425
defaultValue: Block,
449426
description: String = "",
450427
visibility: () -> Boolean = { true },
451-
) = BlockSetting(name, defaultValue, description, visibility).also {
452-
settings.add(it)
453-
}
428+
) = BlockSetting(name, defaultValue, description, visibility).register()
454429
}

common/src/main/kotlin/com/lambda/module/modules/player/PacketMine.kt

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -112,17 +112,16 @@ object PacketMine : Module(
112112
private val renderQueueSetting by setting("Render Setting", RenderSetting.Both, "The style to render queue blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() })
113113
private val renderQueueSize by setting("Render Size", 0.3f, 0f..1f, 0.01f, "The scale of the queue render blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() })
114114

115-
private val queueFillColourMode by setting("Fill Mode", ColourMode.Dynamic, visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline })
116-
private val queueStaticFillColour by setting("Static Fill Colour", Color(1f, 0f, 0f, 0.2f), "The colour used to render the faces for queue blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline && queueFillColourMode == ColourMode.Static })
117-
private val queueStartFillColour by setting("Start Fill Colour", Color(1f, 0f, 0f, 0.2f), "The colour to render the faces for queue blocks closer to being broken next", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline && queueFillColourMode == ColourMode.Dynamic })
118-
private val queueEndFillColour by setting("End Fill Colour", Color(1f, 1f, 0f, 0.2f), "the colour to render the faces for queue blocks closer to the end of the queue", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline && queueFillColourMode == ColourMode.Dynamic })
119-
120-
private val queueOutlineColourMode by setting("Outline Mode", ColourMode.Dynamic, visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill })
121-
private val queueStaticOutlineColour by setting("Static Outline Colour", Color(1f, 0f, 0f), "The colour used to render the outline for queue blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill && queueOutlineColourMode == ColourMode.Static })
122-
private val queueStartOutlineColour by setting("Start Outline Colour", Color(1f, 0f, 0f), "The colour to render the outline for queue blocks closer to being broken next", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill && queueOutlineColourMode == ColourMode.Dynamic })
123-
private val queueEndOutlineColour by setting("End Outline Colour", Color(1f, 1f, 0f), "the colour to render the outline for queue blocks closer to the end of the queue", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill && queueOutlineColourMode == ColourMode.Dynamic })
124-
private val queueOutlineWidth by setting("Outline Width", 1f, 0f..3f, 0.1f, "The thickness of the outline used on queue blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderSetting != RenderSetting.Fill } )
125-
115+
private val queueFillColourMode by setting("Queue Fill Mode", ColourMode.Dynamic, visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline })
116+
private val queueStaticFillColour by setting("Queue Static Fill Colour", Color(1f, 0f, 0f, 0.2f), "The colour used to render the faces for queue blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline && queueFillColourMode == ColourMode.Static })
117+
private val queueStartFillColour by setting("Queue Start Fill Colour", Color(1f, 0f, 0f, 0.2f), "The colour to render the faces for queue blocks closer to being broken next", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline && queueFillColourMode == ColourMode.Dynamic })
118+
private val queueEndFillColour by setting("Queue End Fill Colour", Color(1f, 1f, 0f, 0.2f), "the colour to render the faces for queue blocks closer to the end of the queue", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Outline && queueFillColourMode == ColourMode.Dynamic })
119+
120+
private val queueOutlineColourMode by setting("Queue Outline Mode", ColourMode.Dynamic, visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill })
121+
private val queueStaticOutlineColour by setting("Queue Static Outline Colour", Color(1f, 0f, 0f), "The colour used to render the outline for queue blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill && queueOutlineColourMode == ColourMode.Static })
122+
private val queueStartOutlineColour by setting("Queue Start Outline Colour", Color(1f, 0f, 0f), "The colour to render the outline for queue blocks closer to being broken next", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill && queueOutlineColourMode == ColourMode.Dynamic })
123+
private val queueEndOutlineColour by setting("Queue End Outline Colour", Color(1f, 1f, 0f), "the colour to render the outline for queue blocks closer to the end of the queue", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderQueueSetting != RenderSetting.Fill && queueOutlineColourMode == ColourMode.Dynamic })
124+
private val queueOutlineWidth by setting("Queue Outline Width", 1f, 0f..3f, 0.1f, "The thickness of the outline used on queue blocks", visibility = { page == Page.QueueRender && renderQueueMode.isEnabled() && renderSetting != RenderSetting.Fill } )
126125

127126
private enum class Page {
128127
General, ReBreak, Queue, BlockRender, QueueRender

0 commit comments

Comments
 (0)