From bb10f9fb0f65ae2ff188f65cae610762e0fbe6ee Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 26 Aug 2019 13:13:42 +0200 Subject: [PATCH] Only run cmds sync if they were sync Needed for DC command handler --- .../main/java/buttondevteam/lib/chat/Command2.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java index 1e75596..f6f3798 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java @@ -131,9 +131,10 @@ public abstract class Command2 String subcommand = commandline.substring(0, i).toLowerCase(); SubcommandData sd = subcommands.get(subcommand); //O(1) if (sd == null) continue; + boolean sync = Bukkit.isPrimaryThread(); Bukkit.getScheduler().runTaskAsynchronously(MainPlugin.Instance, () -> { try { - handleCommandAsync(sender, commandline, sd, subcommand); + handleCommandAsync(sender, commandline, sd, subcommand, sync); } catch (Exception e) { TBMCCoreAPI.SendException("Command execution failed for sender " + sender + " and message " + commandline, e); } @@ -144,7 +145,7 @@ public abstract class Command2 } //Needed because permission checking may load the (perhaps offline) sender's file which is disallowed on the main thread - public void handleCommandAsync(TP sender, String commandline, SubcommandData sd, String subcommand) throws Exception { + public void handleCommandAsync(TP sender, String commandline, SubcommandData sd, String subcommand, boolean sync) throws Exception { if (sd.method == null || sd.command == null) { //Main command not registered, but we have subcommands sender.sendMessage(sd.helpText); return; @@ -225,7 +226,7 @@ public abstract class Command2 } params.add(cparam); } - Bukkit.getScheduler().runTask(MainPlugin.Instance, () -> { + Runnable lol = () -> { try { val ret = sd.method.invoke(sd.command, params.toArray()); //I FORGOT TO TURN IT INTO AN ARRAY (for a long time) if (ret instanceof Boolean) { @@ -238,7 +239,11 @@ public abstract class Command2 } catch (Exception e) { TBMCCoreAPI.SendException("Command handling failed for sender " + sender + " and subcommand " + subcommand, e); } - }); + }; + if (sync) + Bukkit.getScheduler().runTask(MainPlugin.Instance, lol); + else + lol.run(); } //TODO: Add to the help public abstract void registerCommand(TC command);