Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Bawnorton committed Sep 28, 2023
1 parent ac0b626 commit 5a32016
Showing 1 changed file with 9 additions and 34 deletions.
43 changes: 9 additions & 34 deletions src/main/java/com/bawnorton/bettertrims/config/ConfigManager.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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());
Expand All @@ -82,50 +82,32 @@ 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());
});
}

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());
}
Expand All @@ -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) {
Expand All @@ -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);
Expand Down

0 comments on commit 5a32016

Please sign in to comment.