From c99612154c0aae671cbb22367cc3372d59fd2ae7 Mon Sep 17 00:00:00 2001 From: asofold Date: Sun, 27 Jul 2014 16:53:21 +0200 Subject: [PATCH] Demand most action commands to be run from the console. For players they either have no extra value over vanilla commands or they have too high of an abuse potential. --- .../nocheatplus/command/AbstractCommand.java | 30 +++++++++++++++++++ .../command/actions/BanCommand.java | 4 ++- .../command/actions/KickCommand.java | 3 ++ .../command/actions/TellCommand.java | 9 ++++-- .../command/actions/delay/DelayCommand.java | 9 ++++-- .../actions/delay/DelayableCommand.java | 4 +++ 6 files changed, 53 insertions(+), 6 deletions(-) diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/AbstractCommand.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/AbstractCommand.java index 870d8bae..a5577265 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/AbstractCommand.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/AbstractCommand.java @@ -12,7 +12,9 @@ import java.util.Set; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.TabExecutor; +import org.bukkit.entity.Player; /** * Base command class, featuring some features.
@@ -50,6 +52,34 @@ public abstract class AbstractCommand implements TabExecutor{ return b.toString(); } + /** + * + * @param sender + * @return True if sender is a Player, otherwise false is returned and a message sent. + */ + public static boolean demandPlayer(CommandSender sender) { + if (sender instanceof Player) { + return true; + } else { + sender.sendMessage("[NoCheatPlus] A player is required to run this command."); + return false; + } + } + + /** + * + * @param sender + * @return True if sender is a Player, otherwise false is returned and a message sent. + */ + public static boolean demandConsoleCommandSender(CommandSender sender) { + if (sender instanceof ConsoleCommandSender) { + return true; + } else { + sender.sendMessage("[NoCheatPlus] This command can only be run from the console."); + return false; + } + } + //////////////// // Not static. //////////////// diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/BanCommand.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/BanCommand.java index 62032056..f0f0edba 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/BanCommand.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/BanCommand.java @@ -25,7 +25,9 @@ public class BanCommand extends BaseCommand { @Override public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { - + if (!demandConsoleCommandSender(sender)) { + return true; + } // TODO: Consider supporting vanilla syntax or removing this command :p. // Args contains "ban" as first arg. diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/KickCommand.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/KickCommand.java index 55a3c99f..18c27e08 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/KickCommand.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/KickCommand.java @@ -21,6 +21,9 @@ public class KickCommand extends BaseCommand { @Override public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { + if (!demandConsoleCommandSender(sender)) { + return true; + } // Args contains "kick" as first arg. if (args.length < 2) return false; final String name = args[1]; diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/TellCommand.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/TellCommand.java index b847e55e..d94dbf56 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/TellCommand.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/TellCommand.java @@ -26,7 +26,12 @@ public class TellCommand extends BaseCommand { @Override public boolean onCommand(CommandSender sender, Command command, String label, final String[] args) { - if (args.length < 3) return false; + if (!demandConsoleCommandSender(sender)) { + return true; + } + if (args.length < 3) { + return false; + } final String name = args[1].trim(); final String message = AbstractCommand.join(args, 2); tell(name, message); @@ -39,7 +44,7 @@ public class TellCommand extends BaseCommand { } /* (non-Javadoc) - * @see fr.neatmonster.nocheatplus.command.actions.delay.DelayableCommand#onTabComplete(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[]) + * @see fr.neatmonster.nocheatplus.command.BaseCommand#onTabComplete(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[]) */ @Override public List onTabComplete(CommandSender sender, Command command, diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayCommand.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayCommand.java index 9ca67438..529dfca4 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayCommand.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayCommand.java @@ -4,6 +4,7 @@ import org.bukkit.Bukkit; import org.bukkit.Server; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.plugin.java.JavaPlugin; import fr.neatmonster.nocheatplus.command.AbstractCommand; @@ -18,12 +19,14 @@ public class DelayCommand extends DelayableCommand { public DelayCommand(JavaPlugin plugin){ super(plugin, "delay", Permissions.COMMAND_DELAY, 1, 0, true); + demandConsoleCommandSender = true; } @Override - public boolean execute(CommandSender sender, Command command, String label, - String[] alteredArgs, long delay) { - if (alteredArgs.length < 2) return false; + public boolean execute(CommandSender sender, Command command, String label, String[] alteredArgs, long delay) { + if (alteredArgs.length < 2) { + return false; + } final String cmd = AbstractCommand.join(alteredArgs, 1); schedule(new Runnable() { @Override diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayableCommand.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayableCommand.java index 3ba0103b..e9965449 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayableCommand.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/command/actions/delay/DelayableCommand.java @@ -52,6 +52,7 @@ public abstract class DelayableCommand extends BaseCommand { protected final int delayIndex; protected final boolean mustHaveDelay; protected final int delayPreset; + protected boolean demandConsoleCommandSender = false; /** * (Delay is not obligatory, inserted after the first argument.) @@ -115,6 +116,9 @@ public abstract class DelayableCommand extends BaseCommand { @Override public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args ) { + if (demandConsoleCommandSender && !demandConsoleCommandSender(sender)) { + return true; + } // Parse the delay and alter the args accordingly. long delay = parseDelay(args, delayIndex, delayPreset); String[] alteredArgs;