aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/config
diff options
context:
space:
mode:
authorisXander <xandersmith2008@gmail.com>2022-11-13 19:04:45 +0000
committerisXander <xandersmith2008@gmail.com>2022-11-13 19:04:55 +0000
commit6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6 (patch)
tree3245fcd0782ff44c9f7c62f26844ab4c7510bbeb /src/main/java/dev/isxander/yacl/config
parentb9052c99778b5ad6e54e720f6f10756e8ef8cdc0 (diff)
downloadYetAnotherConfigLib-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.java11
-rw-r--r--src/main/java/dev/isxander/yacl/config/YACLConfigManager.java38
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);
}
}