Skip to content

Commit 1972f65

Browse files
committed
added config initialization logic when the config wasn't present
1 parent d9ef290 commit 1972f65

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/main/java/com/falsepattern/lib/internal/impl/config/ParsedConfiguration.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,11 @@ public void reloadFields() throws ConfigException, IllegalAccessException {
175175
maxFieldNameLength = Math.max(maxFieldNameLength, field.getName().length());
176176
val fieldClass = field.getType();
177177
val name = field.getName();
178+
AConfigField<?> configField;
178179
if (constructors.containsKey(fieldClass)) {
179-
fields.put(name, constructors.get(fieldClass).construct(field, rawConfig, category));
180+
fields.put(name, configField = constructors.get(fieldClass).construct(field, rawConfig, category));
180181
} else if (fieldClass.isEnum()) {
181-
fields.put(name, new EnumConfigField<>(field, rawConfig, category));
182+
fields.put(name, configField = new EnumConfigField<>(field, rawConfig, category));
182183
} else {
183184
throw new ConfigException("Illegal config field: " + field.getName() + " in " + configClass.getName() +
184185
": Unsupported type " + fieldClass.getName() +
@@ -190,7 +191,7 @@ public void reloadFields() throws ConfigException, IllegalAccessException {
190191
if (field.isAnnotationPresent(Config.RequiresWorldRestart.class)) {
191192
cat.setRequiresWorldRestart(true);
192193
}
193-
val configField = fields.get(name);
194+
configField.init();
194195
elements.computeIfAbsent(name, (name2) -> new ConfigElementProxy<>(configField.getProperty(), () -> {
195196
configField.load();
196197
save();

src/main/java/com/falsepattern/lib/internal/impl/config/fields/AConfigField.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
package com.falsepattern.lib.internal.impl.config.fields;
2222

2323
import com.falsepattern.lib.config.Config;
24+
import lombok.val;
2425

2526
import net.minecraftforge.common.config.Configuration;
2627
import net.minecraftforge.common.config.Property;
@@ -41,6 +42,7 @@ public abstract class AConfigField<T> {
4142
protected final Property.Type type;
4243
protected final Property property;
4344
protected final String comment;
45+
private boolean uninitialized;
4446

4547
protected AConfigField(Field field, Configuration configuration, String category, Property.Type type) {
4648
this(field, configuration, category, type, false);
@@ -60,6 +62,8 @@ protected AConfigField(Field field, Configuration configuration, String category
6062
langKey =
6163
Optional.ofNullable(field.getAnnotation(Config.LangKey.class)).map(Config.LangKey::value).orElse(name);
6264
this.type = type;
65+
val cat = configuration.getCategory(category);
66+
uninitialized = !cat.containsKey(name);
6367
if (isList) {
6468
property = configuration.get(category, name, new String[0], comment, type);
6569
} else {
@@ -99,6 +103,14 @@ public void setToDefault() {
99103
putConfig(getDefault());
100104
}
101105

106+
public void init() {
107+
if (uninitialized) {
108+
uninitialized = false;
109+
putField(getDefault());
110+
putConfig(getDefault());
111+
}
112+
}
113+
102114
public Property getProperty() {
103115
return property;
104116
}

0 commit comments

Comments
 (0)