diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/IDhApiConfigValue.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/IDhApiConfigValue.java index e6b7dc515..b5ac00375 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/IDhApiConfigValue.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/IDhApiConfigValue.java @@ -1,5 +1,7 @@ package com.seibel.distanthorizons.api.interfaces.config; +import java.util.function.Consumer; + /** * An interface for Distant Horizon's Config. * @@ -48,4 +50,8 @@ public interface IDhApiConfigValue /** Returns the min value for this config, null if there is no min. */ T getMinValue(); + /** Adds a {@link Consumer} that will be called whenever the config changes to a new value. */ + void addChangeListener(Consumer onValueChangeFunc); + //void removeListener(Consumer onValueChangeFunc); // not currently implemented + } diff --git a/api/src/main/java/com/seibel/distanthorizons/api/objects/config/DhApiConfigValue.java b/api/src/main/java/com/seibel/distanthorizons/api/objects/config/DhApiConfigValue.java index e1d16c485..2931cb9fa 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/objects/config/DhApiConfigValue.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/objects/config/DhApiConfigValue.java @@ -5,6 +5,8 @@ import com.seibel.distanthorizons.coreapi.interfaces.config.IConfigEntry; import com.seibel.distanthorizons.coreapi.interfaces.config.IConverter; import com.seibel.distanthorizons.coreapi.util.converters.DefaultConverter; +import java.util.function.Consumer; + /** * A wrapper used to interface with Distant Horizon's Config.

* @@ -68,8 +70,18 @@ public class DhApiConfigValue implements IDhApiConfigValue onValueChangeFunc) + { + this.configEntry.addValueChangeListener((coreValue) -> + { + apiType apiValue = this.configConverter.convertToApiType(coreValue); + onValueChangeFunc.accept(apiValue); + }); + } + } diff --git a/api/src/main/java/com/seibel/distanthorizons/coreapi/interfaces/config/IConfigEntry.java b/api/src/main/java/com/seibel/distanthorizons/coreapi/interfaces/config/IConfigEntry.java index fb137f3bc..afb6dad1e 100644 --- a/api/src/main/java/com/seibel/distanthorizons/coreapi/interfaces/config/IConfigEntry.java +++ b/api/src/main/java/com/seibel/distanthorizons/coreapi/interfaces/config/IConfigEntry.java @@ -1,6 +1,8 @@ package com.seibel.distanthorizons.coreapi.interfaces.config; +import java.util.function.Consumer; + /** * Use for making the config variables * @@ -56,4 +58,6 @@ public interface IConfigEntry /** Is the value of this equal to another */ boolean equals(IConfigEntry obj); + void addValueChangeListener(Consumer onValueChangeFunc); + } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/listeners/IConfigListener.java b/core/src/main/java/com/seibel/distanthorizons/core/config/listeners/IConfigListener.java index 5d643db5b..79ea44005 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/listeners/IConfigListener.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/listeners/IConfigListener.java @@ -3,9 +3,9 @@ package com.seibel.distanthorizons.core.config.listeners; public interface IConfigListener { /** Called whenever the value is set (including in core DH code) */ - default void onConfigValueSet() {}; + default void onConfigValueSet() {} /** Called whenever the value is changed through the UI */ - default void onUiModify() {}; + default void onUiModify() {} } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java index 2fbd85471..92b6d26a1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java @@ -2,6 +2,7 @@ package com.seibel.distanthorizons.core.config.types; import com.seibel.distanthorizons.core.config.NumberUtil; +import com.seibel.distanthorizons.core.config.listeners.ConfigChangeListener; import com.seibel.distanthorizons.core.config.listeners.IConfigListener; import com.seibel.distanthorizons.core.config.types.enums.EConfigEntryAppearance; import com.seibel.distanthorizons.core.config.types.enums.EConfigEntryPerformance; @@ -9,6 +10,7 @@ import com.seibel.distanthorizons.coreapi.interfaces.config.IConfigEntry; import java.util.ArrayList; import java.util.Arrays; +import java.util.function.Consumer; /** * Use for making the config variables @@ -166,7 +168,16 @@ public class ConfigEntry extends AbstractConfigType> implem /** Gets the performance impact of an option */ public EConfigEntryPerformance getPerformance() { return this.performance; } + /** Fired whenever the config value changes to a new value. */ + public void addValueChangeListener(Consumer onValueChangeFunc) + { + ConfigChangeListener changeListener = new ConfigChangeListener<>(this, onValueChangeFunc); + this.addListener(changeListener); + } + /** Fired whenever the config value is updated, including when the value doesn't change (IE when the UI changes state or the config is reloaded). */ public void addListener(IConfigListener newListener) { this.listenerList.add(newListener); } + + //public void removeValueChangeListener(Consumer onValueChangeFunc) { } // not currently implemented public void removeListener(IConfigListener oldListener) { this.listenerList.remove(oldListener); } public void clearListeners() { this.listenerList.clear(); }