GameProfileArgument.java

net.minecraft.commands.arguments.GameProfileArgument

信息

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

    TODO

字段/常量

  • EXAMPLES

    • 类型: Collection<String>
    • 修饰符: private static final
    • 源码定位: L27
    • 说明:

      TODO

  • ERROR_UNKNOWN_PLAYER

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

      TODO

内部类/嵌套类型

  • net.minecraft.commands.arguments.GameProfileArgument.Result

    • 类型: interface
    • 修饰符: public
    • 源码定位: L94
    • 说明:

      TODO

  • net.minecraft.commands.arguments.GameProfileArgument.SelectorResult

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

      TODO

构造器

方法

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

public static Collection<NameAndId> getGameProfiles(CommandContext<CommandSourceStack> source, String name) @ L30

  • 方法名:getGameProfiles
  • 源码定位:L30
  • 返回类型:Collection
  • 修饰符:public static

参数:

  • source: CommandContext
  • name: String

说明:

TODO

public static GameProfileArgument gameProfile() @ L34

  • 方法名:gameProfile
  • 源码定位:L34
  • 返回类型:GameProfileArgument
  • 修饰符:public static

参数:

说明:

TODO

public <S> GameProfileArgument.Result parse(StringReader reader, S source) @ L38

  • 方法名:parse
  • 源码定位:L38
  • 返回类型: GameProfileArgument.Result
  • 修饰符:public

参数:

  • reader: StringReader
  • source: S

说明:

TODO

public GameProfileArgument.Result parse(StringReader reader) @ L42

  • 方法名:parse
  • 源码定位:L42
  • 返回类型:GameProfileArgument.Result
  • 修饰符:public

参数:

  • reader: StringReader

说明:

TODO

private static GameProfileArgument.Result parse(StringReader reader, boolean allowSelectors) @ L46

  • 方法名:parse
  • 源码定位:L46
  • 返回类型:GameProfileArgument.Result
  • 修饰符:private static

参数:

  • reader: StringReader
  • allowSelectors: boolean

说明:

TODO

public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> contextBuilder, SuggestionsBuilder builder) @ L70

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

参数:

  • contextBuilder: CommandContext
  • builder: SuggestionsBuilder

说明:

TODO

public Collection<String> getExamples() @ L88

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

参数:

说明:

TODO

代码

public class GameProfileArgument implements ArgumentType<GameProfileArgument.Result> {
    private static final Collection<String> EXAMPLES = Arrays.asList("Player", "0123", "dd12be42-52a9-4a91-a8a1-11c01849e498", "@e");
    public static final SimpleCommandExceptionType ERROR_UNKNOWN_PLAYER = new SimpleCommandExceptionType(Component.translatable("argument.player.unknown"));
 
    public static Collection<NameAndId> getGameProfiles(CommandContext<CommandSourceStack> source, String name) throws CommandSyntaxException {
        return source.getArgument(name, GameProfileArgument.Result.class).getNames(source.getSource());
    }
 
    public static GameProfileArgument gameProfile() {
        return new GameProfileArgument();
    }
 
    public <S> GameProfileArgument.Result parse(StringReader reader, S source) throws CommandSyntaxException {
        return parse(reader, EntitySelectorParser.allowSelectors(source));
    }
 
    public GameProfileArgument.Result parse(StringReader reader) throws CommandSyntaxException {
        return parse(reader, true);
    }
 
    private static GameProfileArgument.Result parse(StringReader reader, boolean allowSelectors) throws CommandSyntaxException {
        if (reader.canRead() && reader.peek() == '@') {
            EntitySelectorParser parser = new EntitySelectorParser(reader, allowSelectors);
            EntitySelector parse = parser.parse();
            if (parse.includesEntities()) {
                throw EntityArgument.ERROR_ONLY_PLAYERS_ALLOWED.createWithContext(reader);
            } else {
                return new GameProfileArgument.SelectorResult(parse);
            }
        } else {
            int start = reader.getCursor();
 
            while (reader.canRead() && reader.peek() != ' ') {
                reader.skip();
            }
 
            String name = reader.getString().substring(start, reader.getCursor());
            return c -> {
                Optional<NameAndId> result = c.getServer().services().nameToIdCache().get(name);
                return Collections.singleton(result.orElseThrow(ERROR_UNKNOWN_PLAYER::create));
            };
        }
    }
 
    @Override
    public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> contextBuilder, SuggestionsBuilder builder) {
        if (contextBuilder.getSource() instanceof SharedSuggestionProvider source) {
            StringReader reader = new StringReader(builder.getInput());
            reader.setCursor(builder.getStart());
            EntitySelectorParser parser = new EntitySelectorParser(reader, source.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS));
 
            try {
                parser.parse();
            } catch (CommandSyntaxException var7) {
            }
 
            return parser.fillSuggestions(builder, suggestions -> SharedSuggestionProvider.suggest(source.getOnlinePlayerNames(), suggestions));
        } else {
            return Suggestions.empty();
        }
    }
 
    @Override
    public Collection<String> getExamples() {
        return EXAMPLES;
    }
 
    @FunctionalInterface
    public interface Result {
        Collection<NameAndId> getNames(final CommandSourceStack sender) throws CommandSyntaxException;
    }
 
    public static class SelectorResult implements GameProfileArgument.Result {
        private final EntitySelector selector;
 
        public SelectorResult(EntitySelector selector) {
            this.selector = selector;
        }
 
        @Override
        public Collection<NameAndId> getNames(CommandSourceStack sender) throws CommandSyntaxException {
            List<ServerPlayer> players = this.selector.findPlayers(sender);
            if (players.isEmpty()) {
                throw EntityArgument.NO_PLAYERS_FOUND.create();
            } else {
                List<NameAndId> result = new ArrayList<>();
 
                for (ServerPlayer entity : players) {
                    result.add(entity.nameAndId());
                }
 
                return result;
            }
        }
    }
}

引用的其他类