From 8727cd09af82cfeedea963c3557edb3482e9ea68 Mon Sep 17 00:00:00 2001 From: coolGi Date: Sun, 16 Jul 2023 23:40:35 +0930 Subject: [PATCH] Allowd option for values to go out of range --- .../distanthorizons/core/config/Config.java | 12 ++++++++++-- .../core/config/ConfigBase.java | 2 +- .../UnsafeValuesConfigListener.java | 19 +++++++++++++++++++ .../core/config/file/ConfigFileHandling.java | 1 + .../core/config/types/ConfigEntry.java | 10 +++++----- 5 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 core/src/main/java/com/seibel/distanthorizons/core/config/eventHandlers/UnsafeValuesConfigListener.java diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java index d76f23d19..05f70c537 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java @@ -27,6 +27,7 @@ import com.seibel.distanthorizons.api.enums.config.quickOptions.EThreadPreset; import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiDistantGeneratorMode; import com.seibel.distanthorizons.core.config.eventHandlers.QuickRenderToggleConfigEventHandler; import com.seibel.distanthorizons.core.config.eventHandlers.RenderCacheConfigEventHandler; +import com.seibel.distanthorizons.core.config.eventHandlers.UnsafeValuesConfigListener; import com.seibel.distanthorizons.core.config.eventHandlers.presets.ThreadPresetConfigEventHandler; import com.seibel.distanthorizons.core.config.eventHandlers.presets.RenderQualityPresetConfigEventHandler; import com.seibel.distanthorizons.core.config.types.ConfigCategory; @@ -1011,10 +1012,17 @@ public class Config + " Additionally, only stuff that's loaded after you enable this \n" + " will render their debug wireframes.") .build(); - + + // Note: This will reset on game restart, and should have a warning on the tooltip + public static ConfigEntry allowUnsafeValues = new ConfigEntry.Builder() + .set(false) + .setAppearance(EConfigEntryAppearance.ONLY_IN_GUI) + .addListener(UnsafeValuesConfigListener.INSTANCE) + .build(); + // can be set to public inorder to show in the config file and UI - private static ConfigCategory exampleConfigScreen = new ConfigCategory.Builder() + public static ConfigCategory exampleConfigScreen = new ConfigCategory.Builder() .set(ExampleConfigScreen.class) .build(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/ConfigBase.java b/core/src/main/java/com/seibel/distanthorizons/core/config/ConfigBase.java index 580f92143..7b0ddd4e3 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/ConfigBase.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/ConfigBase.java @@ -68,7 +68,7 @@ public class ConfigBase }}; /** Disables the minimum and maximum of any variable */ - public boolean disableMinMax = false; // Very fun to use + public boolean disableMinMax = false; // Very fun to use, but should always be disabled by default public final List> entries = new ArrayList<>(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/eventHandlers/UnsafeValuesConfigListener.java b/core/src/main/java/com/seibel/distanthorizons/core/config/eventHandlers/UnsafeValuesConfigListener.java new file mode 100644 index 000000000..4c0eca3bc --- /dev/null +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/eventHandlers/UnsafeValuesConfigListener.java @@ -0,0 +1,19 @@ +package com.seibel.distanthorizons.core.config.eventHandlers; + +import com.seibel.distanthorizons.core.config.Config; +import com.seibel.distanthorizons.core.config.listeners.IConfigListener; + +public class UnsafeValuesConfigListener implements IConfigListener { + public static UnsafeValuesConfigListener INSTANCE = new UnsafeValuesConfigListener(); + + @Override + public void onConfigValueSet() { + Config.Client.Advanced.Debugging.allowUnsafeValues.configBase.disableMinMax = + Config.Client.Advanced.Debugging.allowUnsafeValues.get(); + } + + @Override + public void onUiModify() { + + } +} diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/file/ConfigFileHandling.java b/core/src/main/java/com/seibel/distanthorizons/core/config/file/ConfigFileHandling.java index 0cb1aaa2a..270ecda4c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/file/ConfigFileHandling.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/file/ConfigFileHandling.java @@ -147,6 +147,7 @@ public class ConfigFileHandling { if (entry.getType() == workConfig.get(entry.getNameWCategory()).getClass()) { // If the types are the same entry.setWithoutSaving((T) workConfig.get(entry.getNameWCategory())); entry.clampWithinRange(); + return; } LOGGER.warn("Entry ["+ entry.getNameWCategory() +"] is invalid. Expected " + entry.getType() + " but got " + workConfig.get(entry.getNameWCategory()).getClass() + ". Using default value."); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java index 56f2953cb..76112607b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigEntry.java @@ -107,7 +107,7 @@ public class ConfigEntry extends AbstractConfigType> implem @SuppressWarnings("unchecked") // Suppress due to its always safe public void setMin(T newMin) { if (newMin == null) - newMin = (T) NumberUtil.getMinimum(newMin.getClass()); + newMin = (T) NumberUtil.getMinimum(this.value.getClass()); this.min = newMin; } /** Gets the max value */ @@ -118,7 +118,7 @@ public class ConfigEntry extends AbstractConfigType> implem @SuppressWarnings("unchecked") // Suppress due to its always safe public void setMax(T newMax) { if (newMax == null) - newMax = (T) NumberUtil.getMinimum(newMax.getClass()); + newMax = (T) NumberUtil.getMinimum(this.value.getClass()); this.max = newMax; } /** Sets the min and max within a single setter */ @@ -143,8 +143,8 @@ public class ConfigEntry extends AbstractConfigType> implem @SuppressWarnings("unchecked") // Suppress due to its always safe public void clampWithinRange(T min, T max) { byte validness = this.isValid(min, max); - if (validness == -1) this.value = (T) NumberUtil.getMinimum(min.getClass()); - if (validness == 1) this.value = (T) NumberUtil.getMinimum(max.getClass()); + if (validness == -1) this.value = (T) NumberUtil.getMinimum(this.value.getClass()); + if (validness == 1) this.value = (T) NumberUtil.getMaximum(this.value.getClass()); } @Override @@ -221,7 +221,7 @@ public class ConfigEntry extends AbstractConfigType> implem if (Number.class.isAssignableFrom(value.getClass())) { // Only check min max if it is a number if (this.max != null && Float.parseFloat(value.toString()) > Float.parseFloat(max.toString())) return 1; - if (this.min != null && Float.parseFloat(value.toString()) < Float.parseFloat(min.toString())) + if (min != null && Float.parseFloat(value.toString()) < Float.parseFloat(min.toString())) return -1; return 0;