StringReaderTerms.java

net.minecraft.util.parsing.packrat.commands.StringReaderTerms

信息

  • 全限定名:net.minecraft.util.parsing.packrat.commands.StringReaderTerms
  • 类型:public interface
  • 包:net.minecraft.util.parsing.packrat.commands
  • 源码路径:src/main/java/net/minecraft/util/parsing/packrat/commands/StringReaderTerms.java
  • 起始行号:L15
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.util.parsing.packrat.commands.StringReaderTerms.TerminalCharacters

    • 类型: class
    • 修饰符: public abstract static
    • 源码定位: L44
    • 说明:

      TODO

  • net.minecraft.util.parsing.packrat.commands.StringReaderTerms.TerminalWord

    • 类型: class
    • 修饰符: public static final
    • 源码定位: L69
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

static Term<StringReader> word(String value) @ L16

  • 方法名:word
  • 源码定位:L16
  • 返回类型:Term
  • 修饰符:static

参数:

  • value: String

说明:

TODO

static Term<StringReader> character(char value) @ L20

  • 方法名:character
  • 源码定位:L20
  • 返回类型:Term
  • 修饰符:static

参数:

  • value: char

说明:

TODO

static Term<StringReader> characters(char v1, char v2) @ L29

  • 方法名:characters
  • 源码定位:L29
  • 返回类型:Term
  • 修饰符:static

参数:

  • v1: char
  • v2: char

说明:

TODO

static StringReader createReader(String contents, int cursor) @ L38

  • 方法名:createReader
  • 源码定位:L38
  • 返回类型:StringReader
  • 修饰符:static

参数:

  • contents: String
  • cursor: int

说明:

TODO

代码

public interface StringReaderTerms {
    static Term<StringReader> word(String value) {
        return new StringReaderTerms.TerminalWord(value);
    }
 
    static Term<StringReader> character(char value) {
        return new StringReaderTerms.TerminalCharacters(CharList.of(value)) {
            @Override
            protected boolean isAccepted(char v) {
                return value == v;
            }
        };
    }
 
    static Term<StringReader> characters(char v1, char v2) {
        return new StringReaderTerms.TerminalCharacters(CharList.of(v1, v2)) {
            @Override
            protected boolean isAccepted(char v) {
                return v == v1 || v == v2;
            }
        };
    }
 
    static StringReader createReader(String contents, int cursor) {
        StringReader reader = new StringReader(contents);
        reader.setCursor(cursor);
        return reader;
    }
 
    public abstract static class TerminalCharacters implements Term<StringReader> {
        private final DelayedException<CommandSyntaxException> error;
        private final SuggestionSupplier<StringReader> suggestions;
 
        public TerminalCharacters(CharList values) {
            String joinedValues = values.intStream().mapToObj(Character::toString).collect(Collectors.joining("|"));
            this.error = DelayedException.create(CommandSyntaxException.BUILT_IN_EXCEPTIONS.literalIncorrect(), joinedValues);
            this.suggestions = s -> values.intStream().mapToObj(Character::toString);
        }
 
        @Override
        public boolean parse(ParseState<StringReader> state, Scope scope, Control control) {
            state.input().skipWhitespace();
            int cursor = state.mark();
            if (state.input().canRead() && this.isAccepted(state.input().read())) {
                return true;
            } else {
                state.errorCollector().store(cursor, this.suggestions, this.error);
                return false;
            }
        }
 
        protected abstract boolean isAccepted(char value);
    }
 
    public static final class TerminalWord implements Term<StringReader> {
        private final String value;
        private final DelayedException<CommandSyntaxException> error;
        private final SuggestionSupplier<StringReader> suggestions;
 
        public TerminalWord(String value) {
            this.value = value;
            this.error = DelayedException.create(CommandSyntaxException.BUILT_IN_EXCEPTIONS.literalIncorrect(), value);
            this.suggestions = s -> Stream.of(value);
        }
 
        @Override
        public boolean parse(ParseState<StringReader> state, Scope scope, Control control) {
            state.input().skipWhitespace();
            int cursor = state.mark();
            String value = state.input().readUnquotedString();
            if (!value.equals(this.value)) {
                state.errorCollector().store(cursor, this.suggestions, this.error);
                return false;
            } else {
                return true;
            }
        }
 
        @Override
        public String toString() {
            return "terminal[" + this.value + "]";
        }
    }
}

引用的其他类

  • DelayedException

    • 引用位置: 方法调用
    • 关联成员: DelayedException.create()
  • Term

    • 引用位置: 返回值