38 lines
1.1 KiB
Kotlin
38 lines
1.1 KiB
Kotlin
|
package codes.som.hibiscus.api.feature
|
||
|
|
||
|
import codes.som.hibiscus.HibiscusMod
|
||
|
import codes.som.hibiscus.api.event.*
|
||
|
import codes.som.hibiscus.api.feature.values.ValueRegistry
|
||
|
|
||
|
abstract class Feature(val name: String, val category: FeatureCategory) {
|
||
|
private val listeners = mutableListOf<TypedListener<*>>()
|
||
|
|
||
|
protected inline fun <reified T : Event> on(listener: Listener<T>) =
|
||
|
on(object : TypedListener<T>(T::class.java), Listener<T> by listener {})
|
||
|
|
||
|
protected fun <T : Event> on(listener: TypedListener<T>) =
|
||
|
listeners.add(listener)
|
||
|
|
||
|
val values = ValueRegistry()
|
||
|
|
||
|
var enabled: Boolean = false
|
||
|
set(value) {
|
||
|
val hasChanged = value != field
|
||
|
if (hasChanged) {
|
||
|
field = value
|
||
|
if (value) {
|
||
|
onEnable()
|
||
|
listeners.forEach { HibiscusMod.bus.registerTyped(it) }
|
||
|
} else {
|
||
|
listeners.forEach { HibiscusMod.bus.unregisterTyped(it) }
|
||
|
onDisable()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
open fun onEnable() {}
|
||
|
open fun onDisable() {}
|
||
|
|
||
|
// TODO: Module commands
|
||
|
}
|