From d4370de78c47b40070d9c8908fd8790fd7227333 Mon Sep 17 00:00:00 2001 From: kento2 Date: Fri, 17 Apr 2026 22:41:15 +0200 Subject: [PATCH] add online status to friend list --- .../friends/command/FriendListLiteral.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java index ab5593b..af4ab86 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java @@ -6,9 +6,12 @@ import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.friends.friendship.FriendshipDAO; import lombok.Getter; import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import reactor.core.scheduler.Schedulers; +import java.util.Comparator; + public class FriendListLiteral { @Getter @@ -25,10 +28,11 @@ public class FriendListLiteral { var ownUid = ctx.getPlayerSender().getUniqueId(); ctx.getPlayerSender().sendMessage("friends:"); friendshipDAO.getFriendships(ownUid) - .map(friendship -> { - var friendPlayerUid = friendship.getUuids().getOther(ownUid); - var friendPlayerName = Bukkit.getOfflinePlayer(friendPlayerUid).getName(); - return "- " + friendPlayerName; + .map(friendship -> Bukkit.getOfflinePlayer(friendship.getUuids().getOther(ownUid))) + .sort(this::compareByOnlineStatus) + .map(friendPlayer -> { + var onlineStatus = friendPlayer.isOnline() ? "§aonline" : "offline"; + return "- " + friendPlayer.getName() + ": " + onlineStatus; }) .doOnNext(line -> ctx.getSender().sendMessage(line)) .doOnComplete(() -> ctx.getSender().sendMessage("EOF")) @@ -36,4 +40,10 @@ public class FriendListLiteral { .subscribeOn(Schedulers.boundedElastic()) .subscribe(); } + + private int compareByOnlineStatus(OfflinePlayer p1, OfflinePlayer p2) { + if (p1.isOnline() && !p2.isOnline()) return 1; + if (!p1.isOnline() && p2.isOnline()) return -1; + return 0; + } }