StringRepresentableArgument.java

net.minecraft.commands.arguments.StringRepresentableArgument

信息

  • 全限定名:net.minecraft.commands.arguments.StringRepresentableArgument
  • 类型:public class
  • 包:net.minecraft.commands.arguments
  • 源码路径:src/main/java/net/minecraft/commands/arguments/StringRepresentableArgument.java
  • 起始行号:L22
  • 实现:ArgumentType
  • 职责:

    TODO

字段/常量

  • ERROR_INVALID_VALUE

    • 类型: DynamicCommandExceptionType
    • 修饰符: private static final
    • 源码定位: L23
    • 说明:

      TODO

  • codec

    • 类型: Codec<T>
    • 修饰符: private final
    • 源码定位: L26
    • 说明:

      TODO

  • values

    • 类型: Supplier<T[]>
    • 修饰符: private final
    • 源码定位: L27
    • 说明:

      TODO

内部类/嵌套类型

构造器

protected StringRepresentableArgument(Codec<T> codec, Supplier<T[]> values) @ L29

  • 构造器名:StringRepresentableArgument
  • 源码定位:L29
  • 修饰符:protected

参数:

  • codec: Codec
  • values: Supplier<T[]>

说明:

TODO

方法

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

public T parse(StringReader reader) @ L34

  • 方法名:parse
  • 源码定位:L34
  • 返回类型:T
  • 修饰符:public

参数:

  • reader: StringReader

说明:

TODO

public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) @ L39

  • 方法名:listSuggestions
  • 源码定位:L39
  • 返回类型: CompletableFuture
  • 修饰符:public

参数:

  • context: CommandContext
  • builder: SuggestionsBuilder

说明:

TODO

public Collection<String> getExamples() @ L50

  • 方法名:getExamples
  • 源码定位:L50
  • 返回类型:Collection
  • 修饰符:public

参数:

说明:

TODO

protected String convertId(String id) @ L59

  • 方法名:convertId
  • 源码定位:L59
  • 返回类型:String
  • 修饰符:protected

参数:

  • id: String

说明:

TODO

代码

public class StringRepresentableArgument<T extends Enum<T> & StringRepresentable> implements ArgumentType<T> {
    private static final DynamicCommandExceptionType ERROR_INVALID_VALUE = new DynamicCommandExceptionType(
        value -> Component.translatableEscape("argument.enum.invalid", value)
    );
    private final Codec<T> codec;
    private final Supplier<T[]> values;
 
    protected StringRepresentableArgument(Codec<T> codec, Supplier<T[]> values) {
        this.codec = codec;
        this.values = values;
    }
 
    public T parse(StringReader reader) throws CommandSyntaxException {
        String id = reader.readUnquotedString();
        return this.codec.parse(JsonOps.INSTANCE, new JsonPrimitive(id)).result().orElseThrow(() -> ERROR_INVALID_VALUE.createWithContext(reader, id));
    }
 
    @Override
    public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
        return SharedSuggestionProvider.suggest(
            Arrays.<Enum>stream((Enum[])this.values.get())
                .map(rec$ -> ((StringRepresentable)rec$).getSerializedName())
                .map(this::convertId)
                .collect(Collectors.toList()),
            builder
        );
    }
 
    @Override
    public Collection<String> getExamples() {
        return Arrays.<Enum>stream((Enum[])this.values.get())
            .map(rec$ -> ((StringRepresentable)rec$).getSerializedName())
            .map(this::convertId)
            .limit(2L)
            .collect(Collectors.toList());
    }
 
    protected String convertId(String id) {
        return id;
    }
}

引用的其他类

  • SharedSuggestionProvider

    • 引用位置: 方法调用
    • 关联成员: SharedSuggestionProvider.suggest()
  • Component

    • 引用位置: 方法调用
    • 关联成员: Component.translatableEscape()