Переглянути джерело

Add option for binary vs compact fast map, still need to decide what will be the default

malte0811 4 роки тому
батько
коміт
4c045d6653

+ 3 - 2
common/src/main/java/malte0811/ferritecore/impl/StateHolderImpl.java

@@ -21,8 +21,9 @@ public class StateHolderImpl {
             holder.setStateMap((FastMap<S>) LAST_FAST_STATE_MAP.get());
         } else {
             LAST_STATE_MAP.set(states);
-            //TODO option
-            FastMap<S> globalTable = new FastMap<>(holder.getVanillaPropertyMap().keySet(), states, true);
+            FastMap<S> globalTable = new FastMap<>(
+                    holder.getVanillaPropertyMap().keySet(), states, FerriteConfig.COMPACT_FAST_MAP.isEnabled()
+            );
             holder.setStateMap(globalTable);
             LAST_FAST_STATE_MAP.set(globalTable);
         }

+ 19 - 2
common/src/main/java/malte0811/ferritecore/mixin/config/FerriteConfig.java

@@ -16,6 +16,7 @@ public class FerriteConfig {
     public static final Option DEDUP_MULTIPART;
     public static final Option DEDUP_BLOCKSTATE_CACHE;
     public static final Option DEDUP_QUADS;
+    public static final Option COMPACT_FAST_MAP;
 
     static {
         ConfigBuilder builder = new ConfigBuilder();
@@ -48,6 +49,10 @@ public class FerriteConfig {
                 "bakedQuadDeduplication",
                 "Deduplicate vertex data of baked quads in the basic model implementations"
         );
+        COMPACT_FAST_MAP = builder.createOptInOption(
+                "compactFastMap",
+                "Use a more compact, but slightly slower representation for block states"
+        );
         builder.finish();
     }
 
@@ -55,7 +60,13 @@ public class FerriteConfig {
         private final List<Option> options = new ArrayList<>();
 
         public Option createOption(String name, String comment, Option... dependencies) {
-            Option result = new Option(name, comment, dependencies);
+            Option result = new Option(name, comment, true, dependencies);
+            options.add(result);
+            return result;
+        }
+
+        public Option createOptInOption(String name, String comment, Option... dependencies) {
+            Option result = new Option(name, comment, false, dependencies);
             options.add(result);
             return result;
         }
@@ -74,13 +85,15 @@ public class FerriteConfig {
     public static class Option {
         private final String name;
         private final String comment;
+        private final boolean defaultValue;
         private final List<Option> dependencies;
         @Nullable
         private Boolean value;
 
-        public Option(String name, String comment, Option... dependencies) {
+        public Option(String name, String comment, boolean defaultValue, Option... dependencies) {
             this.name = name;
             this.comment = comment;
+            this.defaultValue = defaultValue;
             this.dependencies = Arrays.asList(dependencies);
         }
 
@@ -110,5 +123,9 @@ public class FerriteConfig {
         public boolean isEnabled() {
             return Objects.requireNonNull(value);
         }
+
+        public boolean getDefaultValue() {
+            return defaultValue;
+        }
     }
 }

+ 1 - 1
fabric/src/main/java/malte0811/ferritecore/mixin/config/ConfigFileHandler.java

@@ -28,7 +28,7 @@ public class ConfigFileHandler {
         Object2BooleanMap<String> actualOptions = new Object2BooleanOpenHashMap<>();
         // Write data back manually, we can't put comments on individual values using Properties
         for (FerriteConfig.Option o : options) {
-            final boolean value = existingOptions.getOrDefault(o.getName(), true);
+            final boolean value = existingOptions.getOrDefault(o.getName(), o.getDefaultValue());
             actualOptions.put(o.getName(), value);
             newLines.add("# " + o.getComment());
             newLines.add(o.getName() + " = " + value);

+ 1 - 2
forge/src/main/java/malte0811/ferritecore/mixin/config/ConfigFileHandler.java

@@ -2,7 +2,6 @@ package malte0811.ferritecore.mixin.config;
 
 import com.electronwill.nightconfig.core.ConfigSpec;
 import com.electronwill.nightconfig.core.file.CommentedFileConfig;
-import com.electronwill.nightconfig.core.io.ParsingException;
 import malte0811.ferritecore.ModMain;
 import malte0811.ferritecore.mixin.config.FerriteConfig.Option;
 
@@ -15,7 +14,7 @@ public class ConfigFileHandler {
     public static void finish(List<Option> options) {
         ConfigSpec spec = new ConfigSpec();
         for (Option o : options) {
-            spec.define(o.getName(), true);
+            spec.define(o.getName(), o.getDefaultValue());
         }
         CommentedFileConfig configData = read(Paths.get("config", ModMain.MODID+"-mixin.toml"));
         for (Option o : options) {