Class AsyncPlayerSendCommandsEvent<S extends CommandSourceStack>

java.lang.Object
org.bukkit.event.Event
org.bukkit.event.player.PlayerEvent
com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent<S>

@Experimental public class AsyncPlayerSendCommandsEvent<S extends CommandSourceStack> extends PlayerEvent
Fired any time a Brigadier RootCommandNode is generated for a player to inform the client of commands. You may manipulate this CommandNode to change what the client sees.

This event may fire on login, world change, and permission rebuilds, by plugin request, and potentially future means.

This event will fire before PlayerCommandSendEvent, so no filtering has been done by other plugins yet.

WARNING: This event will potentially (and most likely) fire twice! Once for Async, and once again for Sync. It is important that you check event.isAsynchronous() and event.hasFiredAsync() to ensure you only act once. If for some reason we are unable to send this asynchronously in the future, only the sync method will fire.

Your logic should look like this: if (event.isAsynchronous() || !event.hasFiredAsync()) { // do stuff }

If your logic is not safe to run asynchronously, only react to the synchronous version.

This is a draft/experimental API and is subject to change.

  • Constructor Details

  • Method Details

    • getCommandNode

      @NotNull public @NotNull com.mojang.brigadier.tree.RootCommandNode<S> getCommandNode()
      Gets the full Root Command Node being sent to the client, which is mutable.
      Returns:
      the root command node
    • hasFiredAsync

      public boolean hasFiredAsync()
      Gets if this event has already fired asynchronously.
      Returns:
      whether this event has already fired asynchronously
    • getHandlers

      @NotNull public @NotNull HandlerList getHandlers()
      Specified by:
      getHandlers in class Event
    • getHandlerList

      @NotNull public static @NotNull HandlerList getHandlerList()