From b9a0a761c4b63e45a8676074cd73fe5724a3c98d Mon Sep 17 00:00:00 2001 From: themode Date: Tue, 15 Dec 2020 09:30:09 +0100 Subject: [PATCH] Fixed CommandManager#execute not throwing NPE --- .../server/command/CommandManager.java | 38 ++++++++++--------- .../server/command/builder/Arguments.java | 2 +- .../command/builder/CommandDispatcher.java | 14 ++++++- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/minestom/server/command/CommandManager.java b/src/main/java/net/minestom/server/command/CommandManager.java index 5e713453d..75eb3f7ba 100644 --- a/src/main/java/net/minestom/server/command/CommandManager.java +++ b/src/main/java/net/minestom/server/command/CommandManager.java @@ -202,27 +202,29 @@ public final class CommandManager { } // Process the command - try { + + { // Check for rich-command - this.dispatcher.execute(sender, command); - return true; - } catch (NullPointerException e) { - // Check for legacy-command - final String[] splitCommand = command.split(" "); - final String commandName = splitCommand[0]; - final CommandProcessor commandProcessor = commandProcessorMap.get(commandName.toLowerCase()); - if (commandProcessor == null) { - if (unknownCommandCallback != null) { - this.unknownCommandCallback.apply(sender, command); + final boolean result = this.dispatcher.execute(sender, command); + if (result) { + return true; + } else { + // Check for legacy-command + final String[] splitCommand = command.split(" "); + final String commandName = splitCommand[0]; + final CommandProcessor commandProcessor = commandProcessorMap.get(commandName.toLowerCase()); + if (commandProcessor == null) { + if (unknownCommandCallback != null) { + this.unknownCommandCallback.apply(sender, command); + } + return false; } - return false; + + // Execute the legacy-command + final String[] args = command.substring(command.indexOf(" ") + 1).split(" "); + + return commandProcessor.process(sender, commandName, args); } - - // Execute the legacy-command - final String[] args = command.substring(command.indexOf(" ") + 1).split(" "); - - return commandProcessor.process(sender, commandName, args); - } } diff --git a/src/main/java/net/minestom/server/command/builder/Arguments.java b/src/main/java/net/minestom/server/command/builder/Arguments.java index 82784a2d4..35fd337a8 100644 --- a/src/main/java/net/minestom/server/command/builder/Arguments.java +++ b/src/main/java/net/minestom/server/command/builder/Arguments.java @@ -148,7 +148,7 @@ public final class Arguments { public Object getObject(@NotNull String id) { return args.computeIfAbsent(id, s -> { throw new NullPointerException( - "The argument with the id " + id + " has no value assigned, be sure to check your arguments id, your syntax, and that you do not change the argument id dynamically."); + "The argument with the id '" + id + "' has no value assigned, be sure to check your arguments id, your syntax, and that you do not change the argument id dynamically."); }); } diff --git a/src/main/java/net/minestom/server/command/builder/CommandDispatcher.java b/src/main/java/net/minestom/server/command/builder/CommandDispatcher.java index f3368380c..e200e2f31 100644 --- a/src/main/java/net/minestom/server/command/builder/CommandDispatcher.java +++ b/src/main/java/net/minestom/server/command/builder/CommandDispatcher.java @@ -75,9 +75,19 @@ public class CommandDispatcher { return findCommandResult(command, args); } - public void execute(@NotNull CommandSender source, @NotNull String commandString) { + /** + * Check if the command exists, and execute it. + * + * @param source the command source + * @param commandString the command with the argument(s) + * @return true if the command executed successfully, false if the command doesn't exist + */ + public boolean execute(@NotNull CommandSender source, @NotNull String commandString) { CommandResult result = parse(commandString); - result.execute(source, commandString); + if (result != null) { + result.execute(source, commandString); + } + return result != null; } @NotNull