Skip to content

Commit caf88c7

Browse files
committed
sort friends first setting in ExtraTab
1 parent 226c8b7 commit caf88c7

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@
2626
import net.minecraft.client.MinecraftClient;
2727
import net.minecraft.client.gui.hud.PlayerListHud;
2828
import net.minecraft.client.network.PlayerListEntry;
29+
import net.minecraft.scoreboard.Team;
2930
import net.minecraft.text.MutableText;
3031
import net.minecraft.text.Text;
32+
import net.minecraft.util.Nullables;
33+
import net.minecraft.world.GameMode;
3134
import org.jetbrains.annotations.Nullable;
3235
import org.spongepowered.asm.mixin.Final;
3336
import org.spongepowered.asm.mixin.Mixin;
@@ -45,6 +48,12 @@
4548
@Mixin(PlayerListHud.class)
4649
public class PlayerListHudMixin {
4750
@Shadow @Final private static Comparator<PlayerListEntry> ENTRY_ORDERING;
51+
@Unique @Final private static Comparator<PlayerListEntry> FRIENDS_FIRST_ENTRY_ORDERING = Comparator
52+
.comparingInt((PlayerListEntry entry) -> FriendManager.INSTANCE.isFriend(entry.getProfile().name()) ? 0 : 1)
53+
.thenComparingInt(entry -> -entry.getListOrder())
54+
.thenComparingInt((entry) -> entry.getGameMode() == GameMode.SPECTATOR ? 1 : 0)
55+
.thenComparing((entry) -> Nullables.mapOrElse(entry.getScoreboardTeam(), Team::getName, ""))
56+
.thenComparing((entry) -> entry.getProfile().name(), String::compareToIgnoreCase);
4857

4958
@Shadow @Final private MinecraftClient client;
5059

@@ -57,7 +66,7 @@ private void onCollectPlayerEntriesHead(CallbackInfoReturnable<List<PlayerListEn
5766
.getListedPlayerListEntries()
5867
.stream()
5968
.filter(entry -> !ExtraTab.getFriendsOnly() || FriendManager.INSTANCE.isFriend(entry.getProfile()))
60-
.sorted(ENTRY_ORDERING)
69+
.sorted(ExtraTab.getSortFriendsFirst() ? FRIENDS_FIRST_ENTRY_ORDERING : ENTRY_ORDERING)
6170
.limit(ExtraTab.getTabEntries())
6271
.toList()
6372
);

src/main/kotlin/com/lambda/module/modules/render/ExtraTab.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ object ExtraTab : Module(
2929
@JvmStatic val tabEntries by setting("Tab Entries", 80L, 1L..500L, 1L)
3030
@JvmStatic val rows by setting("Rows", 20, 1..100, 1)
3131
@JvmStatic val friendsOnly by setting("Friends Only", false)
32+
@JvmStatic val sortFriendsFirst by setting("Sort Friends First", true)
3233
@JvmStatic val highlightFriends by setting("Highlight Friends", true)
3334
@JvmStatic val friendColor by setting("Friend Color", Color(120, 120, 255, 255), "The color friends will be highlighted") { highlightFriends }
3435
}

0 commit comments

Comments
 (0)