package tc.oc.api.bukkit.friends;
import java.util.function.Predicate;
import java.util.stream.Stream;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import tc.oc.api.docs.UserId;
import tc.oc.commons.core.util.Predicates;
/**
* Map of friend relationships for currently online players.
* At least one of the two given players must be online to guarantee no false negatives.
*/
public interface OnlineFriends {
boolean areFriends(Player a, UserId b);
boolean areFriends(Player a, Player b);
Stream<Player> onlineFriends(UserId userId);
Stream<Player> onlineFriends(Player player);
default boolean areFriends(CommandSender a, UserId b) {
return a instanceof Player &&
areFriends((Player) a, b);
}
default boolean areFriends(CommandSender a, CommandSender b) {
return a instanceof Player &&
b instanceof Player &&
areFriends((Player) a, (Player) b);
}
default Predicate<CommandSender> areFriends(UserId userId) {
return friend -> areFriends(friend, userId);
}
default Predicate<CommandSender> areFriends(Player player) {
return friend -> areFriends(friend, player);
}
default Predicate<CommandSender> areFriends(CommandSender player) {
return player instanceof Player ? areFriends((Player) player)
: Predicates.alwaysFalse();
}
default Stream<Player> onlineFriends(CommandSender player) {
return player instanceof Player ? onlineFriends((Player) player)
: Stream.empty();
}
}