diff options
| author | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-24 18:15:49 +0200 |
|---|---|---|
| committer | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-24 18:15:49 +0200 |
| commit | d69b634615134e294c4eee45827adc1eb73514b9 (patch) | |
| tree | 8f3f6059d423a24fd25643c7cdb975ddafda1d12 /src/main/java/cc/polyfrost/oneconfig/config/interfaces | |
| parent | 4b0c40c93658fd871876effa371ad9159845293d (diff) | |
| download | OneConfig-d69b634615134e294c4eee45827adc1eb73514b9.tar.gz OneConfig-d69b634615134e294c4eee45827adc1eb73514b9.tar.bz2 OneConfig-d69b634615134e294c4eee45827adc1eb73514b9.zip | |
OC-23 finish migration system
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/config/interfaces')
| -rw-r--r-- | src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java | 35 |
1 files changed, 22 insertions, 13 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 49d2049..a9d1d1e 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java @@ -4,6 +4,7 @@ import cc.polyfrost.oneconfig.config.annotations.ConfigPage; import cc.polyfrost.oneconfig.config.annotations.Option; import cc.polyfrost.oneconfig.config.core.ConfigCore; import cc.polyfrost.oneconfig.config.data.*; +import cc.polyfrost.oneconfig.config.migration.Migrator; import cc.polyfrost.oneconfig.config.profiles.Profiles; import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.gui.elements.config.*; @@ -26,6 +27,7 @@ public class Config { transient protected final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting().create(); transient public Mod mod; public final transient HashMap<String, BasicOption> optionNames = new HashMap<>(); + public transient boolean hasBeenInitialized = false; public boolean enabled = true; /** @@ -33,26 +35,21 @@ public class Config { * @param configFile file where config is stored */ public Config(Mod modData, String configFile) { - this(modData, configFile, true); - } - - /** - * @param modData information about the mod - * @param configFile file where config is stored - * @param initialize whether to load the config immediately or not - */ - public Config(Mod modData, String configFile, boolean initialize) { this.configFile = configFile; - if (initialize) init(modData); + init(modData); } public void init(Mod mod) { + boolean migrate = false; if (Profiles.getProfileFile(configFile).exists()) load(); + else if (!hasBeenInitialized && mod.migrator != null) migrate = true; else save(); mod.config = this; - generateOptionList(this, mod.defaultPage, mod); + generateOptionList(this, mod.defaultPage, mod, migrate); + if (migrate) save(); ConfigCore.oneConfigMods.add(mod); this.mod = mod; + hasBeenInitialized = true; } /** @@ -83,8 +80,9 @@ public class Config { * @param instance instance of target class * @param page page to add options too * @param mod data about the mod + * @param migrate whether the migrator should be run */ - protected void generateOptionList(Object instance, OptionPage page, Mod mod) { + protected void generateOptionList(Object instance, OptionPage page, Mod mod, boolean migrate) { Class<?> clazz = instance.getClass(); for (Field field : clazz.getDeclaredFields()) { String pagePrefix = page.equals(mod.defaultPage) ? "" : page.name + "."; @@ -103,7 +101,7 @@ public class Config { try { field.setAccessible(true); Object object = field.get(clazz); - generateOptionList(object, newPage, mod); + generateOptionList(object, newPage, mod, migrate); ConfigPageButton configPageButton = new ConfigPageButton(field, instance, option.name(), option.description(), newPage); switch (option.location()) { case TOP: @@ -124,6 +122,17 @@ public class Config { OptionCategory category = page.categories.get(option.category()); if (category.subcategories.size() == 0 || !category.subcategories.get(category.subcategories.size() - 1).getName().equals(option.subcategory())) category.subcategories.add(new OptionSubcategory(option.subcategory())); + if (migrate) { + try { + Object value = mod.migrator.getValue(field, option.name(), option.category(), option.subcategory()); + if (value != null) { + field.setAccessible(true); + field.set(instance, value); + } + } catch (Exception e) { + e.printStackTrace(); + } + } ArrayList<BasicOption> options = category.subcategories.get(category.subcategories.size() - 1).options; switch (option.type()) { case SWITCH: |
