@GrubsCommandHandler(
		command = "send",
		desc = "Teleport named player to another user or a saved preset. ",
		usage = "/<command> <player> <player>|<preset name>"
	)
	public void onSendCommand(GrubsCommandInfo cmd) {
		CommandSender sender = cmd.sender;
		String[] args = cmd.args;

		if (args.length == 2) {
			List<Player> targetMatches = Bukkit.matchPlayer(args[0]);
			if (targetMatches.size() > 0) {
				if (targetMatches.size() > 1) {
					String matchStr = "";
					for (Player player : targetMatches) {
						matchStr = matchStr + player.getName() + " ";
					}
					GrubsMessager.sendMessage(
						sender,
						GrubsMessager.MessageLevel.INFO,
						"Multiple matches: " + matchStr
					);
				}
				else {
					Player target = targetMatches.get(0);

					if (this.tpModule.teleportPresets.containsKey(args[1])) {
						this.tpModule.teleportPlayer(target, this.tpModule.teleportPresets.get(args[1]));
					}
					else {
						List<Player> destMatches = Bukkit.matchPlayer(args[1]);
						if (destMatches.size() > 0) {
							if (destMatches.size() > 1) {
								String matchStr = "";
								for (Player player : destMatches) {
									matchStr = matchStr + player.getName() + " ";
								}
								GrubsMessager.sendMessage(
									sender,
									GrubsMessager.MessageLevel.INFO,
									"Multiple matches: " + matchStr
								);
							}
							else {
								Player dest = destMatches.get(0);
								this.tpModule.teleportPlayer(target, dest.getLocation());
							}
						}
						else {
							GrubsMessager.sendMessage(
								sender,
								GrubsMessager.MessageLevel.ERROR,
								"No players matching '" + args[1] + "'."
							);
						}
					}
				}
			}
			else {
				GrubsMessager.sendMessage(
					sender,
					GrubsMessager.MessageLevel.ERROR,
					"No players matching '" + args[0] + "'."
				);
			}
		}
		else {
			GrubsMessager.sendMessage(
				sender,
				GrubsMessager.MessageLevel.ERROR,
				"Missing command argument."
			);
		}
	}