mirror of
https://github.com/FalsePattern/FalsePatternLib.git
synced 2026-11-11 12:37:30 +00:00
fixed config property desynchronization
This commit is contained in:
13 files changed
+80
-63
No files matched your search
@@ -31,47 +31,53 @@ import cpw.mods.fml.client.config.GuiEditArrayEntries;
|
||||
import cpw.mods.fml.client.config.IConfigElement;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ConfigElementProxy<T> implements IConfigElement<T> {
|
||||
private final ConfigElement<T> element;
|
||||
private final Supplier<Property> prop;
|
||||
private final String comment;
|
||||
private final Runnable syncCallback;
|
||||
|
||||
public ConfigElementProxy(Property prop, String comment, Runnable syncCallback) {
|
||||
this.element = new ConfigElement<>(prop);
|
||||
public ConfigElementProxy(Supplier<Property> prop, String comment, Runnable syncCallback) {
|
||||
this.prop = prop;
|
||||
this.comment = comment;
|
||||
this.syncCallback = syncCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProperty() {
|
||||
return element.isProperty();
|
||||
private ConfigElement<T> element() {
|
||||
return new ConfigElement<>(prop.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProperty() {
|
||||
return element().isProperty();
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Override
|
||||
public Class<? extends GuiConfigEntries.IConfigEntry> getConfigEntryClass() {
|
||||
return element.getConfigEntryClass();
|
||||
return element().getConfigEntryClass();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends GuiEditArrayEntries.IArrayEntry> getArrayEntryClass() {
|
||||
return element.getArrayEntryClass();
|
||||
return element().getArrayEntryClass();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return element.getName();
|
||||
return element().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQualifiedName() {
|
||||
return element.getQualifiedName();
|
||||
return element().getQualifiedName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLanguageKey() {
|
||||
return element.getLanguageKey();
|
||||
return element().getLanguageKey();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -79,107 +85,108 @@ public class ConfigElementProxy<T> implements IConfigElement<T> {
|
||||
return comment;
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Override
|
||||
public List<IConfigElement> getChildElements() {
|
||||
return element.getChildElements();
|
||||
return element().getChildElements();
|
||||
}
|
||||
|
||||
// Caller sensitive
|
||||
@Override
|
||||
public ConfigGuiType getType() {
|
||||
return element.getType();
|
||||
return element().getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isList() {
|
||||
return element.isList();
|
||||
return element().isList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isListLengthFixed() {
|
||||
return element.isListLengthFixed();
|
||||
return element().isListLengthFixed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxListLength() {
|
||||
return element.getMaxListLength();
|
||||
return element().getMaxListLength();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDefault() {
|
||||
return element.isDefault();
|
||||
return element().isDefault();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDefault() {
|
||||
return element.getDefault();
|
||||
return element().getDefault();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getDefaults() {
|
||||
return element.getDefaults();
|
||||
return element().getDefaults();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToDefault() {
|
||||
element.setToDefault();
|
||||
element().setToDefault();
|
||||
syncCallback.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requiresWorldRestart() {
|
||||
return element.requiresWorldRestart();
|
||||
return element().requiresWorldRestart();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean showInGui() {
|
||||
return element.showInGui();
|
||||
return element().showInGui();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requiresMcRestart() {
|
||||
return element.requiresMcRestart();
|
||||
return element().requiresMcRestart();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object get() {
|
||||
return element.get();
|
||||
return element().get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getList() {
|
||||
return element.getList();
|
||||
return element().getList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(T value) {
|
||||
element.set(value);
|
||||
element().set(value);
|
||||
syncCallback.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(T[] aVal) {
|
||||
element.set(aVal);
|
||||
element().set(aVal);
|
||||
syncCallback.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getValidValues() {
|
||||
return element.getValidValues();
|
||||
return element().getValidValues();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T getMinValue() {
|
||||
return element.getMinValue();
|
||||
return element().getMinValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T getMaxValue() {
|
||||
return element.getMaxValue();
|
||||
return element().getMaxValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pattern getValidationPattern() {
|
||||
return element.getValidationPattern();
|
||||
return element().getValidationPattern();
|
||||
}
|
||||
}
|
||||
@@ -294,7 +294,7 @@ public class ParsedConfiguration {
|
||||
+ "! Did you forget an @Ignore annotation?");
|
||||
}
|
||||
configField.init();
|
||||
elements.computeIfAbsent(name, (name2) -> new ConfigElementProxy<>(configField.getProperty(), configField.getComment(), () -> {
|
||||
elements.computeIfAbsent(name, (name2) -> new ConfigElementProxy<>(configField::getProperty, configField.getComment(), () -> {
|
||||
configField.load();
|
||||
configField.save();
|
||||
}));
|
||||
|
||||
@@ -47,8 +47,6 @@ public abstract class AConfigField<T> {
|
||||
protected final String langKey;
|
||||
protected final Property.Type type;
|
||||
@Getter
|
||||
protected final Property property;
|
||||
@Getter
|
||||
protected final String comment;
|
||||
private boolean uninitialized;
|
||||
|
||||
@@ -85,6 +83,7 @@ public abstract class AConfigField<T> {
|
||||
this.type = type;
|
||||
val cat = configuration.getCategory(category);
|
||||
uninitialized = !cat.containsKey(name);
|
||||
final Property property;
|
||||
if (isList) {
|
||||
property = configuration.get(category, name, new String[0], comment, type);
|
||||
} else {
|
||||
@@ -139,6 +138,10 @@ public abstract class AConfigField<T> {
|
||||
}
|
||||
}
|
||||
|
||||
public Property getProperty() {
|
||||
return configuration.getCategory(category).get(name);
|
||||
}
|
||||
|
||||
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
||||
public abstract boolean validateField();
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ public abstract class AListConfigField<T, E extends Annotation> extends AConfigF
|
||||
throws ConfigException {
|
||||
super(params, type, true);
|
||||
fixedLength = field.isAnnotationPresent(Config.ListFixedLength.class);
|
||||
val property = getProperty();
|
||||
property.setIsListLengthFixed(fixedLength);
|
||||
defaultValue = Optional.ofNullable(field.getAnnotation(defaultAnnotation))
|
||||
.map(defaultValueGetter)
|
||||
|
||||
+4
-2
@@ -26,6 +26,7 @@ import com.falsepattern.lib.config.Config;
|
||||
import com.falsepattern.lib.config.event.ConfigValidationFailureEvent;
|
||||
import com.falsepattern.lib.internal.impl.config.ConfigFieldParameters;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.val;
|
||||
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
import net.minecraftforge.common.config.Property;
|
||||
@@ -46,6 +47,7 @@ public class BooleanConfigField extends AConfigField<Boolean> {
|
||||
defaultValue = Optional.ofNullable(field.getAnnotation(Config.DefaultBoolean.class))
|
||||
.map(Config.DefaultBoolean::value)
|
||||
.orElseThrow(() -> noDefault(field, "DefaultBoolean"));
|
||||
val property = getProperty();
|
||||
property.setDefaultValue(defaultValue);
|
||||
if (!property.isBooleanValue()) {
|
||||
setToDefault();
|
||||
@@ -71,12 +73,12 @@ public class BooleanConfigField extends AConfigField<Boolean> {
|
||||
|
||||
@Override
|
||||
protected Boolean getConfig() {
|
||||
return property.getBoolean();
|
||||
return getProperty().getBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(Boolean value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -46,6 +46,7 @@ public class BooleanListConfigField extends AListConfigField<boolean[], Config.D
|
||||
Config.DefaultBooleanList::value,
|
||||
Property::setDefaultValues
|
||||
);
|
||||
val property = getProperty();
|
||||
if (!property.isBooleanList()) {
|
||||
setToDefault();
|
||||
}
|
||||
@@ -91,12 +92,12 @@ public class BooleanListConfigField extends AListConfigField<boolean[], Config.D
|
||||
|
||||
@Override
|
||||
protected boolean[] getConfig() {
|
||||
return property.getBooleanList();
|
||||
return getProperty().getBooleanList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(boolean[] value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -52,6 +52,7 @@ public class DoubleConfigField extends AConfigField<Double> {
|
||||
defaultValue = Optional.ofNullable(field.getAnnotation(Config.DefaultDouble.class))
|
||||
.map(Config.DefaultDouble::value)
|
||||
.orElseThrow(() -> noDefault(field, "DefaultDouble"));
|
||||
val property = getProperty();
|
||||
property.setDefaultValue(defaultValue);
|
||||
property.setMinValue(min);
|
||||
property.setMaxValue(max);
|
||||
@@ -79,12 +80,12 @@ public class DoubleConfigField extends AConfigField<Double> {
|
||||
|
||||
@Override
|
||||
protected Double getConfig() {
|
||||
return property.getDouble();
|
||||
return getProperty().getDouble();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(Double value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -52,6 +52,7 @@ public class DoubleListConfigField extends AListConfigField<double[], Config.Def
|
||||
val range = Optional.ofNullable(field.getAnnotation(Config.RangeDouble.class));
|
||||
min = range.map(Config.RangeDouble::min).orElse(-Double.MAX_VALUE);
|
||||
max = range.map(Config.RangeDouble::max).orElse(Double.MAX_VALUE);
|
||||
val property = getProperty();
|
||||
property.setMinValue(min);
|
||||
property.setMaxValue(max);
|
||||
try {
|
||||
@@ -116,12 +117,12 @@ public class DoubleListConfigField extends AListConfigField<double[], Config.Def
|
||||
|
||||
@Override
|
||||
protected double[] getConfig() {
|
||||
return property.getDoubleList();
|
||||
return getProperty().getDoubleList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(double[] value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+10
-13
@@ -72,6 +72,7 @@ public class EnumConfigField<T extends Enum<T>> extends AConfigField<T> {
|
||||
+ enumClass.getName())))
|
||||
.orElseThrow(() -> noDefault(field, "DefaultEnum"));
|
||||
maxLength = enumNameMap.keySet().stream().mapToInt(String::length).max().orElse(0);
|
||||
val property = getProperty();
|
||||
property.setDefaultValue(defaultValue.name());
|
||||
property.setValidValues(enumNameMap.keySet().toArray(new String[0]));
|
||||
if (!enumNameMap.containsValue(getConfig())) {
|
||||
@@ -109,17 +110,13 @@ public class EnumConfigField<T extends Enum<T>> extends AConfigField<T> {
|
||||
|
||||
private T getEnumByName(String name) {
|
||||
if (!enumNameMap.containsKey(name)) {
|
||||
FPLog.LOG.warn("Invalid value "
|
||||
+ name
|
||||
+ " for enum configuration field "
|
||||
+ field.getName()
|
||||
+ " of type "
|
||||
+ enumClass.getName()
|
||||
+ " in config class "
|
||||
+ field.getDeclaringClass().getName()
|
||||
+ "! Using default value of "
|
||||
+ defaultValue.name()
|
||||
+ "!");
|
||||
FPLog.LOG.warn(
|
||||
"Invalid value {} for enum configuration field {} of type {} in config class {}! Using default value of {}!",
|
||||
name,
|
||||
field.getName(),
|
||||
enumClass.getName(),
|
||||
field.getDeclaringClass().getName(),
|
||||
defaultValue.name());
|
||||
return defaultValue;
|
||||
}
|
||||
return enumNameMap.get(name);
|
||||
@@ -139,12 +136,12 @@ public class EnumConfigField<T extends Enum<T>> extends AConfigField<T> {
|
||||
|
||||
@Override
|
||||
protected T getConfig() {
|
||||
return getEnumByName(property.getString());
|
||||
return getEnumByName(getProperty().getString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(T value) {
|
||||
property.set(value.name());
|
||||
getProperty().set(value.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,6 +52,7 @@ public class IntConfigField extends AConfigField<Integer> {
|
||||
defaultValue = Optional.ofNullable(field.getAnnotation(Config.DefaultInt.class))
|
||||
.map(Config.DefaultInt::value)
|
||||
.orElseThrow(() -> noDefault(field, "DefaultInt"));
|
||||
val property = getProperty();
|
||||
property.setDefaultValue(defaultValue);
|
||||
property.setMinValue(min);
|
||||
property.setMaxValue(max);
|
||||
@@ -79,12 +80,12 @@ public class IntConfigField extends AConfigField<Integer> {
|
||||
|
||||
@Override
|
||||
protected Integer getConfig() {
|
||||
return property.getInt();
|
||||
return getProperty().getInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(Integer value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -52,6 +52,7 @@ public class IntListConfigField extends AListConfigField<int[], Config.DefaultIn
|
||||
val range = Optional.ofNullable(field.getAnnotation(Config.RangeInt.class));
|
||||
min = range.map(Config.RangeInt::min).orElse(Integer.MIN_VALUE);
|
||||
max = range.map(Config.RangeInt::max).orElse(Integer.MAX_VALUE);
|
||||
val property = getProperty();
|
||||
property.setMinValue(min);
|
||||
property.setMaxValue(max);
|
||||
if (!property.isIntList()) {
|
||||
@@ -112,12 +113,12 @@ public class IntListConfigField extends AListConfigField<int[], Config.DefaultIn
|
||||
|
||||
@Override
|
||||
protected int[] getConfig() {
|
||||
return property.getIntList();
|
||||
return getProperty().getIntList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(int[] value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -54,6 +54,7 @@ public class StringConfigField extends AConfigField<String> {
|
||||
maxLength = Optional.ofNullable(field.getAnnotation(Config.StringMaxLength.class))
|
||||
.map(Config.StringMaxLength::value)
|
||||
.orElse(-1);
|
||||
val property = getProperty();
|
||||
property.setDefaultValue(defaultValue);
|
||||
property.comment += generateStringComment(maxLength, pattern, defaultValue);
|
||||
}
|
||||
@@ -137,12 +138,12 @@ public class StringConfigField extends AConfigField<String> {
|
||||
|
||||
@Override
|
||||
protected String getConfig() {
|
||||
return property.getString();
|
||||
return getProperty().getString();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(String value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -55,6 +55,7 @@ public class StringListConfigField extends AListConfigField<String[], Config.Def
|
||||
maxStringLength = Optional.ofNullable(field.getAnnotation(Config.StringMaxLength.class))
|
||||
.map(Config.StringMaxLength::value)
|
||||
.orElse(-1);
|
||||
val property = getProperty();
|
||||
if (!property.isList()) {
|
||||
setToDefault();
|
||||
}
|
||||
@@ -122,12 +123,12 @@ public class StringListConfigField extends AListConfigField<String[], Config.Def
|
||||
|
||||
@Override
|
||||
protected String[] getConfig() {
|
||||
return property.getStringList();
|
||||
return getProperty().getStringList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putConfig(String[] value) {
|
||||
property.set(value);
|
||||
getProperty().set(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user