Skip to content

Commit afd0370

Browse files
committed
Cleanup range entry codecs
1 parent fe754de commit afd0370

File tree

1 file changed

+22
-40
lines changed

1 file changed

+22
-40
lines changed

src/main/java/btw/lowercase/skyboxify/utils/ParserCodecs.java

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -82,53 +82,35 @@ public final class ParserCodecs {
8282
return Mth.X_AXIS;
8383
}, ParserCodecs::emptyCodecString);
8484

85-
private static final Codec<Range> RANGE_ENTRY = TRIMMED_STRING.xmap(input -> {
86-
if (input.contains("-")) {
87-
final String[] parts = input.split("-");
88-
if (parts.length == 2) {
89-
final int min = safeParseInteger(parts[0], -1);
90-
final int max = safeParseInteger(parts[1], -1);
91-
if (min >= 0 && max >= 0) {
92-
return new Range(min, max);
85+
private static Codec<Range> getRangeEntryCodec(final boolean allowNegative) {
86+
final int minValue = allowNegative ? Integer.MIN_VALUE : -1;
87+
return TRIMMED_STRING.xmap(input -> {
88+
if (input.contains("-")) {
89+
final String[] parts = input.split("-");
90+
if (parts.length == 2) {
91+
final int min = safeParseInteger(parts[0], minValue);
92+
final int max = safeParseInteger(parts[1], minValue);
93+
if (!allowNegative ? (min >= 0 && max >= 0) : (min != Integer.MIN_VALUE && max != Integer.MIN_VALUE)) {
94+
return new Range(min, max);
95+
}
96+
}
97+
} else {
98+
final String croppedInput = allowNegative ? (input.startsWith("(") && input.endsWith(")") ? input.substring(1, input.length() - 1) : input) : input;
99+
final int value = safeParseInteger(croppedInput, minValue);
100+
if (!allowNegative ? (value >= 0) : (value != Integer.MIN_VALUE)) {
101+
return new Range(value, value);
93102
}
94103
}
95-
} else {
96-
final int value = safeParseInteger(input, -1);
97-
if (value >= 0) {
98-
return new Range(value, value);
99-
}
100-
}
101-
102-
return null;
103-
}, ParserCodecs::emptyCodecString);
104104

105-
private static final Codec<Range> NEGATIVE_RANGE_ENTRY = TRIMMED_STRING.xmap(input -> {
106-
final String mapped = OPTIFINE_RANGE_SEPARATOR.matcher(input).replaceAll("$1=$2");
107-
if (mapped.contains("=")) {
108-
final String[] parts = mapped.split("=");
109-
if (parts.length == 2) {
110-
final int j = safeParseInteger(parts[0], Integer.MIN_VALUE);
111-
final int k = safeParseInteger(parts[1], Integer.MIN_VALUE);
112-
if (j != Integer.MIN_VALUE && k != Integer.MIN_VALUE) {
113-
return new Range(Math.min(j, k), Math.max(j, k));
114-
}
115-
}
116-
} else {
117-
final String strippedBracketsInput = input.startsWith("(") && input.endsWith(")") ? input.substring(1, input.length() - 1) : input;
118-
final int i = safeParseInteger(strippedBracketsInput, Integer.MIN_VALUE);
119-
if (i != Integer.MIN_VALUE) {
120-
return new Range(i, i);
121-
}
122-
}
123-
124-
return null;
125-
}, ParserCodecs::emptyCodecString);
105+
return null;
106+
}, ParserCodecs::emptyCodecString);
107+
}
126108

127-
public static Codec<List<Range>> getRangeEntriesCodec(boolean allowNegative) {
109+
public static Codec<List<Range>> getRangeEntriesCodec(final boolean allowNegative) {
128110
return TRIMMED_STRING.xmap(input -> {
129111
final List<Range> entries = new ArrayList<>();
130112
for (String part : input.split("\\s*,\\s*|\\s+")) {
131-
final Range range = (allowNegative ? NEGATIVE_RANGE_ENTRY : RANGE_ENTRY).parse(JavaOps.INSTANCE, part).getOrThrow();
113+
final Range range = getRangeEntryCodec(allowNegative).parse(JavaOps.INSTANCE, part).getOrThrow();
132114
if (range != null) {
133115
entries.add(range);
134116
}

0 commit comments

Comments
 (0)