AsyncPlayerChatEvent calling help

Discussion in 'Plugin Development' started by Nick22, Feb 23, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    Nick22

    Hi. I want to to make a specified player send a message, but i am getting an error when i try to call AsyncPlayerChatEvent. I am calling it from within a method in my CommandExecutor class. This is my code:
    Code:
    Set<Player> playerSet = new HashSet<Player >(Arrays.asList(plugin.getServer().getOnlinePlayers()));
    AsyncPlayerChatEvent e = new AsyncPlayerChatEvent(true, player, message, playerSet);
    plugin.getServer().getPluginManager().callEvent(e);
    and this is the error that i get:
    Code:
    org.bukkit.command.CommandException: Unhandled exception executing command 'trol
    l' in plugin TrollCraft v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:18
    6)
            at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchCommand(CraftServe
    r.java:514)
            at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchServerCommand(Craf
    tServer.java:506)
            at net.minecraft.server.v1_4_R1.DedicatedServer.al(DedicatedServer.java:
    260)
            at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:2
    25)
            at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:4
    94)
            at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java
    :427)
            at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:8
    49)
    Caused by: java.lang.IllegalStateException: AsyncPlayerChatEvent cannot be trigg
    ered asynchronously from primary server thread.
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:457)
            at com.Xergiok.TrollCraft.Commands.handleSay(Commands.java:101)
            at com.Xergiok.TrollCraft.Commands.onCommand(Commands.java:35)
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
            ... 8 more
    Thanks :)
     
  2. Offline

    ZeusAllMighty11

    AsyncPlayerChatEvent cannot be triggered asynchronously from primary server thread.
     
  3. Offline

    ShadowDog007

    You can't call an Async event from CommandExecutors because they are not called in an separate thread.
    Also, simply creating the event and calling it wont send a message to everyone.

    Try this.
    Code:
    plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable()
    {
        @Overide
        public void run()
        {
            AsyncPlayerChatEvent event = new AsyncPlayerChatEvent(true, player, message, playerSet);
            plugin.getServer().getPluginManager().callEvent(event);
     
            if (event.isCancelled())
                return;
     
            plugin.getServer().broadcastMessage(String.format(event.getFormat(), event.getPlayer().getDisplayName(), event.getMessage()));
        }
    }
     
    Nick22 likes this.
  4. Offline

    Nick22

    Thank you ShadowDog007. That worked :D.
     
Thread Status:
Not open for further replies.

Share This Page