From 3857800292a7cc078ee05c5487b11a256682bef1 Mon Sep 17 00:00:00 2001 From: nextdaydelivery <12willettsh@gmail.com> Date: Sun, 13 Feb 2022 10:46:44 +0000 Subject: remake theme stuff + move packages around --- .../oneconfig/config/interfaces/Config.java | 126 +++++++++++++++++++++ .../config/interfaces/OneConfigTypeAdapter.java | 51 +++++++++ .../interfaces/OneConfigTypeAdapterFactory.java | 30 +++++ .../oneconfig/config/interfaces/Option.java | 76 +++++++++++++ 4 files changed, 283 insertions(+) create mode 100644 src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java create mode 100644 src/main/java/io/polyfrost/oneconfig/config/interfaces/OneConfigTypeAdapter.java create mode 100644 src/main/java/io/polyfrost/oneconfig/config/interfaces/OneConfigTypeAdapterFactory.java create mode 100644 src/main/java/io/polyfrost/oneconfig/config/interfaces/Option.java (limited to 'src/main/java/io/polyfrost/oneconfig/config/interfaces') diff --git a/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java new file mode 100644 index 0000000..ce73f0c --- /dev/null +++ b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java @@ -0,0 +1,126 @@ +package io.polyfrost.oneconfig.config.interfaces; + +import com.google.gson.*; +import io.polyfrost.oneconfig.config.annotations.*; +import io.polyfrost.oneconfig.config.core.ConfigCore; +import io.polyfrost.oneconfig.config.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; + + 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())); + } + + /** + * 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 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))) { + 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