From 6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6 Mon Sep 17 00:00:00 2001 From: isXander Date: Sun, 13 Nov 2022 19:04:45 +0000 Subject: 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 --- .../dev/isxander/yacl/config/ConfigInstance.java | 11 ++++++- .../isxander/yacl/config/YACLConfigManager.java | 38 ++++++++++++++++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) (limited to 'src/main/java/dev/isxander/yacl/config') 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 config data type + */ public abstract class ConfigInstance { private final Class configClass; private final T defaultInstance; @@ -18,7 +28,6 @@ public abstract class ConfigInstance { } 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, ConfigInstance> configs = new HashMap<>(); + /** + * Registers and loads a config instance + * + * @param configInstance config to register + * @param config data type + */ public static void register(ConfigInstance configInstance) { configs.put(configInstance.getConfigClass(), configInstance); configInstance.load(); } + /** + * Retrieves config data for a certain config. + *

+ * Shorthand of {@code YACLConfigManager.getConfigInstance(configClass).getConfig()} + * + * @param configClass config data to get + * @return config data + * @param config data type + */ public static T getConfigData(Class configClass) { return ((ConfigInstance) 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 config data type + */ public static ConfigInstance getConfigInstance(Class configClass) { return (ConfigInstance) configs.get(configClass); } - public static > I getConfigInstanceType(Class 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 config data type + * @param config instance type + */ + public static > U getConfigInstanceType(Class configClass) { + return (U) configs.get(configClass); } } -- cgit