SuggestionProviders.java

net.minecraft.commands.synchronization.SuggestionProviders

信息

  • 全限定名:net.minecraft.commands.synchronization.SuggestionProviders
  • 类型:public class
  • 包:net.minecraft.commands.synchronization
  • 源码路径:src/main/java/net/minecraft/commands/synchronization/SuggestionProviders.java
  • 起始行号:L16
  • 职责:

    TODO

字段/常量

  • PROVIDERS_BY_NAME

    • 类型: Map<Identifier,SuggestionProvider<SharedSuggestionProvider>>
    • 修饰符: private static final
    • 源码定位: L17
    • 说明:

      TODO

  • ID_ASK_SERVER

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

      TODO

  • ASK_SERVER

    • 类型: SuggestionProvider<SharedSuggestionProvider>
    • 修饰符: public static final
    • 源码定位: L19
    • 说明:

      TODO

  • AVAILABLE_SOUNDS

    • 类型: SuggestionProvider<SharedSuggestionProvider>
    • 修饰符: public static final
    • 源码定位: L20
    • 说明:

      TODO

  • SUMMONABLE_ENTITIES

    • 类型: SuggestionProvider<SharedSuggestionProvider>
    • 修饰符: public static final
    • 源码定位: L23
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.commands.synchronization.SuggestionProviders.RegisteredSuggestion
    • 类型: record
    • 修饰符: private
    • 源码定位: L54
    • 说明:

      TODO

构造器

方法

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

public static <S extends SharedSuggestionProvider> SuggestionProvider<S> register(Identifier name, SuggestionProvider<SharedSuggestionProvider> provider) @ L33

  • 方法名:register
  • 源码定位:L33
  • 返回类型: SuggestionProvider
  • 修饰符:public static

参数:

  • name: Identifier
  • provider: SuggestionProvider

说明:

TODO

public static <S extends SharedSuggestionProvider> SuggestionProvider<S> cast(SuggestionProvider<SharedSuggestionProvider> provider) @ L42

  • 方法名:cast
  • 源码定位:L42
  • 返回类型: SuggestionProvider
  • 修饰符:public static

参数:

  • provider: SuggestionProvider

说明:

TODO

public static <S extends SharedSuggestionProvider> SuggestionProvider<S> getProvider(Identifier name) @ L46

  • 方法名:getProvider
  • 源码定位:L46
  • 返回类型: SuggestionProvider
  • 修饰符:public static

参数:

  • name: Identifier

说明:

TODO

public static Identifier getName(SuggestionProvider<?> provider) @ L50

  • 方法名:getName
  • 源码定位:L50
  • 返回类型:Identifier
  • 修饰符:public static

参数:

  • provider: SuggestionProvider<?>

说明:

TODO

代码

public class SuggestionProviders {
    private static final Map<Identifier, SuggestionProvider<SharedSuggestionProvider>> PROVIDERS_BY_NAME = new HashMap<>();
    private static final Identifier ID_ASK_SERVER = Identifier.withDefaultNamespace("ask_server");
    public static final SuggestionProvider<SharedSuggestionProvider> ASK_SERVER = register(ID_ASK_SERVER, (c, p) -> c.getSource().customSuggestion(c));
    public static final SuggestionProvider<SharedSuggestionProvider> AVAILABLE_SOUNDS = register(
        Identifier.withDefaultNamespace("available_sounds"), (c, p) -> SharedSuggestionProvider.suggestResource(c.getSource().getAvailableSounds(), p)
    );
    public static final SuggestionProvider<SharedSuggestionProvider> SUMMONABLE_ENTITIES = register(
        Identifier.withDefaultNamespace("summonable_entities"),
        (c, p) -> SharedSuggestionProvider.suggestResource(
            BuiltInRegistries.ENTITY_TYPE.stream().filter(entityType -> entityType.isEnabled(c.getSource().enabledFeatures()) && entityType.canSummon()),
            p,
            EntityType::getKey,
            EntityType::getDescription
        )
    );
 
    public static <S extends SharedSuggestionProvider> SuggestionProvider<S> register(Identifier name, SuggestionProvider<SharedSuggestionProvider> provider) {
        SuggestionProvider<SharedSuggestionProvider> previous = PROVIDERS_BY_NAME.putIfAbsent(name, provider);
        if (previous != null) {
            throw new IllegalArgumentException("A command suggestion provider is already registered with the name '" + name + "'");
        } else {
            return (SuggestionProvider<S>)new SuggestionProviders.RegisteredSuggestion(name, provider);
        }
    }
 
    public static <S extends SharedSuggestionProvider> SuggestionProvider<S> cast(SuggestionProvider<SharedSuggestionProvider> provider) {
        return (SuggestionProvider<S>)provider;
    }
 
    public static <S extends SharedSuggestionProvider> SuggestionProvider<S> getProvider(Identifier name) {
        return cast(PROVIDERS_BY_NAME.getOrDefault(name, ASK_SERVER));
    }
 
    public static Identifier getName(SuggestionProvider<?> provider) {
        return provider instanceof SuggestionProviders.RegisteredSuggestion registeredProvider ? registeredProvider.name : ID_ASK_SERVER;
    }
 
    private record RegisteredSuggestion(Identifier name, SuggestionProvider<SharedSuggestionProvider> delegate)
        implements SuggestionProvider<SharedSuggestionProvider> {
        @Override
        public CompletableFuture<Suggestions> getSuggestions(CommandContext<SharedSuggestionProvider> context, SuggestionsBuilder builder) throws CommandSyntaxException {
            return this.delegate.getSuggestions(context, builder);
        }
    }
}

引用的其他类

  • SharedSuggestionProvider

    • 引用位置: 参数/字段/方法调用/返回值
    • 关联成员: SharedSuggestionProvider.suggestResource()
  • Identifier

    • 引用位置: 参数/字段/方法调用/返回值
    • 关联成员: Identifier.withDefaultNamespace()