Skip to content

Commit dc62f9d

Browse files
committed
rework config annotations a bit
1 parent d21a1d3 commit dc62f9d

File tree

2 files changed

+42
-27
lines changed

2 files changed

+42
-27
lines changed

src/main/java/com/falsepattern/lib/config/Config.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
@Target(ElementType.FIELD)
4343
@interface Ignore {}
4444

45+
@Retention(RetentionPolicy.RUNTIME)
46+
@Target(ElementType.FIELD)
47+
@interface DefaultBoolean {
48+
boolean value();
49+
}
50+
4551
@Retention(RetentionPolicy.RUNTIME)
4652
@Target(ElementType.FIELD)
4753
@interface RangeInt {
@@ -53,21 +59,33 @@
5359
@Retention(RetentionPolicy.RUNTIME)
5460
@Target(ElementType.FIELD)
5561
@interface DefaultInt {
56-
int value() default 0;
62+
int value();
63+
}
64+
65+
@Retention(RetentionPolicy.RUNTIME)
66+
@Target(ElementType.FIELD)
67+
@interface RangeFloat {
68+
float min() default Float.MIN_VALUE;
69+
70+
float max() default Float.MAX_VALUE;
5771
}
5872

5973
@Retention(RetentionPolicy.RUNTIME)
6074
@Target(ElementType.FIELD)
61-
@interface RangeDouble {
62-
double min() default Double.MIN_VALUE;
75+
@interface DefaultFloat {
76+
float value();
77+
}
6378

64-
double max() default Double.MAX_VALUE;
79+
@Retention(RetentionPolicy.RUNTIME)
80+
@Target(ElementType.FIELD)
81+
@interface DefaultString {
82+
String value();
6583
}
6684

6785
@Retention(RetentionPolicy.RUNTIME)
6886
@Target(ElementType.FIELD)
69-
@interface DefaultDouble {
70-
double value() default 0d;
87+
@interface Pattern {
88+
String value();
7189
}
7290

7391
@Retention(RetentionPolicy.RUNTIME)

src/main/java/com/falsepattern/lib/config/ConfigurationManager.java

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
import lombok.NoArgsConstructor;
99
import lombok.val;
1010
import lombok.var;
11-
import net.minecraft.launchwrapper.Launch;
1211
import net.minecraftforge.common.MinecraftForge;
1312
import net.minecraftforge.common.config.Configuration;
14-
import net.minecraftforge.common.config.Property;
1513

1614
import java.nio.file.Path;
1715
import java.util.*;
16+
import java.util.regex.Pattern;
1817

1918
/**
2019
* Class for controlling the loading of configuration files.
@@ -86,27 +85,25 @@ private static void processConfig(Class<?> configClass) throws IllegalAccessExce
8685
val name = Optional.ofNullable(field.getAnnotation(Config.Name.class)).map(Config.Name::value).orElse(field.getName());
8786
val langKey = Optional.ofNullable(field.getAnnotation(Config.LangKey.class)).map(Config.LangKey::value).orElse(name);
8887
var boxed = false;
89-
Property prop = cat.get(name);
90-
prop.comment = comment;
91-
prop.setLanguageKey(langKey);
92-
if ((boxed = field.getType().equals(Integer.class)) || field.getType().equals(int.class)) {
88+
if ((boxed = field.getType().equals(Boolean.class)) || field.getType().equals(boolean.class)) {
89+
val defaultValue = Optional.ofNullable(field.getAnnotation(Config.DefaultBoolean.class)).map(Config.DefaultBoolean::value).orElse(boxed ? (Boolean) field.get(null) : field.getBoolean(null));
90+
field.setBoolean(null, rawConfig.getBoolean(name, category, defaultValue, comment, langKey));
91+
} else if ((boxed = field.getType().equals(Integer.class)) || field.getType().equals(int.class)) {
9392
val range = Optional.ofNullable(field.getAnnotation(Config.RangeInt.class));
94-
prop.setMinValue(range.map(Config.RangeInt::min).orElse(Integer.MIN_VALUE));
95-
prop.setMaxValue(range.map(Config.RangeInt::max).orElse(Integer.MAX_VALUE));
96-
prop.setDefaultValue(Optional.ofNullable(field.getAnnotation(Config.DefaultInt.class)).map(Config.DefaultInt::value).orElse(boxed ? (Integer)field.get(null) : field.getInt(null)));
97-
field.setInt(null, prop.getInt());
98-
} else if ((boxed = field.getType().equals(Double.class)) || field.getType().equals(double.class)) {
99-
val range = Optional.ofNullable(field.getAnnotation(Config.RangeDouble.class));
100-
prop.setMinValue(range.map(Config.RangeDouble::min).orElse(Double.MIN_VALUE));
101-
prop.setMaxValue(range.map(Config.RangeDouble::max).orElse(Double.MAX_VALUE));
102-
prop.setDefaultValue(Optional.ofNullable(field.getAnnotation(Config.DefaultDouble.class)).map(Config.DefaultDouble::value).orElse(boxed ? (Double) field.get(null) : field.getDouble(null)));
103-
field.setDouble(null, prop.getDouble());
104-
} else if ((boxed = field.getType().equals(Boolean.class)) || field.getType().equals(boolean.class)) {
105-
prop.setDefaultValue(boxed ? (Boolean)field.get(null) : field.getBoolean(null));
106-
field.setBoolean(null, prop.getBoolean());
93+
val min = range.map(Config.RangeInt::min).orElse(Integer.MIN_VALUE);
94+
val max = range.map(Config.RangeInt::max).orElse(Integer.MAX_VALUE);
95+
val defaultValue = Optional.ofNullable(field.getAnnotation(Config.DefaultInt.class)).map(Config.DefaultInt::value).orElse(boxed ? (Integer)field.get(null) : field.getInt(null));
96+
field.setInt(null, rawConfig.getInt(name, category, defaultValue, min, max, comment, langKey));
97+
} else if ((boxed = field.getType().equals(Float.class)) || field.getType().equals(float.class)) {
98+
val range = Optional.ofNullable(field.getAnnotation(Config.RangeFloat.class));
99+
val min = range.map(Config.RangeFloat::min).orElse(Float.MIN_VALUE);
100+
val max = range.map(Config.RangeFloat::max).orElse(Float.MAX_VALUE);
101+
val defaultValue = Optional.ofNullable(field.getAnnotation(Config.DefaultFloat.class)).map(Config.DefaultFloat::value).orElse(boxed ? (Float) field.get(null) : field.getFloat(null));
102+
field.setDouble(null, rawConfig.getFloat(name, category, defaultValue, min, max, comment, langKey));
107103
} else if (field.getType().equals(String.class)) {
108-
prop.setDefaultValue((String)field.get(null));
109-
field.set(null, prop.getString());
104+
val defaultValue = Optional.ofNullable(field.getAnnotation(Config.DefaultString.class)).map(Config.DefaultString::value).orElse((String)field.get(null));
105+
val pattern = Optional.ofNullable(field.getAnnotation(Config.Pattern.class)).map(Config.Pattern::value).map(Pattern::compile).orElse(null);
106+
field.set(null, rawConfig.getString(name, category, defaultValue, comment, langKey, pattern));
110107
}
111108
if (field.isAnnotationPresent(Config.RequiresMcRestart.class)) {
112109
cat.setRequiresMcRestart(true);

0 commit comments

Comments
 (0)