aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/notenoughupdates/features
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/moe/nea/notenoughupdates/features')
-rw-r--r--src/main/kotlin/moe/nea/notenoughupdates/features/FeatureManager.kt36
-rw-r--r--src/main/kotlin/moe/nea/notenoughupdates/features/NEUFeature.kt16
-rw-r--r--src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt12
3 files changed, 64 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/features/FeatureManager.kt b/src/main/kotlin/moe/nea/notenoughupdates/features/FeatureManager.kt
new file mode 100644
index 0000000..766cf1f
--- /dev/null
+++ b/src/main/kotlin/moe/nea/notenoughupdates/features/FeatureManager.kt
@@ -0,0 +1,36 @@
+package moe.nea.notenoughupdates.features
+
+import kotlinx.serialization.serializer
+import moe.nea.notenoughupdates.NotEnoughUpdates
+import moe.nea.notenoughupdates.features.world.FairySouls
+import moe.nea.notenoughupdates.util.ConfigHolder
+
+object FeatureManager : ConfigHolder<FeatureManager.Config>(serializer(), "features", ::Config) {
+ data class Config(
+ val enabledFeatures: MutableMap<String, Boolean> = mutableMapOf()
+ )
+
+ private val features = mutableMapOf<String, NEUFeature>()
+
+ fun autoload() {
+ loadFeature(FairySouls)
+ }
+
+ fun loadFeature(feature: NEUFeature) {
+ if (feature.identifier in features) {
+ NotEnoughUpdates.logger.error("Double registering feature ${feature.identifier}. Ignoring second instance $feature")
+ return
+ }
+ features[feature.identifier] = feature
+ }
+
+ fun isEnabled(identifier: String): Boolean? =
+ config.enabledFeatures[identifier]
+
+
+ fun setEnabled(identifier: String, value: Boolean) {
+ config.enabledFeatures[identifier] = value
+ markDirty()
+ }
+
+}
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/features/NEUFeature.kt b/src/main/kotlin/moe/nea/notenoughupdates/features/NEUFeature.kt
new file mode 100644
index 0000000..1d3628e
--- /dev/null
+++ b/src/main/kotlin/moe/nea/notenoughupdates/features/NEUFeature.kt
@@ -0,0 +1,16 @@
+package moe.nea.notenoughupdates.features
+
+interface NEUFeature {
+ val name: String
+ val identifier: String
+ val defaultEnabled: Boolean
+ get() = true
+ var isEnabled: Boolean
+ get() = FeatureManager.isEnabled(identifier) ?: defaultEnabled
+ set(value) {
+ FeatureManager.setEnabled(identifier, value)
+ }
+
+ fun onLoad()
+
+}
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt b/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt
new file mode 100644
index 0000000..b928f3d
--- /dev/null
+++ b/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt
@@ -0,0 +1,12 @@
+package moe.nea.notenoughupdates.features.world
+
+import moe.nea.notenoughupdates.features.NEUFeature
+
+object FairySouls : NEUFeature {
+ override val name: String get() = "Fairy Souls"
+ override val identifier: String get() = "fairy-souls"
+
+ override fun onLoad() {
+
+ }
+}