From 78274eb2b66b27052fe32960916fa4419202dc76 Mon Sep 17 00:00:00 2001 From: DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> Date: Sat, 12 Feb 2022 19:44:15 +0100 Subject: finish config backend --- .../io/polyfrost/oneconfig/interfaces/Config.java | 81 +++++++++++++++++++--- .../oneconfig/interfaces/OneConfigTypeAdapter.java | 4 +- .../io/polyfrost/oneconfig/interfaces/Option.java | 76 ++++++++++++++++++++ 3 files changed, 149 insertions(+), 12 deletions(-) create mode 100644 src/main/java/io/polyfrost/oneconfig/interfaces/Option.java (limited to 'src/main/java/io/polyfrost/oneconfig/interfaces') diff --git a/src/main/java/io/polyfrost/oneconfig/interfaces/Config.java b/src/main/java/io/polyfrost/oneconfig/interfaces/Config.java index 48abf1c..3549456 100644 --- a/src/main/java/io/polyfrost/oneconfig/interfaces/Config.java +++ b/src/main/java/io/polyfrost/oneconfig/interfaces/Config.java @@ -1,49 +1,112 @@ package io.polyfrost.oneconfig.interfaces; import com.google.gson.*; +import io.polyfrost.oneconfig.annotations.*; +import io.polyfrost.oneconfig.core.ConfigCore; +import io.polyfrost.oneconfig.data.ModData; +import io.polyfrost.oneconfig.gui.elements.config.*; import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Map; public class Config { private final File configFile; - public Config(File configFile) { + Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting() + .registerTypeAdapterFactory(OneConfigTypeAdapterFactory.getStaticTypeAdapterFactory()).create(); + + /** + * @param modData information about the mod + * @param configFile file where config is stored + */ + public Config(ModData modData, File configFile) { this.configFile = configFile; if (configFile.exists()) load(); else save(); + modData.config = this; + ConfigCore.settings.put(modData, generateOptionList(this.getClass())); } - Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting() - .registerTypeAdapterFactory(OneConfigTypeAdapterFactory.getStaticTypeAdapterFactory()).create(); - + /** + * Save current config to file + */ public void save() { try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(configFile), StandardCharsets.UTF_8))) { writer.write(gson.toJson(this.getClass())); - } catch (IOException ignored) { + } catch (IOException e) { + e.printStackTrace(); } } + /** + * Load file and overwrite current values + */ public void load() { try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8))) { - processPart(new JsonParser().parse(reader).getAsJsonObject(), this.getClass()); - } catch (IOException ignored) { + deserializePart(new JsonParser().parse(reader).getAsJsonObject(), this.getClass()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Generate the option list for internal use only + * + * @param clazz target class + * @return list of options + */ + private ArrayList