diff --git a/Chroma-Core/src/main/java/buttondevteam/core/ComponentCommand.kt b/Chroma-Core/src/main/java/buttondevteam/core/ComponentCommand.kt index d323e35..eeb3c34 100644 --- a/Chroma-Core/src/main/java/buttondevteam/core/ComponentCommand.kt +++ b/Chroma-Core/src/main/java/buttondevteam/core/ComponentCommand.kt @@ -74,7 +74,7 @@ class ComponentCommand : ICommand2MC() { val oc = getComponentOrError(plugin, component, sender) if (!oc.isPresent) return true setComponentEnabled(oc.get(), enable) - if (permanent) oc.get().shouldBeEnabled.set(enable) + if (permanent) oc.get().shouldBeEnabled = enable sender.sendMessage("${oc.get().javaClass.simpleName} ${if (enable) "en" else "dis"}abled ${if (permanent) "permanently" else "temporarily"}.") } catch (e: Exception) { TBMCCoreAPI.SendException( diff --git a/Chroma-Core/src/main/java/buttondevteam/core/ComponentManager.kt b/Chroma-Core/src/main/java/buttondevteam/core/ComponentManager.kt index 94d8971..e655f11 100644 --- a/Chroma-Core/src/main/java/buttondevteam/core/ComponentManager.kt +++ b/Chroma-Core/src/main/java/buttondevteam/core/ComponentManager.kt @@ -23,7 +23,7 @@ object ComponentManager { * Enables components based on a configuration - any component registered afterwards will be also enabled */ fun enableComponents() { - components.values.stream().filter { c: Component -> c.shouldBeEnabled.get() } + components.values.stream().filter { c: Component -> c.shouldBeEnabled } .forEach { c -> try { setComponentEnabled(c, true) diff --git a/Chroma-Core/src/main/java/buttondevteam/core/component/channel/Channel.kt b/Chroma-Core/src/main/java/buttondevteam/core/component/channel/Channel.kt index 0bc55a9..74209e9 100755 --- a/Chroma-Core/src/main/java/buttondevteam/core/component/channel/Channel.kt +++ b/Chroma-Core/src/main/java/buttondevteam/core/component/channel/Channel.kt @@ -1,9 +1,7 @@ package buttondevteam.core.component.channel import buttondevteam.core.ComponentManager.get -import buttondevteam.lib.architecture.ConfigData import buttondevteam.lib.architecture.IHaveConfig -import buttondevteam.lib.architecture.ListConfigData import buttondevteam.lib.chat.Color import buttondevteam.lib.player.ChromaGamerBase import org.bukkit.Bukkit @@ -53,16 +51,16 @@ open class Channel * Must start with a color code */ @JvmField - val displayName: ConfigData = - component.config.getData("${this.identifier}.displayName", this.defDisplayName) + val displayName = component.config.getData("${this.identifier}.displayName", this.defDisplayName) @JvmField - val color: ConfigData = component.config.getData("${this.identifier}.color", + val color = component.config.getData( + "${this.identifier}.color", this.defColor, { c -> Color.valueOf((c as String)) }, Color::toString ) @JvmField - val extraIdentifiers: ListConfigData = component.config.getListData("${this.identifier}.IDs", listOf()) + val extraIdentifiers = component.config.getListData("${this.identifier}.IDs", listOf()) val isGlobal: Boolean get() = filterAndErrorMSG == null diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.kt b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.kt index 4d232c5..c103408 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.kt @@ -27,8 +27,7 @@ abstract class Component { private val data //TODO : IHaveConfig? = null - val shouldBeEnabled: ConfigData - get() = config.getData("enabled", javaClass.getAnnotation(ComponentMetadata::class.java)?.enabledByDefault ?: true) + var shouldBeEnabled by config.getData("enabled", javaClass.getAnnotation(ComponentMetadata::class.java)?.enabledByDefault ?: true) fun log(message: String) { plugin.logger.info("[$className] $message") @@ -210,7 +209,7 @@ abstract class Component { component.updateConfig() _components[component.javaClass] = component if (plugin is ButtonPlugin) plugin.componentStack.push(component) - if (ComponentManager.areComponentsEnabled() && component.shouldBeEnabled.get()) { + if (ComponentManager.areComponentsEnabled() && component.shouldBeEnabled) { return try { //Enable components registered after the previous ones getting enabled setComponentEnabled(component, true) true diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt index 75ca3f8..c42185b 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt @@ -1,5 +1,7 @@ package buttondevteam.lib.architecture +import buttondevteam.lib.architecture.config.ConfigDataDelegate +import buttondevteam.lib.architecture.config.ConfigDataDelegate.Companion.delegate import buttondevteam.lib.architecture.config.IConfigData import org.bukkit.configuration.ConfigurationSection import java.util.function.Function @@ -41,7 +43,7 @@ class IHaveConfig( getter: Function? = null, setter: Function? = null, readOnly: Boolean = false - ): ConfigData { + ): ConfigDataDelegate { val safeSetter = setter ?: Function { it ?: throw RuntimeException("No setter specified for nullable config data $path!") } return getData(path, getter ?: Function { it as T }, safeSetter, safeSetter.apply(def), readOnly) } @@ -65,10 +67,10 @@ class IHaveConfig( setter: Function, primitiveDef: Any, readOnly: Boolean = false - ): ConfigData { + ): ConfigDataDelegate { val data = datamap[path] ?: ConfigData(this, path, primitiveDef, getter, setter, readOnly).also { datamap[path] = it } - return data as ConfigData + return (data as ConfigData).delegate() } /** @@ -86,7 +88,7 @@ class IHaveConfig( elementGetter: Function? = null, elementSetter: Function? = null, readOnly: Boolean = false - ): ListConfigData { + ): ConfigDataDelegate.List> { var data = datamap[path] if (data == null) datamap[path] = ListConfigData( this, @@ -97,7 +99,7 @@ class IHaveConfig( readOnly ).also { data = it } @Suppress("UNCHECKED_CAST") - return data as ListConfigData + return (data as ListConfigData).delegate() } /** diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/config/ConfigDataDelegate.kt b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/config/ConfigDataDelegate.kt new file mode 100644 index 0000000..3a866f6 --- /dev/null +++ b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/config/ConfigDataDelegate.kt @@ -0,0 +1,12 @@ +package buttondevteam.lib.architecture.config + +import kotlin.reflect.KProperty + +class ConfigDataDelegate(val data: IConfigData) : IConfigData by data { + operator fun getValue(thisRef: Any?, property: KProperty<*>): T = data.get() + operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) = data.set(value) + + companion object { + fun IConfigData.delegate() = ConfigDataDelegate(this) + } +} diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt b/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt index b2355fd..e04397c 100755 --- a/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt @@ -4,7 +4,6 @@ import buttondevteam.core.MainPlugin import buttondevteam.core.component.channel.Channel import buttondevteam.core.component.channel.Channel.Companion.getChannels import buttondevteam.lib.TBMCCoreAPI -import buttondevteam.lib.architecture.ConfigData import buttondevteam.lib.architecture.ConfigData.Companion.saveNow import buttondevteam.lib.architecture.IHaveConfig import buttondevteam.lib.chat.Command2Sender @@ -160,7 +159,7 @@ abstract class ChromaGamerBase : Command2Sender { } //----------------------------------------------------------------- - val channel: ConfigData + val channel get() = config.getData("channel", Channel.globalChat, { id -> getChannels().filter { it.identifier.equals(id as String, ignoreCase = true) } diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt b/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt index 5c0871b..ee4c82f 100755 --- a/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt @@ -55,7 +55,7 @@ abstract class TBMCPlayerBase : ChromaGamerBase() { } override fun getName(): String { - return playerName.get() + return player?.displayName ?: playerName.get() } override fun checkChannelInGroup(group: String?): Channel.RecipientTestResult {