diff options
author | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-11 20:11:42 +0200 |
---|---|---|
committer | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-11 20:11:42 +0200 |
commit | 174dcbf96f4715fe52a21ca8592d5d71b6fa4a8b (patch) | |
tree | 514d5bfbf20de70822d577e5a47ec47850d6d8e7 /src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java | |
parent | 671a9bbad56f7760536058d2c364c0b9ff2f9e52 (diff) | |
download | OneConfig-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.java | 29 |
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); + } } |