From 7bfe39fd13c272ce0bd40e2b0ee320a369f3001d Mon Sep 17 00:00:00 2001 From: John Paul Rutigliano Date: Wed, 23 Jun 2021 08:43:44 -0400 Subject: [PATCH] Improve config error handling and parsing. Give informational and descriptive console logs of errors found when parsing config. (Fails gracefully, but loudly/clearly.) --- .../com/fibermc/essentialcommands/Config.java | 124 +++++++++++------- 1 file changed, 76 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/fibermc/essentialcommands/Config.java b/src/main/java/com/fibermc/essentialcommands/Config.java index 1f1370a0..3bc28e02 100644 --- a/src/main/java/com/fibermc/essentialcommands/Config.java +++ b/src/main/java/com/fibermc/essentialcommands/Config.java @@ -3,6 +3,7 @@ import com.fibermc.essentialcommands.util.StringBuilderPlus; import com.google.gson.JsonDeserializer; import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; import net.minecraft.text.Style; import net.minecraft.util.Formatting; import org.apache.logging.log4j.Level; @@ -75,51 +76,27 @@ public static void loadOrCreateProperties() { } private static void initProperties() { - Map defProps = Map.ofEntries( - new SimpleEntry<>(KEY_FORMATTING_DEFAULT, "gold"), - new SimpleEntry<>(KEY_FORMATTING_ACCENT, "light_purple"), - new SimpleEntry<>(KEY_FORMATTING_ERROR, "red"), - new SimpleEntry<>(KEY_ENABLE_BACK, String.valueOf(true)), - new SimpleEntry<>(KEY_ENABLE_HOME, String.valueOf(true)), - new SimpleEntry<>(KEY_ENABLE_SPAWN, String.valueOf(true)), - new SimpleEntry<>(KEY_ENABLE_TPA, String.valueOf(true)), - new SimpleEntry<>(KEY_ENABLE_WARP, String.valueOf(true)), - new SimpleEntry<>(KEY_HOME_LIMIT, String.valueOf(-1)), - new SimpleEntry<>(KEY_TELEPORT_COOLDOWN, String.valueOf(1D)), - new SimpleEntry<>(KEY_TELEPORT_DELAY, String.valueOf(0D)), - new SimpleEntry<>(KEY_ALLOW_BACK_ON_DEATH, String.valueOf(false)), - new SimpleEntry<>(KEY_TELEPORT_REQUEST_DURATION, String.valueOf(60)), - new SimpleEntry<>(KEY_USE_PERMISSIONS_API, String.valueOf(false)), - new SimpleEntry<>(KEY_CHECK_FOR_UPDATES, String.valueOf(true)), - new SimpleEntry<>(KEY_TELEPORT_INTERRUPT_ON_DAMAGED, String.valueOf(true)), - new SimpleEntry<>(KEY_ALLOW_TELEPORT_BETWEEN_DIMENSIONS, String.valueOf(true)), - new SimpleEntry<>(KEY_OPS_BYPASS_TELEPORT_RULES, String.valueOf(true)) - ); - - // If property did not exist in file, load it into props now from defaults. - defProps.forEach((key, value) -> props.putIfAbsent(key, value)); - styleJsonDeserializer = new Style.Serializer(); jsonParser = new JsonParser(); - FORMATTING_DEFAULT = parseStyleOrDefault( (String) props.get(KEY_FORMATTING_DEFAULT), (String)defProps.get(KEY_FORMATTING_DEFAULT)); - FORMATTING_ACCENT = parseStyleOrDefault( (String) props.get(KEY_FORMATTING_ACCENT), (String)defProps.get(KEY_FORMATTING_ACCENT)); - FORMATTING_ERROR = parseStyleOrDefault( (String) props.get(KEY_FORMATTING_ERROR), (String)defProps.get(KEY_FORMATTING_ERROR)); - ENABLE_BACK = Boolean.parseBoolean( (String) props.get(KEY_ENABLE_BACK)); - ENABLE_HOME = Boolean.parseBoolean( (String) props.get(KEY_ENABLE_HOME)); - ENABLE_SPAWN = Boolean.parseBoolean( (String) props.get(KEY_ENABLE_SPAWN)); - ENABLE_TPA = Boolean.parseBoolean( (String) props.get(KEY_ENABLE_TPA)); - ENABLE_WARP = Boolean.parseBoolean( (String) props.get(KEY_ENABLE_WARP)); - HOME_LIMIT = Integer.parseInt( (String) props.get(KEY_HOME_LIMIT)); - TELEPORT_COOLDOWN = Double.parseDouble( (String) props.get(KEY_TELEPORT_COOLDOWN)); - TELEPORT_DELAY = Double.parseDouble( (String) props.get(KEY_TELEPORT_DELAY)); - ALLOW_BACK_ON_DEATH = Boolean.parseBoolean( (String) props.get(KEY_ALLOW_BACK_ON_DEATH)); - TELEPORT_REQUEST_DURATION = Integer.parseInt( (String) props.get(KEY_TELEPORT_REQUEST_DURATION)); - USE_PERMISSIONS_API = Boolean.parseBoolean( (String) props.get(KEY_USE_PERMISSIONS_API)); - CHECK_FOR_UPDATES = Boolean.parseBoolean( (String) props.get(KEY_CHECK_FOR_UPDATES)); - TELEPORT_INTERRUPT_ON_DAMAGED = Boolean.parseBoolean( (String) props.get(KEY_TELEPORT_INTERRUPT_ON_DAMAGED)); - ALLOW_TELEPORT_BETWEEN_DIMENSIONS = Boolean.parseBoolean( (String) props.get(KEY_ALLOW_TELEPORT_BETWEEN_DIMENSIONS)); - OPS_BYPASS_TELEPORT_RULES = Boolean.parseBoolean( (String) props.get(KEY_OPS_BYPASS_TELEPORT_RULES)); + FORMATTING_DEFAULT = parseStyleOrDefault( (String) props.get(KEY_FORMATTING_DEFAULT), "gold"); + FORMATTING_ACCENT = parseStyleOrDefault( (String) props.get(KEY_FORMATTING_ACCENT), "light_purple"); + FORMATTING_ERROR = parseStyleOrDefault( (String) props.get(KEY_FORMATTING_ERROR), "red"); + ENABLE_BACK = Boolean.parseBoolean( (String) props.getOrDefault(KEY_ENABLE_BACK, String.valueOf(true))); + ENABLE_HOME = Boolean.parseBoolean( (String) props.getOrDefault(KEY_ENABLE_HOME, String.valueOf(true))); + ENABLE_SPAWN = Boolean.parseBoolean( (String) props.getOrDefault(KEY_ENABLE_SPAWN, String.valueOf(true))); + ENABLE_TPA = Boolean.parseBoolean( (String) props.getOrDefault(KEY_ENABLE_TPA, String.valueOf(true))); + ENABLE_WARP = Boolean.parseBoolean( (String) props.getOrDefault(KEY_ENABLE_WARP, String.valueOf(true))); + HOME_LIMIT = parseInt( (String) props.getOrDefault(KEY_HOME_LIMIT, String.valueOf(-1))); + TELEPORT_COOLDOWN = parseDouble( (String) props.getOrDefault(KEY_TELEPORT_COOLDOWN, String.valueOf(1D))); + TELEPORT_DELAY = parseDouble( (String) props.getOrDefault(KEY_TELEPORT_DELAY, String.valueOf(0D))); + ALLOW_BACK_ON_DEATH = Boolean.parseBoolean( (String) props.getOrDefault(KEY_ALLOW_BACK_ON_DEATH, String.valueOf(false))); + TELEPORT_REQUEST_DURATION = parseInt( (String) props.getOrDefault(KEY_TELEPORT_REQUEST_DURATION, String.valueOf(60))); + USE_PERMISSIONS_API = Boolean.parseBoolean( (String) props.getOrDefault(KEY_USE_PERMISSIONS_API, String.valueOf(false))); + CHECK_FOR_UPDATES = Boolean.parseBoolean( (String) props.getOrDefault(KEY_CHECK_FOR_UPDATES, String.valueOf(true))); + TELEPORT_INTERRUPT_ON_DAMAGED = Boolean.parseBoolean( (String) props.getOrDefault(KEY_TELEPORT_INTERRUPT_ON_DAMAGED, String.valueOf(true))); + ALLOW_TELEPORT_BETWEEN_DIMENSIONS = Boolean.parseBoolean( (String) props.getOrDefault(KEY_ALLOW_TELEPORT_BETWEEN_DIMENSIONS, String.valueOf(true))); + OPS_BYPASS_TELEPORT_RULES = Boolean.parseBoolean( (String) props.getOrDefault(KEY_OPS_BYPASS_TELEPORT_RULES, String.valueOf(true))); try { Objects.requireNonNull(FORMATTING_DEFAULT); @@ -130,12 +107,34 @@ private static void initProperties() { e.printStackTrace(); } + props.putIfAbsent(KEY_FORMATTING_DEFAULT, String.valueOf(styleJsonDeserializer.serialize(FORMATTING_DEFAULT, null, null))); + props.putIfAbsent(KEY_FORMATTING_ACCENT, String.valueOf(styleJsonDeserializer.serialize(FORMATTING_ACCENT, null, null))); + props.putIfAbsent(KEY_FORMATTING_ERROR, String.valueOf(styleJsonDeserializer.serialize(FORMATTING_ERROR, null, null))); + props.putIfAbsent(KEY_ENABLE_BACK, String.valueOf(ENABLE_BACK)); + props.putIfAbsent(KEY_ENABLE_HOME, String.valueOf(ENABLE_HOME)); + props.putIfAbsent(KEY_ENABLE_SPAWN, String.valueOf(ENABLE_SPAWN)); + props.putIfAbsent(KEY_ENABLE_TPA, String.valueOf(ENABLE_TPA)); + props.putIfAbsent(KEY_ENABLE_WARP, String.valueOf(ENABLE_WARP)); + props.putIfAbsent(KEY_HOME_LIMIT, String.valueOf(HOME_LIMIT)); + props.putIfAbsent(KEY_TELEPORT_COOLDOWN, String.valueOf(TELEPORT_COOLDOWN)); + props.putIfAbsent(KEY_TELEPORT_DELAY, String.valueOf(TELEPORT_DELAY)); + props.putIfAbsent(KEY_ALLOW_BACK_ON_DEATH, String.valueOf(ALLOW_BACK_ON_DEATH)); + props.putIfAbsent(KEY_TELEPORT_REQUEST_DURATION, String.valueOf(TELEPORT_REQUEST_DURATION)); + props.putIfAbsent(KEY_USE_PERMISSIONS_API, String.valueOf(USE_PERMISSIONS_API)); + props.putIfAbsent(KEY_CHECK_FOR_UPDATES, String.valueOf(CHECK_FOR_UPDATES)); + props.putIfAbsent(KEY_TELEPORT_INTERRUPT_ON_DAMAGED, String.valueOf(TELEPORT_INTERRUPT_ON_DAMAGED)); + props.putIfAbsent(KEY_ALLOW_TELEPORT_BETWEEN_DIMENSIONS, String.valueOf(ALLOW_TELEPORT_BETWEEN_DIMENSIONS)); + props.putIfAbsent(KEY_OPS_BYPASS_TELEPORT_RULES, String.valueOf(OPS_BYPASS_TELEPORT_RULES)); } - private static JsonDeserializer