CommandAPI version
8.5.0
Minecraft version
1.16
Are you shading the CommandAPI?
No
What I did
- I created a command using a CustomArgument and a StringArgument (the second one has suggestions).
ArgumentSuggestions suggestFoo = (i, b) -> b.suggest("foo").buildFuture();
ResultingCommandExecutor executor = (sender, args) -> {
sender.sendMessage("ok");
return 1;
};
new CommandAPICommand("test_error")
.withArguments(
new CustomArgument<String, String>(new StringArgument("arg1"), info -> info.input()),
new StringArgument("arg2")
.replaceSuggestions(suggestFoo))
.executes(executor)
.register();
- Then I tried these commands:
/test_error arg1 arg2
/execute run test_error arg1 arg2
/execute store result score result tests run test_error arg1 arg2
What actually happened
- ✔️ These commands are executing (with command block/chat) and return 1 in the score "tests/result".
- ❌ But for the 2 last commands, I get a NullPointerException when completing the second argument.
[16:15:22 FATAL]: Error executing task on Server
java.lang.NullPointerException: Cannot invoke "com.mojang.brigadier.context.ParsedArgument.getRange()" because the return value of "java.util.Map.get(Object)" is null
at dev.jorel.commandapi.CommandAPIHandler.getRawArgumentInput(CommandAPIHandler.java:132) ~[?:?]
at dev.jorel.commandapi.arguments.CustomArgument.parseArgument(CustomArgument.java:137) ~[?:?]
at dev.jorel.commandapi.CommandAPIHandler.parseArgument(CommandAPIHandler.java:379) ~[?:?]
at dev.jorel.commandapi.CommandAPIHandler.generatePreviousArguments(CommandAPIHandler.java:886) ~[?:?]
at dev.jorel.commandapi.CommandAPIHandler.lambda$toSuggestions$7(CommandAPIHandler.java:909) ~[?:?]
at com.mojang.brigadier.tree.ArgumentCommandNode.listSuggestions(ArgumentCommandNode.java:71) ~[patched_1.16.5.jar:git-Paper-794]
at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:596) ~[patched_1.16.5.jar:git-Paper-794]
at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:579) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnection.lambda$a$7(PlayerConnection.java:794) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1271) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1264) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1225) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1139) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
at java.lang.Thread.run(Thread.java:833) [?:?]
There is more when pressing tab in the console
[16:11:52 WARN]: Unhandled exception when tab completing
java.util.concurrent.ExecutionException: org.bukkit.command.CommandException: Unhandled exception executing tab-completer for 'execute run test_error s ' in org.bukkit.craftbukkit.v1_16_R3.command.VanillaCommandWrapper(execute)
at org.bukkit.craftbukkit.v1_16_R3.util.Waitable.get(Waitable.java:42) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.command.ConsoleCommandCompleter.complete(ConsoleCommandCompleter.java:103) ~[patched_1.16.5.jar:git-Paper-794]
at org.jline.reader.impl.LineReaderImpl.doComplete(LineReaderImpl.java:4147) ~[patched_1.16.5.jar:git-Paper-794]
at org.jline.reader.impl.LineReaderImpl.expandOrComplete(LineReaderImpl.java:4060) ~[patched_1.16.5.jar:git-Paper-794]
at org.jline.reader.impl.LineReaderImpl$1.apply(LineReaderImpl.java:3630) ~[patched_1.16.5.jar:git-Paper-794]
at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:603) ~[patched_1.16.5.jar:git-Paper-794]
at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:418) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecrell.terminalconsole.SimpleTerminalConsole.readCommands(SimpleTerminalConsole.java:158) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecrell.terminalconsole.SimpleTerminalConsole.start(SimpleTerminalConsole.java:141) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.DedicatedServer$1.run(DedicatedServer.java:106) ~[patched_1.16.5.jar:git-Paper-794]
Caused by: org.bukkit.command.CommandException: Unhandled exception executing tab-completer for 'execute run test_error s ' in org.bukkit.craftbukkit.v1_16_R3.command.VanillaCommandWrapper(execute)
at org.bukkit.command.SimpleCommandMap.tabComplete(SimpleCommandMap.java:250) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.command.SimpleCommandMap.tabComplete(SimpleCommandMap.java:195) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.command.ConsoleCommandCompleter$2.evaluate(ConsoleCommandCompleter.java:93) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.command.ConsoleCommandCompleter$2.evaluate(ConsoleCommandCompleter.java:90) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.util.Waitable.run(Waitable.java:24) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1447) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:436) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1347) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1135) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "com.mojang.brigadier.context.ParsedArgument.getRange()" because the return value of "java.util.Map.get(Object)" is null
at dev.jorel.commandapi.CommandAPIHandler.getRawArgumentInput(CommandAPIHandler.java:132) ~[?:?]
at dev.jorel.commandapi.arguments.CustomArgument.parseArgument(CustomArgument.java:137) ~[?:?]
at dev.jorel.commandapi.CommandAPIHandler.parseArgument(CommandAPIHandler.java:379) ~[?:?]
at dev.jorel.commandapi.CommandAPIHandler.generatePreviousArguments(CommandAPIHandler.java:886) ~[?:?]
at dev.jorel.commandapi.CommandAPIHandler.lambda$toSuggestions$7(CommandAPIHandler.java:909) ~[?:?]
at com.mojang.brigadier.tree.ArgumentCommandNode.listSuggestions(ArgumentCommandNode.java:71) ~[patched_1.16.5.jar:git-Paper-794]
at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:596) ~[patched_1.16.5.jar:git-Paper-794]
at com.mojang.brigadier.CommandDispatcher.getCompletionSuggestions(CommandDispatcher.java:579) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.command.VanillaCommandWrapper.tabComplete(VanillaCommandWrapper.java:59) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.command.SimpleCommandMap.tabComplete(SimpleCommandMap.java:244) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.command.SimpleCommandMap.tabComplete(SimpleCommandMap.java:195) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.command.ConsoleCommandCompleter$2.evaluate(ConsoleCommandCompleter.java:93) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.command.ConsoleCommandCompleter$2.evaluate(ConsoleCommandCompleter.java:90) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.util.Waitable.run(Waitable.java:24) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1447) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:436) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1347) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1135) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
What should have happened
No NullPointerException when suggesting "foo" for the second argument.
Server logs and CommandAPI config
config.yml
################################################################################
# Logging #
################################################################################
# Verbose outputs (default: false)
# If "true", outputs command registration and unregistration logs in the console
verbose-outputs: false
# Silent logs (default: false)
# If "true", turns off all logging from the CommandAPI, except for errors.
silent-logs: false
################################################################################
# Messages #
################################################################################
# Messages
# Controls messages that the CommandAPI displays to players
messages:
# Missing executor implementation (default: "This command has no implementations for %s")
# The message to display to senders when a command has no executor. Available
# parameters are:
# %s - the executor class (lowercase)
# %S - the executor class (normal case)
missing-executor-implementation: "This command has no implementations for %s"
################################################################################
# Debugging #
################################################################################
# Create dispatcher JSON (default: false)
# If "true", the CommandAPI creates a command_registration.json file showing the
# mapping of registered commands. This is designed to be used by developers -
# setting this to "false" will improve command registration performance.
create-dispatcher-json: false
# Use latest version (default: false)
# If "true", the CommandAPI will use the latest available NMS implementation
# when the CommandAPI is used. This avoids all checks to see if the latest NMS
# implementation is actually compatible with the current Minecraft version.
use-latest-nms-version: false
################################################################################
# Command conversion #
################################################################################
[Uploading config.yml…]()
# Plugins to convert (default: [])
# Controls the list of plugins to process for command conversion.
plugins-to-convert: []
# Other commands to convert (default: [])
# A list of other commands to convert. This should be used for commands which
# are not declared in a plugin.yml file.
other-commands-to-convert: []
# Skip sender proxy (default: [])
# Determines whether the proxy sender should be skipped when converting a
# command. If you are having issues with plugin command conversion, add the
# plugin to this list.
skip-sender-proxy: []
Going further
I have tried with a CommandTree and a CommandAPICommand, the result is the same. Also this appends when there is a CustomArgument followed by any argument with suggestions.
ArgumentSuggestions suggestFoo = (i, b) -> b.suggest("foo").buildFuture();
ResultingCommandExecutor executor = (sender, args) -> {
sender.sendMessage("ok");
return 1;
};
new CommandAPICommand("test_error") // error
.withArguments(
new CustomArgument<String, String>(new StringArgument("arg1"), info -> info.input()),
new StringArgument("arg2")
.replaceSuggestions(suggestFoo))
.executes(executor)
.register();
new CommandTree("test_error2")
.then(new LiteralArgument("string_string") // ok
.then(new StringArgument("arg1")
.then(new StringArgument("arg2")
.replaceSuggestions(suggestFoo)
.executes(executor))))
.then(new LiteralArgument("string_custom") // ok
.then(new StringArgument("arg1")
.then(new CustomArgument<String, String>(new StringArgument("arg2"), info -> info.input())
.replaceSuggestions(suggestFoo)
.executes(executor))))
.then(new LiteralArgument("custom_string") // error
.then(new CustomArgument<String, String>(new StringArgument("arg1"), info -> info.input())
.then(new StringArgument("arg2")
.replaceSuggestions(suggestFoo)
.executes(executor))))
.then(new LiteralArgument("custom_custom") // error
.then(new CustomArgument<String, String>(new StringArgument("arg1"), info -> info.input())
.then(new CustomArgument<String, String>(new StringArgument("arg2"), info -> info.input())
.replaceSuggestions(suggestFoo)
.executes(executor))))
.register();
Other
No response
CommandAPI version
8.5.0
Minecraft version
1.16
Are you shading the CommandAPI?
No
What I did
/test_error arg1 arg2/execute run test_error arg1 arg2/execute store result score result tests run test_error arg1 arg2What actually happened
There is more when pressing tab in the console
What should have happened
No NullPointerException when suggesting "foo" for the second argument.
Server logs and CommandAPI config
config.yml
Going further
I have tried with a CommandTree and a CommandAPICommand, the result is the same. Also this appends when there is a CustomArgument followed by any argument with suggestions.
Other
No response