47 lines
1.4 KiB
Java
47 lines
1.4 KiB
Java
package net.minecraft.util.parsing.packrat.commands;
|
|
|
|
import com.mojang.brigadier.StringReader;
|
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
|
import net.minecraft.util.parsing.packrat.DelayedException;
|
|
import net.minecraft.util.parsing.packrat.ParseState;
|
|
import net.minecraft.util.parsing.packrat.Rule;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public abstract class GreedyPredicateParseRule implements Rule<StringReader, String> {
|
|
private final int minSize;
|
|
private final int maxSize;
|
|
private final DelayedException<CommandSyntaxException> error;
|
|
|
|
public GreedyPredicateParseRule(int minSize, DelayedException<CommandSyntaxException> error) {
|
|
this(minSize, Integer.MAX_VALUE, error);
|
|
}
|
|
|
|
public GreedyPredicateParseRule(int minSize, int maxSize, DelayedException<CommandSyntaxException> error) {
|
|
this.minSize = minSize;
|
|
this.maxSize = maxSize;
|
|
this.error = error;
|
|
}
|
|
|
|
@Nullable
|
|
public String parse(ParseState<StringReader> parseState) {
|
|
StringReader stringReader = parseState.input();
|
|
String string = stringReader.getString();
|
|
int i = stringReader.getCursor();
|
|
int j = i;
|
|
|
|
while (j < string.length() && this.isAccepted(string.charAt(j)) && j - i < this.maxSize) {
|
|
j++;
|
|
}
|
|
|
|
int k = j - i;
|
|
if (k < this.minSize) {
|
|
parseState.errorCollector().store(parseState.mark(), this.error);
|
|
return null;
|
|
} else {
|
|
stringReader.setCursor(j);
|
|
return string.substring(i, j);
|
|
}
|
|
}
|
|
|
|
protected abstract boolean isAccepted(char c);
|
|
}
|