]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blobdiff - src/main/java/com/irtimaled/bbor/config/Configuration.java
Fully stop needing config on BoundingBoxType
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / config / Configuration.java
index 09f0dba44b0f4e552b64fc3716e58f9f00f14655..f061093ccbbdd3f1b8340289f1893534d1f9cb16 100644 (file)
@@ -3,13 +3,13 @@ package com.irtimaled.bbor.config;
 import com.google.common.io.Files;
 
 import java.io.*;
-import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 public class Configuration {
+    public static final String FALLBACK_CATEGORY = "features";
     private final File file;
 
     Configuration(File file) {
@@ -38,11 +38,11 @@ public class Configuration {
         }
     }
 
-    private Map<String, Map<String, Setting<?>>> settingsGroup = new HashMap<>();
+    private final Map<String, Map<String, Setting<?>>> settingsGroup = new HashMap<>();
 
     void load() {
         try {
-            List<String> lines = Files.readLines(file, Charset.forName("utf-8"));
+            List<String> lines = Files.readLines(file, StandardCharsets.UTF_8);
             String category = null;
             String lastCommentLine = null;
             for (String line : lines) {
@@ -94,7 +94,9 @@ public class Configuration {
         }
         Map<String, Setting<?>> settings = settingsGroup.get(category);
         Setting<?> setting = settings.get(settingName);
-        if(setting != null && setting.getType() != type) {
+        if (setting == null && !category.equals(FALLBACK_CATEGORY))
+            setting = getFallbackSetting(settingName, settings);
+        if (setting != null && setting.getType() != type) {
             setting = null;
         }
         if (setting == null) {
@@ -103,9 +105,21 @@ public class Configuration {
         return (Setting<T>) setting;
     }
 
+    private Setting<?> getFallbackSetting(String settingName, Map<String, Setting<?>> settings) {
+        Map<String, Setting<?>> fallbackSettings = settingsGroup.get(FALLBACK_CATEGORY);
+        if (fallbackSettings == null) return null;
+
+        Setting<?> setting = fallbackSettings.get(settingName);
+        if (setting != null) {
+            fallbackSettings.remove(settingName);
+            settings.put(settingName, setting);
+        }
+        return setting;
+    }
+
     private <T> char getType(T defaultValue) {
         String[] typeNames = defaultValue.getClass().getName().split("[.]");
-        return typeNames[typeNames.length-1].charAt(0);
+        return typeNames[typeNames.length - 1].charAt(0);
     }
 
     void put(Setting<?> setting) {