diff --git a/src/main/java/com/bawnorton/bettertrims/config/ConfigManager.java b/src/main/java/com/bawnorton/bettertrims/config/ConfigManager.java index be42f69..6c5318f 100644 --- a/src/main/java/com/bawnorton/bettertrims/config/ConfigManager.java +++ b/src/main/java/com/bawnorton/bettertrims/config/ConfigManager.java @@ -1,11 +1,11 @@ package com.bawnorton.bettertrims.config; import com.bawnorton.bettertrims.BetterTrims; -import com.bawnorton.bettertrims.config.option.NestedConfigOption; import com.bawnorton.bettertrims.config.annotation.BooleanOption; import com.bawnorton.bettertrims.config.annotation.FloatOption; import com.bawnorton.bettertrims.config.annotation.IntOption; import com.bawnorton.bettertrims.config.annotation.NestedOption; +import com.bawnorton.bettertrims.config.option.NestedConfigOption; import com.bawnorton.bettertrims.config.option.reference.ConfigOptionReference; import com.bawnorton.bettertrims.networking.Networking; import com.bawnorton.bettertrims.util.Reflection; @@ -73,7 +73,7 @@ private static void validateFields(Object instance) { private static void validateFloatFields(Object instance) { Reflection.forEachFieldByAnnotation(instance, FloatOption.class, (field, annotation) -> { - validateFloatField(instance, field, annotation.value()); + setIfNull(instance, field, annotation.value()); ConfigOptionReference reference = ConfigOptionReference.of(instance, field); if (reference.floatValue() < annotation.min()) reference.floatValue(annotation.min()); if (reference.floatValue() > annotation.max()) reference.floatValue(annotation.max()); @@ -82,7 +82,7 @@ private static void validateFloatFields(Object instance) { private static void validateIntFields(Object instance) { Reflection.forEachFieldByAnnotation(instance, IntOption.class, (field, annotation) -> { - validateIntField(instance, field, annotation.value()); + setIfNull(instance, field, annotation.value()); ConfigOptionReference reference = ConfigOptionReference.of(instance, field); if (reference.intValue() < annotation.min()) reference.intValue(annotation.min()); if (reference.intValue() > annotation.max()) reference.intValue(annotation.max()); @@ -90,42 +90,24 @@ private static void validateIntFields(Object instance) { } private static void validateBooleanFields(Object instance) { - Reflection.forEachFieldByAnnotation(instance, BooleanOption.class, (field, annotation) -> validateBooleanField(instance, field, annotation.value())); + Reflection.forEachFieldByAnnotation(instance, BooleanOption.class, (field, annotation) -> setIfNull(instance, field, annotation.value())); } private static void validateNestedFields(Object instance) { Reflection.forEachFieldByAnnotation(instance, NestedOption.class, (field, annotation) -> { - validateNestedField(instance, field); + setIfNull(instance, field, Reflection.newInstance(field.getType())); NestedConfigOption nestedOption = Reflection.accessField(field, instance, NestedConfigOption.class); validateFields(nestedOption); }); } - private static void validateFloatField(Object instance, Field field, Float fallback) { - if (Reflection.accessField(field, instance) != null) return; - - Reflection.setField(field, instance, fallback); - } - - private static void validateIntField(Object instance, Field field, Integer fallback) { - if (Reflection.accessField(field, instance) != null) return; - - Reflection.setField(field, instance, fallback); - } - - private static void validateBooleanField(Object instance, Field field, Boolean fallback) { + private static void setIfNull(Object instance, Field field, Object fallback) { if (Reflection.accessField(field, instance) != null) return; Reflection.setField(field, instance, fallback); } - private static void validateNestedField(Object instance, Field field) { - if (Reflection.accessField(field, instance) != null) return; - - Reflection.setField(field, instance, Reflection.newInstance(field.getType())); - } - public static String serializeConfig() { return GSON.toJson(Config.getServerInstance()); } @@ -136,17 +118,11 @@ public static void deserializeConfig(String serialized) { } private static Config loadLocal() { - Config loaded = load(Config.getLocalInstance(), localConfigPath); - if (loaded == null) return Config.getLocalInstance(); - - return loaded; + return load(Config.getLocalInstance(), localConfigPath); } private static Config loadServer() { - Config loaded = load(Config.getServerInstance(), serverConfigPath); - if (loaded == null) return Config.getServerInstance(); - - return loaded; + return load(Config.getServerInstance(), serverConfigPath); } private static Config load(Config config, Path path) { @@ -157,10 +133,9 @@ private static Config load(Config config, Path path) { return config; } try { - config = GSON.fromJson(Files.newBufferedReader(path), Config.class); + return GSON.fromJson(Files.newBufferedReader(path), Config.class); } catch (JsonSyntaxException e) { BetterTrims.LOGGER.error("Failed to parse config file, using default config"); - return null; } } catch (IOException e) { BetterTrims.LOGGER.error("Failed to load config", e);