mirror of
https://github.com/TeamMidnightDust/MidnightLib.git
synced 2025-12-16 09:15:10 +01:00
fix: improve identifier crash fix
Now uses Minecraft's built-in Identifier.validate function to check validity before applying changes
This commit is contained in:
@@ -66,20 +66,18 @@ public abstract class MidnightConfig {
|
|||||||
this.entry = field.getAnnotation(Entry.class);
|
this.entry = field.getAnnotation(Entry.class);
|
||||||
this.comment = field.getAnnotation(Comment.class);
|
this.comment = field.getAnnotation(Comment.class);
|
||||||
this.conditions = field.getAnnotationsByType(Condition.class);
|
this.conditions = field.getAnnotationsByType(Condition.class);
|
||||||
} else {
|
} else { this.fieldName = ""; this.dataType = null; }
|
||||||
this.fieldName = ""; this.dataType = null;
|
|
||||||
}
|
|
||||||
if (entry != null && !entry.name().isEmpty()) this.name = Text.translatable(entry.name());
|
if (entry != null && !entry.name().isEmpty()) this.name = Text.translatable(entry.name());
|
||||||
else if (comment != null && !comment.name().isEmpty()) this.name = Text.translatable(comment.name());
|
else if (comment != null && !comment.name().isEmpty()) this.name = Text.translatable(comment.name());
|
||||||
}
|
}
|
||||||
public void setValue(Object value) {
|
public void setValue(Object value) {
|
||||||
if (this.field.getType() != List.class) { this.value = value;
|
if (this.field.getType() != List.class) { this.value = value;
|
||||||
this.tempValue = value == null ? "" : value.toString(); // fix bug+: illegal Identifier cannot input character
|
this.tempValue = value.toString();
|
||||||
} else { writeList(this.listIndex, value);
|
} else { writeList(this.listIndex, value);
|
||||||
this.tempValue = toTemporaryValue(); }
|
this.tempValue = toTemporaryValue(); }
|
||||||
}
|
}
|
||||||
public String toTemporaryValue() {
|
public String toTemporaryValue() {
|
||||||
if (this.field.getType() != List.class) return this.value == null ? "" : this.value.toString(); // fix bug+: illegal Identifier cannot input character
|
if (this.field.getType() != List.class) return this.value.toString();
|
||||||
else try { return ((List<?>) this.value).get(this.listIndex).toString(); } catch (Exception ignored) {return "";}
|
else try { return ((List<?>) this.value).get(this.listIndex).toString(); } catch (Exception ignored) {return "";}
|
||||||
}
|
}
|
||||||
public void updateFieldValue() {
|
public void updateFieldValue() {
|
||||||
@@ -197,7 +195,8 @@ public abstract class MidnightConfig {
|
|||||||
boolean isNumber = pattern != null;
|
boolean isNumber = pattern != null;
|
||||||
info.function = (BiFunction<TextFieldWidget, ButtonWidget, Predicate<String>>) (t, b) -> s -> {
|
info.function = (BiFunction<TextFieldWidget, ButtonWidget, Predicate<String>>) (t, b) -> s -> {
|
||||||
s = s.trim();
|
s = s.trim();
|
||||||
if (!(s.isEmpty() || !isNumber || pattern.matcher(s).matches())) return false;
|
if (!(s.isEmpty() || !isNumber || pattern.matcher(s).matches()) ||
|
||||||
|
(info.dataType == Identifier.class && Identifier.validate(s).isError())) return false;
|
||||||
|
|
||||||
Number value = 0; boolean inLimits = false; info.error = null;
|
Number value = 0; boolean inLimits = false; info.error = null;
|
||||||
if (!(isNumber && s.isEmpty()) && !s.equals("-") && !s.equals(".")) {
|
if (!(isNumber && s.isEmpty()) && !s.equals("-") && !s.equals(".")) {
|
||||||
@@ -215,11 +214,7 @@ public abstract class MidnightConfig {
|
|||||||
b.active = entries.values().stream().allMatch(e -> e.inLimits);
|
b.active = entries.values().stream().allMatch(e -> e.inLimits);
|
||||||
|
|
||||||
if (inLimits) {
|
if (inLimits) {
|
||||||
if (info.dataType == Identifier.class) { // avoid the crash due to Identifier syntax not legitimate
|
if (info.dataType == Identifier.class) info.setValue(Identifier.tryParse(s));
|
||||||
Identifier id = Identifier.tryParse(s);
|
|
||||||
if (id == null) return false;
|
|
||||||
info.setValue(id);
|
|
||||||
}
|
|
||||||
else info.setValue(isNumber ? value : s);
|
else info.setValue(isNumber ? value : s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user