diff options
author | isXander <xandersmith2008@gmail.com> | 2022-11-13 19:04:45 +0000 |
---|---|---|
committer | isXander <xandersmith2008@gmail.com> | 2022-11-13 19:04:55 +0000 |
commit | 6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6 (patch) | |
tree | 3245fcd0782ff44c9f7c62f26844ab4c7510bbeb /src/main/java/dev/isxander/yacl/config | |
parent | b9052c99778b5ad6e54e720f6f10756e8ef8cdc0 (diff) | |
download | YetAnotherConfigLib-6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6.tar.gz YetAnotherConfigLib-6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6.tar.bz2 YetAnotherConfigLib-6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6.zip |
lots of QOL and minor improvements
smooth category scrolling
individual reset buttons for all controllers
separate Dimension into Dimension and MutableDimension to prevent mods from modifying controller dimensions without invoking the hooks
made the dimension field private in AbstractWidget so people can't modify it without the method setDimension
new Option API method to check if pending value is equal to default value
add documentation to ConfigInstance
fix bug where Option#requestSetDefault and Option#forgetPendingValue implementations weren't notifying listeners
Diffstat (limited to 'src/main/java/dev/isxander/yacl/config')
-rw-r--r-- | src/main/java/dev/isxander/yacl/config/ConfigInstance.java | 11 | ||||
-rw-r--r-- | src/main/java/dev/isxander/yacl/config/YACLConfigManager.java | 38 |
2 files changed, 46 insertions, 3 deletions
diff --git a/src/main/java/dev/isxander/yacl/config/ConfigInstance.java b/src/main/java/dev/isxander/yacl/config/ConfigInstance.java index e85a645..5271ea2 100644 --- a/src/main/java/dev/isxander/yacl/config/ConfigInstance.java +++ b/src/main/java/dev/isxander/yacl/config/ConfigInstance.java @@ -5,6 +5,16 @@ import dev.isxander.yacl.api.YetAnotherConfigLib; import java.lang.reflect.InvocationTargetException; import java.util.function.BiFunction; +/** + * Responsible for handing the actual config data type. + * Holds the instance along with a final default instance + * to reference default values for options and should not be changed. + * + * Abstract methods to save and load the class, implementations are responsible for + * how it saves and load. + * + * @param <T> config data type + */ public abstract class ConfigInstance<T> { private final Class<T> configClass; private final T defaultInstance; @@ -18,7 +28,6 @@ public abstract class ConfigInstance<T> { } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { throw new IllegalStateException(String.format("Could not create default instance of config for %s. Make sure there is a default constructor!", this.configClass.getSimpleName())); } - } public T getConfig() { diff --git a/src/main/java/dev/isxander/yacl/config/YACLConfigManager.java b/src/main/java/dev/isxander/yacl/config/YACLConfigManager.java index d91f3f6..a312d03 100644 --- a/src/main/java/dev/isxander/yacl/config/YACLConfigManager.java +++ b/src/main/java/dev/isxander/yacl/config/YACLConfigManager.java @@ -3,24 +3,58 @@ package dev.isxander.yacl.config; import java.util.HashMap; import java.util.Map; +/** + * Simple storage of config instances ({@link ConfigInstance}) for ease of access. + */ @SuppressWarnings("unchecked") public class YACLConfigManager { private static final Map<Class<?>, ConfigInstance<?>> configs = new HashMap<>(); + /** + * Registers and loads a config instance + * + * @param configInstance config to register + * @param <T> config data type + */ public static <T> void register(ConfigInstance<T> configInstance) { configs.put(configInstance.getConfigClass(), configInstance); configInstance.load(); } + /** + * Retrieves config data for a certain config. + * <p> + * Shorthand of {@code YACLConfigManager.getConfigInstance(configClass).getConfig()} + * + * @param configClass config data to get + * @return config data + * @param <T> config data type + */ public static <T> T getConfigData(Class<T> configClass) { return ((ConfigInstance<T>) configs.get(configClass)).getConfig(); } + /** + * Retrieves the config instance for a certain config. + * + * @param configClass config data type instance is bound to + * @return config instance + * @param <T> config data type + */ public static <T> ConfigInstance<T> getConfigInstance(Class<T> configClass) { return (ConfigInstance<T>) configs.get(configClass); } - public static <T, I extends ConfigInstance<T>> I getConfigInstanceType(Class<T> configClass) { - return (I) configs.get(configClass); + /** + * Very similar to {@link YACLConfigManager#getConfigInstance(Class)} but can retrieve + * a certain implementation of {@link ConfigInstance} + * + * @param configClass config data type is bound to + * @return config instance + * @param <T> config data type + * @param <U> config instance type + */ + public static <T, U extends ConfigInstance<T>> U getConfigInstanceType(Class<T> configClass) { + return (U) configs.get(configClass); } } |