public static boolean removeFriend(ProxiedPlayer p, String who) {
   if (who == null || who == "") {
     Messages.FRIEND_FAIL_REMOVED.msg(p, "%player%", who);
     return false;
   } // Parameter fehlt bzw. ungültig
   ProxiedPlayer whoPlayer = Util.getPlayer(who);
   PlayerData pd = PlayerData.get(p.getUniqueId());
   if (whoPlayer == null) {
     for (UUID uuid : pd.getFriends().keySet()) {
       Friend friend = pd.getFriends().get(uuid);
       if (friend.getFriendName().equalsIgnoreCase(who)) {
         friend.remove(true);
         pd.getFriends().remove(uuid);
         Messages.FRIEND_REMOVED.msg(p, "%player%", who);
         PluginMessenger.sendMessage(p, "Friend", "Update");
         return true;
       }
     }
     Messages.FRIEND_NOT_IN_FRIENDLIST.msg(p, "%player%", who);
     return false;
   } else {
     if (pd.getFriends().containsKey(whoPlayer.getUniqueId())) {
       pd.getFriends().remove(whoPlayer.getUniqueId());
       Messages.FRIEND_REMOVED.msg(p, "%player%", whoPlayer.getName());
       PluginMessenger.sendMessage(p, "Friend", "Update");
       return true;
     }
     Messages.FRIEND_NOT_IN_FRIENDLIST.msg(p, "%player%", who);
     return false;
   }
 }
 public static boolean addFriend(
     ProxiedPlayer p, String who) { // who == der, der geaddedt werden soll
   if (who == null || who == "") return false; // Parameter fehlt bzw. ungültig
   PlayerData pd =
       PlayerData.get(p.getUniqueId()); // All ProxiedPlayer's are registered in the RAM
   ProxiedPlayer whoPlayer = Util.getPlayer(who);
   if (whoPlayer == null) {
     Messages.FRIEND_NOT_ONLINE.msg(p, "%player%", who);
     return false;
   }
   if (p.getUniqueId() == whoPlayer.getUniqueId()) {
     Messages.FRIEND_YOURSELF.msg(p);
     return false;
   }
   if (pd.getFriends().containsKey(whoPlayer.getUniqueId()) == true) {
     Messages.FRIEND_ALREADY_A_FRIEND.msg(p, "%player%", whoPlayer.getName());
     return false;
   }
   Friend f =
       new Friend(p.getUniqueId(), whoPlayer.getUniqueId(), p.getName(), whoPlayer.getName());
   FriendRequest fRequest = new FriendRequest(p, whoPlayer, f);
   PlayerData.get(whoPlayer.getUniqueId()).addFriendRequest(fRequest);
   f.insertSQL();
   pd.getFriends().put(whoPlayer.getUniqueId(), f);
   Messages.FRIENDREQUEST_SUCCESSFULLY_SEND.msg(p, "%player%", whoPlayer.getName());
   Messages.FRIENDREQUEST_GOT.msg(whoPlayer, "%player%", p.getName());
   PluginMessenger.sendMessage(p, "Friend", "Update");
   return true;
 }
  public static boolean acceptFriend(ProxiedPlayer p, String toAcceptFriendName) {
    if (toAcceptFriendName == null || toAcceptFriendName == "") return false;
    PlayerData pd = PlayerData.get(p.getUniqueId());
    ProxiedPlayer toAcceptFriend = Util.getPlayer(toAcceptFriendName);
    if (toAcceptFriend == null) {
      Messages.FRIEND_NOT_ONLINE.msg(p, "%player%", toAcceptFriendName);
      return false;
    }
    if (!pd.getFriendRequests().isEmpty()) {
      for (FriendRequest fr : pd.getFriendRequests()) {
        ProxiedPlayer friend = fr.getReceiver();
        if (friend == null) continue;
        if (friend.getUniqueId().toString() == toAcceptFriend.getUniqueId().toString()) {
          fr.setAccepted(true);
          fr.setAnswered(true);
          Messages.FRIENDREQUEST_ACCEPTED.msg(p, "%player%", toAcceptFriend.getName());
          Messages.FRIENDREQUEST_ACCEPTED_FORSENDER.msg(toAcceptFriend, "%player%", p.getName());
          PluginMessenger.sendMessage(p, "Friend", "Update");
          PluginMessenger.sendMessage(toAcceptFriend, "Friend", "Update");
          return true;
        }
      }
    }

    if (!pd.getFriends().containsKey(toAcceptFriend.getUniqueId())) {
      Messages.FRIEND_NOT_IN_FRIENDLIST.msg(p, "%player%", toAcceptFriendName);
      return false;
    }
    Friend friend = pd.getFriends().get(toAcceptFriend.getUniqueId());
    friend.setRequestAccepted(true);
    friend.updateSQL();
    Messages.FRIENDREQUEST_ACCEPTED.msg(p, "%player%", toAcceptFriend.getName());
    Messages.FRIENDREQUEST_ACCEPTED_FORSENDER.msg(toAcceptFriend, "%player%", p.getName());
    PluginMessenger.sendMessage(p, "Friend", "Update");
    PluginMessenger.sendMessage(toAcceptFriend, "Friend", "Update");
    return true;
  }
  @Override
  public Iterable<String> onTabComplete(CommandSender sender, String[] args) {
    if (args.length <= 0) return null;
    Set<String> matches = new HashSet<>();
    switch (args[0].toLowerCase()) {
      case "add":
        {
          if (args.length != 2) break;
          if (args[1].length() >= 2) {
            String search = args[1].toLowerCase();
            for (ProxiedPlayer p : Util.PROXY.getPlayers()) {
              if (p.getName().toLowerCase().startsWith(search)) matches.add(p.getName());
            }
            return matches;
          }
          break;
        }

      case "remove":
        {
          if (args.length != 2) break;
          if (args[1].length() >= 2) {
            if (!(sender instanceof ProxiedPlayer)) return null;
            ProxiedPlayer player = (ProxiedPlayer) sender;
            String search = args[1].toLowerCase();
            PlayerData pd = PlayerData.get(player.getUniqueId());
            for (Friend friend : pd.getFriends().values()) {
              if (friend.getFriendName().toLowerCase().startsWith(search))
                matches.add(friend.getFriendName());
            }
          }
          break;
        }

      case "accept":
        {
          if (args.length != 3) break;
          if (args[2].length() >= 2) {
            if (!(sender instanceof ProxiedPlayer)) return null;
            ProxiedPlayer player = (ProxiedPlayer) sender;
            String search = args[2].toLowerCase();
            PlayerData pd = PlayerData.get(player.getUniqueId());
            for (FriendRequest fr : pd.getFriendRequests()) {
              if (fr.getSender().getName().toLowerCase().startsWith(search))
                matches.add(fr.getSender().getName());
            }
          }
          break;
        }

      default:
        {
          if (args.length == 1) {
            String search = args[0].toLowerCase();
            for (String subcmd : Util.FRIEND_SUBCOMMANDS) {
              if (subcmd.toLowerCase().startsWith(search)) matches.add(subcmd);
            }
          }
          break;
        }
    }
    return matches;
  }