Files
Firmament/src/main/kotlin/moe/nea/notenoughupdates/features/FeatureManager.kt
nea 942dd629ef Add fishing particle highlighter
Currently does not work when sneaking or when the bobber moves too much, since the position desyncs with the server
2023-05-08 00:17:34 +02:00

54 lines
1.5 KiB
Kotlin

package moe.nea.notenoughupdates.features
import kotlinx.serialization.Serializable
import kotlinx.serialization.serializer
import moe.nea.notenoughupdates.NotEnoughUpdates
import moe.nea.notenoughupdates.features.fishing.FishingWarning
import moe.nea.notenoughupdates.features.world.FairySouls
import moe.nea.notenoughupdates.util.data.DataHolder
object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "features", ::Config) {
@Serializable
data class Config(
val enabledFeatures: MutableMap<String, Boolean> = mutableMapOf()
)
private val features = mutableMapOf<String, NEUFeature>()
private var hasAutoloaded = false
init {
autoload()
}
fun autoload() {
synchronized(this) {
if (hasAutoloaded) return
loadFeature(FairySouls)
loadFeature(FishingWarning)
hasAutoloaded = true
}
}
fun loadFeature(feature: NEUFeature) {
synchronized(features) {
if (feature.identifier in features) {
NotEnoughUpdates.logger.error("Double registering feature ${feature.identifier}. Ignoring second instance $feature")
return
}
features[feature.identifier] = feature
feature.onLoad()
}
}
fun isEnabled(identifier: String): Boolean? =
data.enabledFeatures[identifier]
fun setEnabled(identifier: String, value: Boolean) {
data.enabledFeatures[identifier] = value
markDirty()
}
}