001    package org.bukkit.command.defaults;
002    
003    import org.bukkit.Bukkit;
004    import org.bukkit.ChatColor;
005    import org.bukkit.command.CommandSender;
006    import org.bukkit.command.ConsoleCommandSender;
007    import org.bukkit.entity.Player;
008    
009    public class TellCommand extends VanillaCommand {
010        public TellCommand() {
011            super("tell");
012            this.description = "Sends a private message to the given player";
013            this.usageMessage = "/tell <player> <message>";
014            this.setPermission("bukkit.command.tell");
015        }
016    
017        @Override
018        public boolean execute(CommandSender sender, String currentAlias, String[] args) {
019            if (!testPermission(sender)) return true;
020            if (args.length < 2)  {
021                sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
022                return false;
023            }
024    
025            Player player = Bukkit.getPlayerExact(args[0]);
026    
027            // If a player is hidden from the sender pretend they are offline
028            if (player == null || (sender instanceof Player && !((Player) sender).canSee(player))) {
029                sender.sendMessage("There's no player by that name online.");
030            } else {
031                StringBuilder message = new StringBuilder();
032    
033                for (int i = 1; i < args.length; i++) {
034                    if (i > 1) message.append(" ");
035                    message.append(args[i]);
036                }
037    
038                String result = ChatColor.GRAY + sender.getName() + " whispers " + message;
039    
040                sender.sendMessage("[" + sender.getName() + "->" + player.getName() + "] " + message);
041                player.sendMessage(result);
042            }
043    
044            return true;
045        }
046    
047        @Override
048        public boolean matches(String input) {
049            return input.equalsIgnoreCase("tell") || input.equalsIgnoreCase("w") || input.equalsIgnoreCase("msg");
050        }
051    }