Trying to update CommandSync client to 1.15.2 I got this error: Spoiler: Error [19:33:29] [Thread-13/WARN]: Exception in thread "Thread-13" [19:33:29] [Thread-13/WARN]: java.lang.IllegalStateException: Asynchronous command dispatch! [19:33:29] [Thread-13/WARN]: at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14) [19:33:29] [Thread-13/WARN]: at org.bukkit.craftbukkit.v1_15_R1.CraftServer.dispatchCommand(CraftServer.java:709) [19:33:29] [Thread-13/WARN]: at com.fuzzoland.CommandSyncClient.ClientThread.run(ClientThread.java:63) This is the cut of code that causes the error (Lines 61,62,63,64,65 at ClientThread.java class): Code (Java): if(data[0].equals("console")) { String command = data[2].replaceAll("\\+", " "); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), command); plugin.debugger.debug("Ran command /" + command + "."); }
You're trying to use a Bukkit method on an Asynchronous thread. You can only call Bukkit methods via sync
Well somewhere in your code you've got something similar to: getServer#getScheduler#runTaskAsynchronously(plugin, () -> { So either re-arrange or remove it entirely. All your code runs on the main thread unless explicitly told not to like the code above does
There is not here. Here’s the full class: https://github.com/YoFuzzy3/Command...fuzzoland/CommandSyncClient/ClientThread.java
It's a Thread so asynchronous. Replace this thread with a synced repeating task or synchronize the Bukkit.dispatch.
Ah, iirc extending Thread creates another thread (Essentially off-main thread). In this case, try surrounding the bukkit code with plugin.getServer#getScheduler#scheduleSyncDelayedTask(plugin, () -> {} However, this isn't the preferred way to do this as I assume you've created a new thread for a reason
Code (Java): getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), command); }); But please take care! This doesn't by any means "update" the plugin. It's simply a work around. I don't know how that plugin you're trying to update works but this definitely isn't the greatest method!
Thanks Harry. It works. Since it is an urgent thing for my server for the moment I keep it that way, then I calmly rearrange the class.
Judging by the server/client socket jargon, I'd assume this was probably a plugin from before the plugin messaging API, which should make what you're trying to do much much easier. I'd suggest looking into it here.
https://github.com/YoFuzzy3/CommandSync/pull/12 This pr could be updated. So "new" technologies can be applied. A refactoring would be good as well.
Instead of doing major rewrites to the plugin that could effectively render your plugin inoperable for several days that is being used on a production server, simply resolve the issue at hand and work on the bigger problems in a separate branch. What I mean is, push the following fix to your current branch and then create a new branch and work on the afformentioned fixes by the people above over time. Replace the following line of code Code (Java): Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), command); With this code which complies with the new craftbukkit standard where you cannot dispatch commands asyncronously Code (Java): Bukkit.getScheduler().runTask(plugin, () -> { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command); }); It didn't use to be that you had to dispatch commands from the main thread, that was added as the life cycle of the Bukkit project went on. Please take care to consider what several people here have also suggested, that is, using updated and more reliable methods.