Commands.java
net.minecraft.commands.Commands
信息
- 全限定名:net.minecraft.commands.Commands
- 类型:public class
- 包:net.minecraft.commands
- 源码路径:src/main/java/net/minecraft/commands/Commands.java
- 起始行号:L159
- 职责:
TODO
字段/常量
-
COMMAND_PREFIX- 类型:
String - 修饰符:
public static final - 源码定位:
L160 - 说明:
TODO
- 类型:
-
CURRENT_EXECUTION_CONTEXT- 类型:
ThreadLocal<ExecutionContext<CommandSourceStack>> - 修饰符:
private static final - 源码定位:
L161 - 说明:
TODO
- 类型:
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L162 - 说明:
TODO
- 类型:
-
LEVEL_ALL- 类型:
PermissionCheck - 修饰符:
public static final - 源码定位:
L163 - 说明:
TODO
- 类型:
-
LEVEL_MODERATORS- 类型:
PermissionCheck - 修饰符:
public static final - 源码定位:
L164 - 说明:
TODO
- 类型:
-
LEVEL_GAMEMASTERS- 类型:
PermissionCheck - 修饰符:
public static final - 源码定位:
L165 - 说明:
TODO
- 类型:
-
LEVEL_ADMINS- 类型:
PermissionCheck - 修饰符:
public static final - 源码定位:
L166 - 说明:
TODO
- 类型:
-
LEVEL_OWNERS- 类型:
PermissionCheck - 修饰符:
public static final - 源码定位:
L167 - 说明:
TODO
- 类型:
-
COMMAND_NODE_INSPECTOR- 类型:
ClientboundCommandsPacket.NodeInspector<CommandSourceStack> - 修饰符:
private static final private final public public public - 源码定位:
L168 - 说明:
TODO
- 类型:
-
dispatcher- 类型:
CommandDispatcher<CommandSourceStack> - 修饰符:
private final - 源码定位:
L188 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.commands.Commands.CommandSelection- 类型:
enum - 修饰符:
public static - 源码定位:
L552 - 说明:
TODO
- 类型:
-
net.minecraft.commands.Commands.ParseFunction- 类型:
interface - 修饰符:
public - 源码定位:
L567 - 说明:
TODO
- 类型:
构造器
public Commands(Commands.CommandSelection commandSelection, CommandBuildContext context) @ L190
- 构造器名:Commands
- 源码定位:L190
- 修饰符:public
参数:
- commandSelection: Commands.CommandSelection
- context: CommandBuildContext
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static <S> ParseResults<S> mapSource(ParseResults<S> parse, UnaryOperator<S> sourceOperator) @ L305
- 方法名:mapSource
- 源码定位:L305
- 返回类型:
ParseResults - 修饰符:public static
参数:
- parse: ParseResults
- sourceOperator: UnaryOperator
说明:
TODO
public void performPrefixedCommand(CommandSourceStack sender, String command) @ L311
- 方法名:performPrefixedCommand
- 源码定位:L311
- 返回类型:void
- 修饰符:public
参数:
- sender: CommandSourceStack
- command: String
说明:
TODO
public static String trimOptionalPrefix(String command) @ L316
- 方法名:trimOptionalPrefix
- 源码定位:L316
- 返回类型:String
- 修饰符:public static
参数:
- command: String
说明:
TODO
public void performCommand(ParseResults<CommandSourceStack> command, String commandString) @ L320
- 方法名:performCommand
- 源码定位:L320
- 返回类型:void
- 修饰符:public
参数:
- command: ParseResults
- commandString: String
说明:
TODO
private static ContextChain<CommandSourceStack> finishParsing(ParseResults<CommandSourceStack> command, String commandString, CommandSourceStack sender) @ L360
- 方法名:finishParsing
- 源码定位:L360
- 返回类型:ContextChain
- 修饰符:private static
参数:
- command: ParseResults
- commandString: String
- sender: CommandSourceStack
说明:
TODO
public static void executeCommandInContext(CommandSourceStack context, Consumer<ExecutionContext<CommandSourceStack>> config) @ L392
- 方法名:executeCommandInContext
- 源码定位:L392
- 返回类型:void
- 修饰符:public static
参数:
- context: CommandSourceStack
- config: Consumer<ExecutionContext
>
说明:
TODO
public void sendCommands(ServerPlayer player) @ L412
- 方法名:sendCommands
- 源码定位:L412
- 返回类型:void
- 修饰符:public
参数:
- player: ServerPlayer
说明:
TODO
private static <S> void fillUsableCommands(CommandNode<S> source, CommandNode<S> target, S commandFilter, Map<CommandNode<S>,CommandNode<S>> converted) @ L420
- 方法名:fillUsableCommands
- 源码定位:L420
- 返回类型:
void - 修饰符:private static
参数:
- source: CommandNode
- target: CommandNode
- commandFilter: S
- converted: Map<CommandNode
,CommandNode>
说明:
TODO
public static LiteralArgumentBuilder<CommandSourceStack> literal(String literal) @ L438
- 方法名:literal
- 源码定位:L438
- 返回类型:LiteralArgumentBuilder
- 修饰符:public static
参数:
- literal: String
说明:
TODO
public static <T> RequiredArgumentBuilder<CommandSourceStack,T> argument(String name, ArgumentType<T> type) @ L442
- 方法名:argument
- 源码定位:L442
- 返回类型:
RequiredArgumentBuilder<CommandSourceStack,T> - 修饰符:public static
参数:
- name: String
- type: ArgumentType
说明:
TODO
public static Predicate<String> createValidator(Commands.ParseFunction parser) @ L446
- 方法名:createValidator
- 源码定位:L446
- 返回类型:Predicate
- 修饰符:public static
参数:
- parser: Commands.ParseFunction
说明:
TODO
public CommandDispatcher<CommandSourceStack> getDispatcher() @ L457
- 方法名:getDispatcher
- 源码定位:L457
- 返回类型:CommandDispatcher
- 修饰符:public
参数:
- 无
说明:
TODO
public static <S> void validateParseResults(ParseResults<S> command) @ L461
- 方法名:validateParseResults
- 源码定位:L461
- 返回类型:
void - 修饰符:public static
参数:
- command: ParseResults
说明:
TODO
public static <S> CommandSyntaxException getParseException(ParseResults<S> parse) @ L468
- 方法名:getParseException
- 源码定位:L468
- 返回类型:
CommandSyntaxException - 修饰符:public static
参数:
- parse: ParseResults
说明:
TODO
public static CommandBuildContext createValidationContext(HolderLookup.Provider registries) @ L480
- 方法名:createValidationContext
- 源码定位:L480
- 返回类型:CommandBuildContext
- 修饰符:public static
参数:
- registries: HolderLookup.Provider
说明:
TODO
public static void validate() @ L523
- 方法名:validate
- 源码定位:L523
- 返回类型:void
- 修饰符:public static
参数:
- 无
说明:
TODO
public static <T extends PermissionSetSupplier> PermissionProviderCheck<T> hasPermission(PermissionCheck permission) @ L544
- 方法名:hasPermission
- 源码定位:L544
- 返回类型:
PermissionProviderCheck - 修饰符:public static
参数:
- permission: PermissionCheck
说明:
TODO
public static CommandSourceStack createCompilationContext(PermissionSet compilationPermissions) @ L548
- 方法名:createCompilationContext
- 源码定位:L548
- 返回类型:CommandSourceStack
- 修饰符:public static
参数:
- compilationPermissions: PermissionSet
说明:
TODO
代码
public class Commands {
public static final String COMMAND_PREFIX = "/";
private static final ThreadLocal<@Nullable ExecutionContext<CommandSourceStack>> CURRENT_EXECUTION_CONTEXT = new ThreadLocal<>();
private static final Logger LOGGER = LogUtils.getLogger();
public static final PermissionCheck LEVEL_ALL = PermissionCheck.AlwaysPass.INSTANCE;
public static final PermissionCheck LEVEL_MODERATORS = new PermissionCheck.Require(Permissions.COMMANDS_MODERATOR);
public static final PermissionCheck LEVEL_GAMEMASTERS = new PermissionCheck.Require(Permissions.COMMANDS_GAMEMASTER);
public static final PermissionCheck LEVEL_ADMINS = new PermissionCheck.Require(Permissions.COMMANDS_ADMIN);
public static final PermissionCheck LEVEL_OWNERS = new PermissionCheck.Require(Permissions.COMMANDS_OWNER);
private static final ClientboundCommandsPacket.NodeInspector<CommandSourceStack> COMMAND_NODE_INSPECTOR = new ClientboundCommandsPacket.NodeInspector<CommandSourceStack>() {
private final CommandSourceStack noPermissionSource = Commands.createCompilationContext(PermissionSet.NO_PERMISSIONS);
@Override
public @Nullable Identifier suggestionId(ArgumentCommandNode<CommandSourceStack, ?> node) {
SuggestionProvider<CommandSourceStack> suggestionProvider = node.getCustomSuggestions();
return suggestionProvider != null ? SuggestionProviders.getName(suggestionProvider) : null;
}
@Override
public boolean isExecutable(CommandNode<CommandSourceStack> node) {
return node.getCommand() != null;
}
@Override
public boolean isRestricted(CommandNode<CommandSourceStack> node) {
Predicate<CommandSourceStack> requirement = node.getRequirement();
return !requirement.test(this.noPermissionSource);
}
};
private final CommandDispatcher<CommandSourceStack> dispatcher = new CommandDispatcher<>();
public Commands(Commands.CommandSelection commandSelection, CommandBuildContext context) {
AdvancementCommands.register(this.dispatcher);
AttributeCommand.register(this.dispatcher, context);
ExecuteCommand.register(this.dispatcher, context);
BossBarCommands.register(this.dispatcher, context);
ClearInventoryCommands.register(this.dispatcher, context);
CloneCommands.register(this.dispatcher, context);
DamageCommand.register(this.dispatcher, context);
DataCommands.register(this.dispatcher);
DataPackCommand.register(this.dispatcher, context);
DebugCommand.register(this.dispatcher);
DefaultGameModeCommands.register(this.dispatcher);
DialogCommand.register(this.dispatcher, context);
DifficultyCommand.register(this.dispatcher);
EffectCommands.register(this.dispatcher, context);
EmoteCommands.register(this.dispatcher);
EnchantCommand.register(this.dispatcher, context);
ExperienceCommand.register(this.dispatcher);
FillCommand.register(this.dispatcher, context);
FillBiomeCommand.register(this.dispatcher, context);
ForceLoadCommand.register(this.dispatcher);
FunctionCommand.register(this.dispatcher);
GameModeCommand.register(this.dispatcher);
GameRuleCommand.register(this.dispatcher, context);
GiveCommand.register(this.dispatcher, context);
HelpCommand.register(this.dispatcher);
ItemCommands.register(this.dispatcher, context);
KickCommand.register(this.dispatcher);
KillCommand.register(this.dispatcher);
ListPlayersCommand.register(this.dispatcher);
LocateCommand.register(this.dispatcher, context);
LootCommand.register(this.dispatcher, context);
MsgCommand.register(this.dispatcher);
SwingCommand.register(this.dispatcher);
ParticleCommand.register(this.dispatcher, context);
PlaceCommand.register(this.dispatcher);
PlaySoundCommand.register(this.dispatcher);
RandomCommand.register(this.dispatcher);
ReloadCommand.register(this.dispatcher);
RecipeCommand.register(this.dispatcher);
FetchProfileCommand.register(this.dispatcher);
ReturnCommand.register(this.dispatcher);
RideCommand.register(this.dispatcher);
RotateCommand.register(this.dispatcher);
SayCommand.register(this.dispatcher);
ScheduleCommand.register(this.dispatcher);
ScoreboardCommand.register(this.dispatcher, context);
SeedCommand.register(this.dispatcher, commandSelection != Commands.CommandSelection.INTEGRATED);
VersionCommand.register(this.dispatcher, commandSelection != Commands.CommandSelection.INTEGRATED);
SetBlockCommand.register(this.dispatcher, context);
SetSpawnCommand.register(this.dispatcher);
SetWorldSpawnCommand.register(this.dispatcher);
SpectateCommand.register(this.dispatcher);
SpreadPlayersCommand.register(this.dispatcher);
StopSoundCommand.register(this.dispatcher);
StopwatchCommand.register(this.dispatcher);
SummonCommand.register(this.dispatcher, context);
TagCommand.register(this.dispatcher);
TeamCommand.register(this.dispatcher, context);
TeamMsgCommand.register(this.dispatcher);
TeleportCommand.register(this.dispatcher);
TellRawCommand.register(this.dispatcher, context);
TestCommand.register(this.dispatcher, context);
TickCommand.register(this.dispatcher);
TimeCommand.register(this.dispatcher, context);
TitleCommand.register(this.dispatcher, context);
TriggerCommand.register(this.dispatcher);
WaypointCommand.register(this.dispatcher, context);
WeatherCommand.register(this.dispatcher);
WorldBorderCommand.register(this.dispatcher);
if (JvmProfiler.INSTANCE.isAvailable()) {
JfrCommand.register(this.dispatcher);
}
if (SharedConstants.DEBUG_CHASE_COMMAND) {
ChaseCommand.register(this.dispatcher);
}
if (SharedConstants.DEBUG_DEV_COMMANDS || SharedConstants.IS_RUNNING_IN_IDE) {
RaidCommand.register(this.dispatcher, context);
DebugPathCommand.register(this.dispatcher);
DebugMobSpawningCommand.register(this.dispatcher);
WardenSpawnTrackerCommand.register(this.dispatcher);
SpawnArmorTrimsCommand.register(this.dispatcher);
ServerPackCommand.register(this.dispatcher);
if (commandSelection.includeDedicated) {
DebugConfigCommand.register(this.dispatcher, context);
}
}
if (commandSelection.includeDedicated) {
BanIpCommands.register(this.dispatcher);
BanListCommands.register(this.dispatcher);
BanPlayerCommands.register(this.dispatcher);
DeOpCommands.register(this.dispatcher);
OpCommand.register(this.dispatcher);
PardonCommand.register(this.dispatcher);
PardonIpCommand.register(this.dispatcher);
PerfCommand.register(this.dispatcher);
SaveAllCommand.register(this.dispatcher);
SaveOffCommand.register(this.dispatcher);
SaveOnCommand.register(this.dispatcher);
SetPlayerIdleTimeoutCommand.register(this.dispatcher);
StopCommand.register(this.dispatcher);
TransferCommand.register(this.dispatcher);
WhitelistCommand.register(this.dispatcher);
}
if (commandSelection.includeIntegrated) {
PublishCommand.register(this.dispatcher);
}
this.dispatcher.setConsumer(ExecutionCommandSource.resultConsumer());
}
public static <S> ParseResults<S> mapSource(ParseResults<S> parse, UnaryOperator<S> sourceOperator) {
CommandContextBuilder<S> context = parse.getContext();
CommandContextBuilder<S> source = context.withSource(sourceOperator.apply(context.getSource()));
return new ParseResults<>(source, parse.getReader(), parse.getExceptions());
}
public void performPrefixedCommand(CommandSourceStack sender, String command) {
command = trimOptionalPrefix(command);
this.performCommand(this.dispatcher.parse(command, sender), command);
}
public static String trimOptionalPrefix(String command) {
return command.startsWith("/") ? command.substring(1) : command;
}
public void performCommand(ParseResults<CommandSourceStack> command, String commandString) {
CommandSourceStack sender = command.getContext().getSource();
Profiler.get().push(() -> "/" + commandString);
ContextChain<CommandSourceStack> commandChain = finishParsing(command, commandString, sender);
try {
if (commandChain != null) {
executeCommandInContext(
sender,
executionContext -> ExecutionContext.queueInitialCommandExecution(
executionContext, commandString, commandChain, sender, CommandResultCallback.EMPTY
)
);
}
} catch (Exception var12) {
MutableComponent hover = Component.literal(var12.getMessage() == null ? var12.getClass().getName() : var12.getMessage());
if (LOGGER.isDebugEnabled()) {
LOGGER.error("Command exception: /{}", commandString, var12);
StackTraceElement[] stackTrace = var12.getStackTrace();
for (int i = 0; i < Math.min(stackTrace.length, 3); i++) {
hover.append("\n\n")
.append(stackTrace[i].getMethodName())
.append("\n ")
.append(stackTrace[i].getFileName())
.append(":")
.append(String.valueOf(stackTrace[i].getLineNumber()));
}
}
sender.sendFailure(Component.translatable("command.failed").withStyle(s -> s.withHoverEvent(new HoverEvent.ShowText(hover))));
if (SharedConstants.DEBUG_VERBOSE_COMMAND_ERRORS || SharedConstants.IS_RUNNING_IN_IDE) {
sender.sendFailure(Component.literal(Util.describeError(var12)));
LOGGER.error("'/{}' threw an exception", commandString, var12);
}
} finally {
Profiler.get().pop();
}
}
private static @Nullable ContextChain<CommandSourceStack> finishParsing(
ParseResults<CommandSourceStack> command, String commandString, CommandSourceStack sender
) {
try {
validateParseResults(command);
return ContextChain.tryFlatten(command.getContext().build(commandString))
.orElseThrow(() -> CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownCommand().createWithContext(command.getReader()));
} catch (CommandSyntaxException var7) {
sender.sendFailure(ComponentUtils.fromMessage(var7.getRawMessage()));
if (var7.getInput() != null && var7.getCursor() >= 0) {
int cursor = Math.min(var7.getInput().length(), var7.getCursor());
MutableComponent context = Component.empty()
.withStyle(ChatFormatting.GRAY)
.withStyle(s -> s.withClickEvent(new ClickEvent.SuggestCommand("/" + commandString)));
if (cursor > 10) {
context.append(CommonComponents.ELLIPSIS);
}
context.append(var7.getInput().substring(Math.max(0, cursor - 10), cursor));
if (cursor < var7.getInput().length()) {
Component remaining = Component.literal(var7.getInput().substring(cursor)).withStyle(ChatFormatting.RED, ChatFormatting.UNDERLINE);
context.append(remaining);
}
context.append(Component.translatable("command.context.here").withStyle(ChatFormatting.RED, ChatFormatting.ITALIC));
sender.sendFailure(context);
}
return null;
}
}
public static void executeCommandInContext(CommandSourceStack context, Consumer<ExecutionContext<CommandSourceStack>> config) {
ExecutionContext<CommandSourceStack> currentContext = CURRENT_EXECUTION_CONTEXT.get();
boolean isTopContext = currentContext == null;
if (isTopContext) {
GameRules gameRules = context.getLevel().getGameRules();
int chainLimit = Math.max(1, gameRules.get(GameRules.MAX_COMMAND_SEQUENCE_LENGTH));
int forkLimit = gameRules.get(GameRules.MAX_COMMAND_FORKS);
try (ExecutionContext<CommandSourceStack> executionContext = new ExecutionContext<>(chainLimit, forkLimit, Profiler.get())) {
CURRENT_EXECUTION_CONTEXT.set(executionContext);
config.accept(executionContext);
executionContext.runCommandQueue();
} finally {
CURRENT_EXECUTION_CONTEXT.set(null);
}
} else {
config.accept(currentContext);
}
}
public void sendCommands(ServerPlayer player) {
Map<CommandNode<CommandSourceStack>, CommandNode<CommandSourceStack>> playerCommands = new HashMap<>();
RootCommandNode<CommandSourceStack> root = new RootCommandNode<>();
playerCommands.put(this.dispatcher.getRoot(), root);
fillUsableCommands(this.dispatcher.getRoot(), root, player.createCommandSourceStack(), playerCommands);
player.connection.send(new ClientboundCommandsPacket(root, COMMAND_NODE_INSPECTOR));
}
private static <S> void fillUsableCommands(CommandNode<S> source, CommandNode<S> target, S commandFilter, Map<CommandNode<S>, CommandNode<S>> converted) {
for (CommandNode<S> child : source.getChildren()) {
if (child.canUse(commandFilter)) {
ArgumentBuilder<S, ?> builder = child.createBuilder();
if (builder.getRedirect() != null) {
builder.redirect(converted.get(builder.getRedirect()));
}
CommandNode<S> node = builder.build();
converted.put(child, node);
target.addChild(node);
if (!child.getChildren().isEmpty()) {
fillUsableCommands(child, node, commandFilter, converted);
}
}
}
}
public static LiteralArgumentBuilder<CommandSourceStack> literal(String literal) {
return LiteralArgumentBuilder.literal(literal);
}
public static <T> RequiredArgumentBuilder<CommandSourceStack, T> argument(String name, ArgumentType<T> type) {
return RequiredArgumentBuilder.argument(name, type);
}
public static Predicate<String> createValidator(Commands.ParseFunction parser) {
return value -> {
try {
parser.parse(new StringReader(value));
return true;
} catch (CommandSyntaxException var3) {
return false;
}
};
}
public CommandDispatcher<CommandSourceStack> getDispatcher() {
return this.dispatcher;
}
public static <S> void validateParseResults(ParseResults<S> command) throws CommandSyntaxException {
CommandSyntaxException parseException = getParseException(command);
if (parseException != null) {
throw parseException;
}
}
public static <S> @Nullable CommandSyntaxException getParseException(ParseResults<S> parse) {
if (!parse.getReader().canRead()) {
return null;
} else if (parse.getExceptions().size() == 1) {
return parse.getExceptions().values().iterator().next();
} else {
return parse.getContext().getRange().isEmpty()
? CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownCommand().createWithContext(parse.getReader())
: CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownArgument().createWithContext(parse.getReader());
}
}
public static CommandBuildContext createValidationContext(HolderLookup.Provider registries) {
return new CommandBuildContext() {
@Override
public FeatureFlagSet enabledFeatures() {
return FeatureFlags.REGISTRY.allFlags();
}
@Override
public Stream<ResourceKey<? extends Registry<?>>> listRegistryKeys() {
return registries.listRegistryKeys();
}
@Override
public <T> Optional<HolderLookup.RegistryLookup<T>> lookup(ResourceKey<? extends Registry<? extends T>> key) {
return registries.lookup(key).map(this::createLookup);
}
private <T> HolderLookup.RegistryLookup.Delegate<T> createLookup(HolderLookup.RegistryLookup<T> original) {
return new HolderLookup.RegistryLookup.Delegate<T>() {
{
}
@Override
public HolderLookup.RegistryLookup<T> parent() {
return original;
}
@Override
public Optional<HolderSet.Named<T>> get(TagKey<T> id) {
return Optional.of(this.getOrThrow(id));
}
@Override
public HolderSet.Named<T> getOrThrow(TagKey<T> id) {
Optional<HolderSet.Named<T>> tag = this.parent().get(id);
return tag.orElseGet(() -> HolderSet.emptyNamed(this.parent(), id));
}
};
}
};
}
public static void validate() {
CommandBuildContext context = createValidationContext(VanillaRegistries.createLookup());
CommandDispatcher<CommandSourceStack> dispatcher = new Commands(Commands.CommandSelection.ALL, context).getDispatcher();
RootCommandNode<CommandSourceStack> root = dispatcher.getRoot();
dispatcher.findAmbiguities(
(parent, child, sibling, ambiguities) -> LOGGER.warn(
"Ambiguity between arguments {} and {} with inputs: {}", dispatcher.getPath(child), dispatcher.getPath(sibling), ambiguities
)
);
Set<ArgumentType<?>> usedArgumentTypes = ArgumentUtils.findUsedArgumentTypes(root);
Set<ArgumentType<?>> unregisteredTypes = usedArgumentTypes.stream()
.filter(arg -> !ArgumentTypeInfos.isClassRecognized(arg.getClass()))
.collect(Collectors.toSet());
if (!unregisteredTypes.isEmpty()) {
LOGGER.warn(
"Missing type registration for following arguments:\n {}", unregisteredTypes.stream().map(arg -> "\t" + arg).collect(Collectors.joining(",\n"))
);
throw new IllegalStateException("Unregistered argument types");
}
}
public static <T extends PermissionSetSupplier> PermissionProviderCheck<T> hasPermission(PermissionCheck permission) {
return new PermissionProviderCheck<>(permission);
}
public static CommandSourceStack createCompilationContext(PermissionSet compilationPermissions) {
return new CommandSourceStack(CommandSource.NULL, Vec3.ZERO, Vec2.ZERO, null, compilationPermissions, "", CommonComponents.EMPTY, null, null);
}
public static enum CommandSelection {
ALL(true, true),
DEDICATED(false, true),
INTEGRATED(true, false);
private final boolean includeIntegrated;
private final boolean includeDedicated;
private CommandSelection(boolean includeIntegrated, boolean includeDedicated) {
this.includeIntegrated = includeIntegrated;
this.includeDedicated = includeDedicated;
}
}
@FunctionalInterface
public interface ParseFunction {
void parse(StringReader value) throws CommandSyntaxException;
}
}引用的其他类
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
CommandBuildContext()
- 引用位置:
-
- 引用位置:
参数/字段/构造调用/返回值 - 关联成员:
CommandSourceStack()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExecutionCommandSource.resultConsumer()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
ExecutionContext.queueInitialCommandExecution()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ArgumentTypeInfos.isClassRecognized()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ArgumentUtils.findUsedArgumentTypes()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SuggestionProviders.getName()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
HolderSet.emptyNamed()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
VanillaRegistries.createLookup()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TestCommand.register()
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
ClickEvent.SuggestCommand(), SuggestCommand()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.empty(), Component.literal(), Component.translatable()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ComponentUtils.fromMessage()
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
HoverEvent.ShowText(), ShowText()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
ClientboundCommandsPacket()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
AdvancementCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
AttributeCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BanIpCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BanListCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BanPlayerCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
BossBarCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ChaseCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ClearInventoryCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
CloneCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DamageCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DataPackCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DeOpCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DebugCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DebugConfigCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DebugMobSpawningCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DebugPathCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DefaultGameModeCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DialogCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DifficultyCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EffectCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EmoteCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EnchantCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExecuteCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExperienceCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
FetchProfileCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
FillBiomeCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
FillCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ForceLoadCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
FunctionCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GameModeCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GameRuleCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GiveCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
HelpCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ItemCommands.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
JfrCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
KickCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
KillCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ListPlayersCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LocateCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LootCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
MsgCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
OpCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PardonCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PardonIpCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ParticleCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PerfCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PlaceCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PlaySoundCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PublishCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RaidCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RandomCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RecipeCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ReloadCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ReturnCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RideCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RotateCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SaveAllCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SaveOffCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SaveOnCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SayCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ScheduleCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ScoreboardCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SeedCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ServerPackCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SetBlockCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SetPlayerIdleTimeoutCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SetSpawnCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SetWorldSpawnCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SpawnArmorTrimsCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SpectateCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SpreadPlayersCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StopCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StopSoundCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StopwatchCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SummonCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SwingCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TagCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TeamCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TeamMsgCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TeleportCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TellRawCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TickCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TimeCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TitleCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TransferCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TriggerCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
VersionCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
WardenSpawnTrackerCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
WaypointCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
WeatherCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
WhitelistCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
WorldBorderCommand.register()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DataCommands.register()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/方法调用/构造调用 - 关联成员:
PermissionCheck.Require(), Require()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.describeError()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Profiler.get()
- 引用位置: