aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/config
diff options
context:
space:
mode:
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);
}
}