Fix for slashless commands triggering errors in CraftBukkit on rare occasions due to being run async
This commit is contained in:
parent
20b359c11a
commit
b8aaeb1053
@ -185,6 +185,11 @@ public abstract class MPlugin extends JavaPlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean handleCommand(CommandSender sender, String commandString, boolean testOnly)
|
public boolean handleCommand(CommandSender sender, String commandString, boolean testOnly)
|
||||||
|
{
|
||||||
|
return handleCommand(sender, commandString, testOnly, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean handleCommand(final CommandSender sender, String commandString, boolean testOnly, boolean async)
|
||||||
{
|
{
|
||||||
boolean noSlash = true;
|
boolean noSlash = true;
|
||||||
if (commandString.startsWith("/"))
|
if (commandString.startsWith("/"))
|
||||||
@ -193,7 +198,7 @@ public abstract class MPlugin extends JavaPlugin
|
|||||||
commandString = commandString.substring(1);
|
commandString = commandString.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MCommand<?> command : this.getBaseCommands())
|
for (final MCommand<?> command : this.getBaseCommands())
|
||||||
{
|
{
|
||||||
if (noSlash && ! command.allowNoSlashAccess) continue;
|
if (noSlash && ! command.allowNoSlashAccess) continue;
|
||||||
|
|
||||||
@ -204,10 +209,25 @@ public abstract class MPlugin extends JavaPlugin
|
|||||||
|
|
||||||
if (commandString.startsWith(alias+" ") || commandString.equals(alias))
|
if (commandString.startsWith(alias+" ") || commandString.equals(alias))
|
||||||
{
|
{
|
||||||
List<String> args = new ArrayList<String>(Arrays.asList(commandString.split("\\s+")));
|
final List<String> args = new ArrayList<String>(Arrays.asList(commandString.split("\\s+")));
|
||||||
args.remove(0);
|
args.remove(0);
|
||||||
|
|
||||||
if (testOnly) return true;
|
if (testOnly) return true;
|
||||||
command.execute(sender, args);
|
|
||||||
|
if (async)
|
||||||
|
{
|
||||||
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
command.execute(sender, args);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
command.execute(sender, args);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ public class MPluginSecretPlayerListener implements Listener
|
|||||||
{
|
{
|
||||||
if (event.isCancelled()) return;
|
if (event.isCancelled()) return;
|
||||||
|
|
||||||
if (p.handleCommand(event.getPlayer(), event.getMessage()))
|
if (p.handleCommand(event.getPlayer(), event.getMessage(), false, true))
|
||||||
{
|
{
|
||||||
if (p.logPlayerCommands())
|
if (p.logPlayerCommands())
|
||||||
Bukkit.getLogger().info("[PLAYER_COMMAND] "+event.getPlayer().getName()+": "+event.getMessage());
|
Bukkit.getLogger().info("[PLAYER_COMMAND] "+event.getPlayer().getName()+": "+event.getMessage());
|
||||||
|
Loading…
Reference in New Issue
Block a user