[SPIGOT-7945] `Bukkit#dispatchCommand` throws `UnsupportedOperationException` for players Created: 03/Nov/24  Updated: 25/Dec/24  Resolved: 03/Nov/24

Status: Resolved
Project: Spigot
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Will Kroboth Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to SPIGOT-7948 `Bukkit#dispatchCommand` uses the wro... Resolved
Version: >version [13:11:35] [Server thread/INFO]: This server is running CraftBukkit version 4369-Spigot-e65d67a-285df6e (MC: 1.21.3) (Implementing API version 1.21.3-R0.1-SNAPSHOT) [13:11:35] [Server thread/INFO]: Checking version, please wait... [13:11:35] [Th
Guidelines Read: Yes

 Description   

Based on https://github.com/PaperMC/Paper/issues/11562

 

What I did:

Registered a listener that runs a command as a player when they join the server:

public final class BukkitTestPlugin extends JavaPlugin {
    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(new Listener() {
            @EventHandler
            public void onPlayerJoin(final PlayerJoinEvent event) {
                final Player player = event.getPlayer();

                Bukkit.dispatchCommand(player, "say Hello World!");
            }
        }, this);
    }
} 

 

Excepted result:{}

On 1.21.1, the command runs as expected:

[13:07:59] [User Authenticator #1/INFO]: UUID of player willkroboth is efff2855-758f-45d6-8a35-8d6fdde5c78c
[13:08:00] [Server thread/INFO]: [Not Secure] [willkroboth] Hello World!
[13:08:00] [Server thread/INFO]: willkroboth joined the game
[13:08:00] [Server thread/INFO]: willkroboth[/127.0.0.1:50752] logged in with entity id 52 at ([world]-29.5, 71.0, 60.5)
>version
[13:08:06] [Server thread/INFO]: This server is running CraftBukkit version 4344-Spigot-a759b62-19bf846 (MC: 1.21.1) (Implementing API version 1.21.1-R0.1-SNAPSHOT)
[13:08:06] [Server thread/INFO]: Checking version, please wait...
[13:08:06] [Thread-8/INFO]: You are 28 version(s) behind 

Actual result:

On 1.21.3, an error occurs:

[13:10:49] [User Authenticator #1/INFO]: UUID of player willkroboth is efff2855-758f-45d6-8a35-8d6fdde5c78c
[13:10:50] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to BukkitTestPlugin v1.0-SNAPSHOT
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:601) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:588) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.server.players.PlayerList.a(PlayerList.java:299) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.network.ServerConfigurationPacketListenerImpl.a(ServerConfigurationPacketListenerImpl.java:168) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.network.protocol.configuration.ServerboundFinishConfigurationPacket.a(SourceFile:22) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.network.protocol.configuration.ServerboundFinishConfigurationPacket.a(SourceFile:8) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$ensureRunningOnSameThread$0(PlayerConnectionUtils.java:35) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.TickTask.run(SourceFile:18) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.util.thread.IAsyncTaskHandler.d(SourceFile:164) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(SourceFile:23) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1319) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:210) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.util.thread.IAsyncTaskHandler.B(SourceFile:138) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.bv(MinecraftServer.java:1298) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.B(MinecraftServer.java:1291) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.util.thread.IAsyncTaskHandler.b(SourceFile:147) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1248) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.x_(MinecraftServer.java:1258) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.y(MinecraftServer.java:1101) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:329) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: org.bukkit.command.CommandException: Unhandled exception executing 'say Hello World!' in org.bukkit.craftbukkit.v1_21_R2.command.VanillaCommandWrapper(say)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:157) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_21_R2.CraftServer.dispatchCommand(CraftServer.java:925) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at org.bukkit.Bukkit.dispatchCommand(Bukkit.java:921) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at me.willkroboth.bukkitTestPlugin.BukkitTestPlugin$1.onPlayerJoin(BukkitTestPlugin.java:18) ~[?:?]
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        ... 22 more
Caused by: java.lang.UnsupportedOperationException: Not supported yet.
        at net.minecraft.commands.ICommandListener$1.getBukkitSender(ICommandListener.java:29) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.commands.CommandListenerWrapper.getBukkitSender(CommandListenerWrapper.java:423) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.commands.CommandListenerWrapper.hasPermission(CommandListenerWrapper.java:190) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.commands.CommandListenerWrapper.c(CommandListenerWrapper.java:180) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at net.minecraft.server.commands.CommandSay.a(SourceFile:18) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at com.mojang.brigadier.tree.CommandNode.canUse(CommandNode.java:79) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:302) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:?]
        at com.mojang.brigadier.CommandDispatcher.parse(CommandDispatcher.java:292) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:?]
        at com.mojang.brigadier.CommandDispatcher.parse(CommandDispatcher.java:260) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.commands.CommandDispatcher.performPrefixedCommand(CommandDispatcher.java:323) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at org.bukkit.craftbukkit.v1_21_R2.command.VanillaCommandWrapper.execute(VanillaCommandWrapper.java:43) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:150) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_21_R2.CraftServer.dispatchCommand(CraftServer.java:925) ~[spigot-1.21.3-R0.1-SNAPSHOT.jar:4369-Spigot-e65d67a-285df6e]
        at org.bukkit.Bukkit.dispatchCommand(Bukkit.java:921) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at me.willkroboth.bukkitTestPlugin.BukkitTestPlugin$1.onPlayerJoin(BukkitTestPlugin.java:18) ~[?:?]
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
        at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        ... 22 more
[13:10:50] [Server thread/INFO]: willkroboth joined the game
[13:10:50] [Server thread/INFO]: willkroboth[/127.0.0.1:47944] logged in with entity id 107 at ([world]-29.5, 71.0, 60.5)
>version
[13:11:35] [Server thread/INFO]: This server is running CraftBukkit version 4369-Spigot-e65d67a-285df6e (MC: 1.21.3) (Implementing API version 1.21.3-R0.1-SNAPSHOT)
[13:11:35] [Server thread/INFO]: Checking version, please wait...
[13:11:35] [Thread-9/INFO]: You are running the latest version 

The same error occurs using `Player#performCommand` (which is the method used in the Paper issue), which makes sense since it looks like it just calls `dispatchCommand`.



 Comments   
Comment by Will Kroboth [ 03/Nov/24 ]

Just a note, I'm not sure if the `sender instanceof EntityPlayer` check in the commit that resolved this issue was intentional. As far as I can tell, `EntityPlayer` does not implement `CommandSender` and doesn't seem to have any subclasses, so this check would never be true. It was probably supposed to be `sender instanceof CraftPlayer` here.

However, I'm not sure how important this is, as that commit does still fix this issue. I believe the Player is just being treated as an Entity here. That commit also made it so `Entity#createCommandSourceStackForNameResolution` used a proper `ICommandListener` rather than `ICommandListener.NULL`, which ended up fixing this issue anyway.

Generated at Sat Dec 13 20:47:01 UTC 2025 using Jira 10.3.13#10030013-sha1:56dd970ae30ebfeda3a697d25be1f6388b68a422.