From 5debecd244706c290fe40ffc14054ab8bf865465 Mon Sep 17 00:00:00 2001 From: qnx Date: Fri, 28 Aug 2026 20:39:47 +0400 Subject: [PATCH 1/2] BetterTab: add Friends only option. --- .../meteorclient/mixin/PlayerTabOverlayMixin.java | 15 +++++++++++++++ .../systems/modules/render/BetterTab.java | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java index bea341069b4..468ee698459 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java @@ -7,6 +7,7 @@ import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; +import meteordevelopment.meteorclient.systems.friends.Friends; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.BetterTab; import net.minecraft.client.Minecraft; @@ -36,6 +37,20 @@ private long modifyCount(long count) { return module.isActive() ? module.tabSize.get() : count; } + @Inject(method = "getPlayerInfos", at = @At("RETURN"), cancellable = true) + private void friendsOnly(CallbackInfoReturnable> cir) { + BetterTab betterTab = Modules.get().get(BetterTab.class); + + if (betterTab.isActive() && betterTab.onlyFriends.get()) { + List players = cir.getReturnValue(); + cir.setReturnValue(players.stream() + .filter( + info -> info.getProfile().id().equals(Minecraft.getInstance().player.getUUID()) || Friends.get().isFriend(info) + ).toList() + ); + } + } + @Inject(method = "getNameForDisplay", at = @At("HEAD"), cancellable = true) public void getNameForDisplay(PlayerInfo info, CallbackInfoReturnable cir) { BetterTab betterTab = Modules.get().get(BetterTab.class); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java index 216262da5d6..9f6216981ff 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java @@ -64,6 +64,13 @@ public class BetterTab extends Module { .build() ); + public final Setting onlyFriends = sgGeneral.add(new BoolSetting.Builder() + .name("show-only-friends") + .description("Only show friends and yourself in the tablist, nobody else.") + .defaultValue(false) + .build() + ); + public final Setting accurateLatency = sgGeneral.add(new BoolSetting.Builder() .name("accurate-latency") .description("Shows latency as a number in the tablist.") From 8ba1b5a00fb6e64df561c1378bd200d5128254ab Mon Sep 17 00:00:00 2001 From: qnx Date: Sun, 30 Aug 2026 02:15:47 +0400 Subject: [PATCH 2/2] add option to list friends first instead --- .../mixin/PlayerTabOverlayMixin.java | 22 ++++++++++++++----- .../systems/modules/render/BetterTab.java | 8 +++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java index 468ee698459..711176cabca 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerTabOverlayMixin.java @@ -7,6 +7,7 @@ import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; +import java.util.Comparator; import meteordevelopment.meteorclient.systems.friends.Friends; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.BetterTab; @@ -41,13 +42,22 @@ private long modifyCount(long count) { private void friendsOnly(CallbackInfoReturnable> cir) { BetterTab betterTab = Modules.get().get(BetterTab.class); - if (betterTab.isActive() && betterTab.onlyFriends.get()) { + if (betterTab.isActive()) { List players = cir.getReturnValue(); - cir.setReturnValue(players.stream() - .filter( - info -> info.getProfile().id().equals(Minecraft.getInstance().player.getUUID()) || Friends.get().isFriend(info) - ).toList() - ); + + if (betterTab.onlyFriends.get()) { + players = players.stream() + .filter(info -> info.getProfile().id().equals(Minecraft.getInstance().player.getUUID()) || Friends.get().isFriend(info)) + .toList(); + } + + if (betterTab.friendsFirst.get()) { + players = players.stream() + .sorted(Comparator.comparing(info -> !(info.getProfile().id().equals(Minecraft.getInstance().player.getUUID()) || Friends.get().isFriend(info)))) + .toList(); + } + + cir.setReturnValue(players); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java index 9f6216981ff..58047a3ec74 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java @@ -71,6 +71,14 @@ public class BetterTab extends Module { .build() ); + public final Setting friendsFirst = sgGeneral.add(new BoolSetting.Builder() + .name("show-friends-first") + .description("First show friends and yourself in the tablist, then everyone else.") + .defaultValue(false) + .visible(() -> !onlyFriends.get()) + .build() + ); + public final Setting accurateLatency = sgGeneral.add(new BoolSetting.Builder() .name("accurate-latency") .description("Shows latency as a number in the tablist.")