aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java
diff options
context:
space:
mode:
authorDeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>2022-05-11 20:11:42 +0200
committerDeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>2022-05-11 20:11:42 +0200
commit174dcbf96f4715fe52a21ca8592d5d71b6fa4a8b (patch)
tree514d5bfbf20de70822d577e5a47ec47850d6d8e7 /src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java
parent671a9bbad56f7760536058d2c364c0b9ff2f9e52 (diff)
downloadOneConfig-174dcbf96f4715fe52a21ca8592d5d71b6fa4a8b.tar.gz
OneConfig-174dcbf96f4715fe52a21ca8592d5d71b6fa4a8b.tar.bz2
OneConfig-174dcbf96f4715fe52a21ca8592d5d71b6fa4a8b.zip
disabling
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java b/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java
index 32853f8..9524723 100644
--- a/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java
+++ b/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java
@@ -19,15 +19,14 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
+import java.util.function.Supplier;
public class Config {
transient protected final String configFile;
transient protected final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting().create();
transient private Mod mod;
+ final transient private HashMap<String, BasicOption> optionNames = new HashMap<>();
public boolean enabled = true;
/**
@@ -78,6 +77,7 @@ public class Config {
*/
protected void generateOptionList(Class<?> clazz, OptionPage page, Mod mod) {
for (Field field : clazz.getDeclaredFields()) {
+ String pagePrefix = page.equals(mod.defaultPage) ? "" : page.name + ".";
if (!field.isAnnotationPresent(Option.class) && !field.isAnnotationPresent(ConfigPage.class)) {
processCustomOption(field, page);
continue;
@@ -94,16 +94,17 @@ public class Config {
field.setAccessible(true);
Object object = field.get(clazz);
generateOptionList(object.getClass(), newPage, mod);
+ ConfigPageButton configPageButton = new ConfigPageButton(field, option.name(), option.description(), newPage);
switch (option.location()) {
case TOP:
- subcategory.topButtons.add(new ConfigPageButton(field, option.name(), option.description(), newPage));
+ subcategory.topButtons.add(configPageButton);
break;
case BOTTOM:
- subcategory.bottomButtons.add(new ConfigPageButton(field, option.name(), option.description(), newPage));
+ subcategory.bottomButtons.add(configPageButton);
break;
}
- } catch (IllegalAccessException e) {
- continue;
+ optionNames.put(pagePrefix + field.getName(), configPageButton);
+ } catch (IllegalAccessException ignored) {
}
continue;
}
@@ -152,6 +153,7 @@ public class Config {
options.add(new ConfigKeyBind(field, option.name(), option.size()));
break;
}
+ optionNames.put(pagePrefix + field.getName(), options.get(options.size() - 1));
}
}
@@ -199,4 +201,15 @@ public class Config {
if (mod == null) return;
RenderManager.displayGuiScreen(new OneConfigGui(new ModConfigPage(mod.defaultPage)));
}
+
+ /**
+ * Disable an option if a certain condition is not met
+ *
+ * @param option The name of the field, or if the field is in a page "pageName.fieldName"
+ * @param condition The condition that has to be met for the option to be enabled
+ */
+ protected void addDependency(String option, Supplier<Boolean> condition) {
+ if (!optionNames.containsKey(option)) return;
+ optionNames.get(option).setDependency(condition);
+ }
}