ScoreHolderArgument.java
net.minecraft.commands.arguments.ScoreHolderArgument
信息
- 全限定名:net.minecraft.commands.arguments.ScoreHolderArgument
- 类型:public class
- 包:net.minecraft.commands.arguments
- 源码路径:src/main/java/net/minecraft/commands/arguments/ScoreHolderArgument.java
- 起始行号:L33
- 实现:ArgumentType<ScoreHolderArgument.Result>
- 职责:
TODO
字段/常量
-
SUGGEST_SCORE_HOLDERS- 类型:
SuggestionProvider<CommandSourceStack> - 修饰符:
public static final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
EXAMPLES- 类型:
Collection<String> - 修饰符:
private static final - 源码定位:
L46 - 说明:
TODO
- 类型:
-
ERROR_NO_RESULTS- 类型:
SimpleCommandExceptionType - 修饰符:
private static final - 源码定位:
L47 - 说明:
TODO
- 类型:
-
multiple- 类型:
boolean - 修饰符:
private final - 源码定位:
L48 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.commands.arguments.ScoreHolderArgument.Info- 类型:
class - 修饰符:
public static - 源码定位:
L168 - 说明:
TODO
- 类型:
-
net.minecraft.commands.arguments.ScoreHolderArgument.Info.Template- 类型:
class - 修饰符:
public final - 源码定位:
L194 - 说明:
TODO
- 类型:
-
net.minecraft.commands.arguments.ScoreHolderArgument.Result- 类型:
interface - 修饰符:
public - 源码定位:
L215 - 说明:
TODO
- 类型:
-
net.minecraft.commands.arguments.ScoreHolderArgument.SelectorResult- 类型:
class - 修饰符:
public static - 源码定位:
L219 - 说明:
TODO
- 类型:
构造器
public ScoreHolderArgument(boolean multiple) @ L50
- 构造器名:ScoreHolderArgument
- 源码定位:L50
- 修饰符:public
参数:
- multiple: boolean
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static ScoreHolder getName(CommandContext<CommandSourceStack> context, String name) @ L54
- 方法名:getName
- 源码定位:L54
- 返回类型:ScoreHolder
- 修饰符:public static
参数:
- context: CommandContext
- name: String
说明:
TODO
public static Collection<ScoreHolder> getNames(CommandContext<CommandSourceStack> context, String name) @ L58
- 方法名:getNames
- 源码定位:L58
- 返回类型:Collection
- 修饰符:public static
参数:
- context: CommandContext
- name: String
说明:
TODO
public static Collection<ScoreHolder> getNamesWithDefaultWildcard(CommandContext<CommandSourceStack> context, String name) @ L62
- 方法名:getNamesWithDefaultWildcard
- 源码定位:L62
- 返回类型:Collection
- 修饰符:public static
参数:
- context: CommandContext
- name: String
说明:
TODO
public static Collection<ScoreHolder> getNames(CommandContext<CommandSourceStack> context, String name, Supplier<Collection<ScoreHolder>> wildcard) @ L66
- 方法名:getNames
- 源码定位:L66
- 返回类型:Collection
- 修饰符:public static
参数:
- context: CommandContext
- name: String
- wildcard: Supplier<Collection
>
说明:
TODO
public static ScoreHolderArgument scoreHolder() @ L75
- 方法名:scoreHolder
- 源码定位:L75
- 返回类型:ScoreHolderArgument
- 修饰符:public static
参数:
- 无
说明:
TODO
public static ScoreHolderArgument scoreHolders() @ L79
- 方法名:scoreHolders
- 源码定位:L79
- 返回类型:ScoreHolderArgument
- 修饰符:public static
参数:
- 无
说明:
TODO
public ScoreHolderArgument.Result parse(StringReader reader) @ L83
- 方法名:parse
- 源码定位:L83
- 返回类型:ScoreHolderArgument.Result
- 修饰符:public
参数:
- reader: StringReader
说明:
TODO
public <S> ScoreHolderArgument.Result parse(StringReader reader, S source) @ L87
- 方法名:parse
- 源码定位:L87
- 返回类型:
ScoreHolderArgument.Result - 修饰符:public
参数:
- reader: StringReader
- source: S
说明:
TODO
private ScoreHolderArgument.Result parse(StringReader reader, boolean allowSelectors) @ L91
- 方法名:parse
- 源码定位:L91
- 返回类型:ScoreHolderArgument.Result
- 修饰符:private
参数:
- reader: StringReader
- allowSelectors: boolean
说明:
TODO
public Collection<String> getExamples() @ L163
- 方法名:getExamples
- 源码定位:L163
- 返回类型:Collection
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class ScoreHolderArgument implements ArgumentType<ScoreHolderArgument.Result> {
public static final SuggestionProvider<CommandSourceStack> SUGGEST_SCORE_HOLDERS = (context, builder) -> {
StringReader reader = new StringReader(builder.getInput());
reader.setCursor(builder.getStart());
EntitySelectorParser parser = new EntitySelectorParser(reader, context.getSource().permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS));
try {
parser.parse();
} catch (CommandSyntaxException var5) {
}
return parser.fillSuggestions(builder, suggestions -> SharedSuggestionProvider.suggest(context.getSource().getOnlinePlayerNames(), suggestions));
};
private static final Collection<String> EXAMPLES = Arrays.asList("Player", "0123", "*", "@e");
private static final SimpleCommandExceptionType ERROR_NO_RESULTS = new SimpleCommandExceptionType(Component.translatable("argument.scoreHolder.empty"));
private final boolean multiple;
public ScoreHolderArgument(boolean multiple) {
this.multiple = multiple;
}
public static ScoreHolder getName(CommandContext<CommandSourceStack> context, String name) throws CommandSyntaxException {
return getNames(context, name).iterator().next();
}
public static Collection<ScoreHolder> getNames(CommandContext<CommandSourceStack> context, String name) throws CommandSyntaxException {
return getNames(context, name, Collections::emptyList);
}
public static Collection<ScoreHolder> getNamesWithDefaultWildcard(CommandContext<CommandSourceStack> context, String name) throws CommandSyntaxException {
return getNames(context, name, context.getSource().getServer().getScoreboard()::getTrackedPlayers);
}
public static Collection<ScoreHolder> getNames(CommandContext<CommandSourceStack> context, String name, Supplier<Collection<ScoreHolder>> wildcard) throws CommandSyntaxException {
Collection<ScoreHolder> result = context.getArgument(name, ScoreHolderArgument.Result.class).getNames(context.getSource(), wildcard);
if (result.isEmpty()) {
throw EntityArgument.NO_ENTITIES_FOUND.create();
} else {
return result;
}
}
public static ScoreHolderArgument scoreHolder() {
return new ScoreHolderArgument(false);
}
public static ScoreHolderArgument scoreHolders() {
return new ScoreHolderArgument(true);
}
public ScoreHolderArgument.Result parse(StringReader reader) throws CommandSyntaxException {
return this.parse(reader, true);
}
public <S> ScoreHolderArgument.Result parse(StringReader reader, S source) throws CommandSyntaxException {
return this.parse(reader, EntitySelectorParser.allowSelectors(source));
}
private ScoreHolderArgument.Result parse(StringReader reader, boolean allowSelectors) throws CommandSyntaxException {
if (reader.canRead() && reader.peek() == '@') {
EntitySelectorParser parser = new EntitySelectorParser(reader, allowSelectors);
EntitySelector selector = parser.parse();
if (!this.multiple && selector.getMaxResults() > 1) {
throw EntityArgument.ERROR_NOT_SINGLE_ENTITY.createWithContext(reader);
} else {
return new ScoreHolderArgument.SelectorResult(selector);
}
} else {
int start = reader.getCursor();
while (reader.canRead() && reader.peek() != ' ') {
reader.skip();
}
String text = reader.getString().substring(start, reader.getCursor());
if (text.equals("*")) {
return (sender, wildcard) -> {
Collection<ScoreHolder> results = wildcard.get();
if (results.isEmpty()) {
throw ERROR_NO_RESULTS.create();
} else {
return results;
}
};
} else {
List<ScoreHolder> nameOnlyHolder = List.of(ScoreHolder.forNameOnly(text));
if (text.startsWith("#")) {
return (sender, wildcard) -> nameOnlyHolder;
} else {
try {
UUID uuid = UUID.fromString(text);
return (sender, wildcard) -> {
MinecraftServer server = sender.getServer();
ScoreHolder firstResult = null;
List<ScoreHolder> moreResults = null;
for (ServerLevel level : server.getAllLevels()) {
Entity entity = level.getEntity(uuid);
if (entity != null) {
if (firstResult == null) {
firstResult = entity;
} else {
if (moreResults == null) {
moreResults = new ArrayList<>();
moreResults.add(firstResult);
}
moreResults.add(entity);
}
}
}
if (moreResults != null) {
return moreResults;
} else {
return firstResult != null ? List.of(firstResult) : nameOnlyHolder;
}
};
} catch (IllegalArgumentException var7) {
return (sender, wildcard) -> {
MinecraftServer server = sender.getServer();
ServerPlayer player = server.getPlayerList().getPlayerByName(text);
return player != null ? List.of(player) : nameOnlyHolder;
};
}
}
}
}
}
@Override
public Collection<String> getExamples() {
return EXAMPLES;
}
public static class Info implements ArgumentTypeInfo<ScoreHolderArgument, ScoreHolderArgument.Info.Template> {
private static final byte FLAG_MULTIPLE = 1;
public void serializeToNetwork(ScoreHolderArgument.Info.Template template, FriendlyByteBuf out) {
int flags = 0;
if (template.multiple) {
flags |= 1;
}
out.writeByte(flags);
}
public ScoreHolderArgument.Info.Template deserializeFromNetwork(FriendlyByteBuf in) {
byte flags = in.readByte();
boolean multiple = (flags & 1) != 0;
return new ScoreHolderArgument.Info.Template(multiple);
}
public void serializeToJson(ScoreHolderArgument.Info.Template template, JsonObject out) {
out.addProperty("amount", template.multiple ? "multiple" : "single");
}
public ScoreHolderArgument.Info.Template unpack(ScoreHolderArgument argument) {
return new ScoreHolderArgument.Info.Template(argument.multiple);
}
public final class Template implements ArgumentTypeInfo.Template<ScoreHolderArgument> {
private final boolean multiple;
private Template(boolean multiple) {
Objects.requireNonNull(Info.this);
super();
this.multiple = multiple;
}
public ScoreHolderArgument instantiate(CommandBuildContext context) {
return new ScoreHolderArgument(this.multiple);
}
@Override
public ArgumentTypeInfo<ScoreHolderArgument, ?> type() {
return Info.this;
}
}
}
@FunctionalInterface
public interface Result {
Collection<ScoreHolder> getNames(final CommandSourceStack sender, Supplier<Collection<ScoreHolder>> wildcard) throws CommandSyntaxException;
}
public static class SelectorResult implements ScoreHolderArgument.Result {
private final EntitySelector selector;
public SelectorResult(EntitySelector selector) {
this.selector = selector;
}
@Override
public Collection<ScoreHolder> getNames(CommandSourceStack sender, Supplier<Collection<ScoreHolder>> wildcard) throws CommandSyntaxException {
List<? extends Entity> entities = this.selector.findEntities(sender);
if (entities.isEmpty()) {
throw EntityArgument.NO_ENTITIES_FOUND.create();
} else {
return List.copyOf(entities);
}
}
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SharedSuggestionProvider.suggest()
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
EntitySelectorParser(), EntitySelectorParser.allowSelectors()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.translatable()
- 引用位置:
-
- 引用位置:
参数/方法调用/返回值 - 关联成员:
ScoreHolder.forNameOnly()
- 引用位置: