aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/polyfrost/oneconfig/config
diff options
context:
space:
mode:
authorWyvest <45589059+Wyvest@users.noreply.github.com>2022-06-27 03:54:28 +0700
committerWyvest <45589059+Wyvest@users.noreply.github.com>2022-06-27 03:54:28 +0700
commit9afbfbc4c41bf8f90b5de901797e18375da2c01a (patch)
tree125282f723f1e17a8a077c0a3222f777fd74ca06 /src/main/java/cc/polyfrost/oneconfig/config
parentf6bebfc3d14812dfac4592c1b35becf83d46cf76 (diff)
downloadOneConfig-9afbfbc4c41bf8f90b5de901797e18375da2c01a.tar.gz
OneConfig-9afbfbc4c41bf8f90b5de901797e18375da2c01a.tar.bz2
OneConfig-9afbfbc4c41bf8f90b5de901797e18375da2c01a.zip
cache text
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/config')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/Config.java43
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/annotations/Exclude.java24
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java3
3 files changed, 67 insertions, 3 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/Config.java b/src/main/java/cc/polyfrost/oneconfig/config/Config.java
index ee1d2bd..f864d71 100644
--- a/src/main/java/cc/polyfrost/oneconfig/config/Config.java
+++ b/src/main/java/cc/polyfrost/oneconfig/config/Config.java
@@ -1,6 +1,7 @@
package cc.polyfrost.oneconfig.config;
import cc.polyfrost.oneconfig.config.annotations.CustomOption;
+import cc.polyfrost.oneconfig.config.annotations.Exclude;
import cc.polyfrost.oneconfig.config.annotations.HUD;
import cc.polyfrost.oneconfig.config.annotations.Page;
import cc.polyfrost.oneconfig.config.core.ConfigUtils;
@@ -35,7 +36,7 @@ import java.util.function.Supplier;
public class Config {
public final transient HashMap<String, BasicOption> optionNames = new HashMap<>();
transient protected final String configFile;
- transient protected final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting().create();
+ transient protected final Gson gson = new GsonBuilder().setExclusionStrategies(new ExcludeStrategy()).excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting().create();
transient public Mod mod;
public transient boolean hasBeenInitialized = false;
public boolean enabled = true;
@@ -43,10 +44,21 @@ public class Config {
/**
* @param modData information about the mod
* @param configFile file where config is stored
+ * @param initialize whether to initialize the config.
*/
- public Config(Mod modData, String configFile) {
+ public Config(Mod modData, String configFile, boolean initialize) {
this.configFile = configFile;
- init(modData);
+ if (initialize) {
+ init(modData);
+ }
+ }
+
+ /**
+ * @param modData information about the mod
+ * @param configFile file where config is stored
+ */
+ public Config(Mod modData, String configFile) {
+ this(modData, configFile, true);
}
public void init(Mod mod) {
@@ -230,4 +242,29 @@ public class Config {
keyBind.setRunnable(runnable);
KeyBindHandler.INSTANCE.addKeyBind(keyBind);
}
+
+ private static class ExcludeStrategy implements ExclusionStrategy {
+
+ /**
+ * @param f the field object that is under test
+ * @return true if the field should be ignored; otherwise false
+ */
+ @Override
+ public boolean shouldSkipField(FieldAttributes f) {
+ Exclude annotation = f.getAnnotation(Exclude.class);
+ if (annotation != null) {
+ return annotation.type() != Exclude.ExcludeType.HUD;
+ }
+ return false;
+ }
+
+ /**
+ * @param clazz the class object that is under test
+ * @return true if the class should be ignored; otherwise false
+ */
+ @Override
+ public boolean shouldSkipClass(Class<?> clazz) {
+ return false;
+ }
+ }
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Exclude.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Exclude.java
new file mode 100644
index 0000000..6ffd1d9
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Exclude.java
@@ -0,0 +1,24 @@
+package cc.polyfrost.oneconfig.config.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Excludes fields from being serialized or deserialized by OneConfig's Config and HUD
+ * system.
+ *
+ * This can be used interchangeably with the transient modifier built into Java.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Exclude {
+ ExcludeType type() default ExcludeType.ALL;
+
+ enum ExcludeType {
+ ALL,
+ CONFIG,
+ HUD
+ }
+}
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java b/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java
index fb3ff3a..b8958de 100644
--- a/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java
+++ b/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java
@@ -1,5 +1,6 @@
package cc.polyfrost.oneconfig.config.core;
+import cc.polyfrost.oneconfig.config.annotations.Exclude;
import cc.polyfrost.oneconfig.config.elements.BasicOption;
import cc.polyfrost.oneconfig.config.elements.OptionCategory;
import cc.polyfrost.oneconfig.config.elements.OptionPage;
@@ -55,6 +56,8 @@ public class ConfigUtils {
parentClass = clazz;
}
for (Field field : fields) {
+ Exclude exclude = findAnnotation(field, Exclude.class);
+ if (exclude != null && exclude.type() != Exclude.ExcludeType.CONFIG) continue;
Option option = findAnnotation(field, Option.class);
if (option == null) continue;
options.add(getOption(option, field, object));