Skip to content

Commit 65d40f5

Browse files
committed
implement ExtraTab rows and add friends only, highlight friends, and friend color settings
1 parent 5b57b4a commit 65d40f5

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,26 @@
1717

1818
package com.lambda.mixin.render;
1919

20+
import com.lambda.friend.FriendManager;
2021
import com.lambda.module.modules.render.ExtraTab;
22+
import com.lambda.util.text.TextBuilder;
23+
import com.lambda.util.text.TextDslKt;
24+
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
25+
import kotlin.Unit;
2126
import net.minecraft.client.MinecraftClient;
2227
import net.minecraft.client.gui.hud.PlayerListHud;
2328
import net.minecraft.client.network.PlayerListEntry;
29+
import net.minecraft.text.MutableText;
30+
import net.minecraft.text.Text;
31+
import org.jetbrains.annotations.Nullable;
2432
import org.spongepowered.asm.mixin.Final;
2533
import org.spongepowered.asm.mixin.Mixin;
2634
import org.spongepowered.asm.mixin.Shadow;
35+
import org.spongepowered.asm.mixin.Unique;
2736
import org.spongepowered.asm.mixin.injection.At;
37+
import org.spongepowered.asm.mixin.injection.Constant;
2838
import org.spongepowered.asm.mixin.injection.Inject;
39+
import org.spongepowered.asm.mixin.injection.ModifyConstant;
2940
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
3041

3142
import java.util.Comparator;
@@ -45,9 +56,35 @@ private void onCollectPlayerEntriesHead(CallbackInfoReturnable<List<PlayerListEn
4556
client.player.networkHandler
4657
.getListedPlayerListEntries()
4758
.stream()
59+
.filter(entry -> !ExtraTab.getFriendsOnly() || FriendManager.INSTANCE.isFriend(entry.getProfile()))
4860
.sorted(ENTRY_ORDERING)
4961
.limit(ExtraTab.getTabEntries())
5062
.toList()
5163
);
5264
}
65+
66+
@ModifyConstant(method = "render", constant = @Constant(intValue = 20))
67+
private int modifyRowLimit(int original) {
68+
return ExtraTab.INSTANCE.isEnabled() ? ExtraTab.getRows() : original;
69+
}
70+
71+
@ModifyExpressionValue(method = "getPlayerName", at = @At(value = "INVOKE", target = "Lnet/minecraft/text/Text;copy()Lnet/minecraft/text/MutableText;"))
72+
private MutableText modifyPlayerName(MutableText original) { return modifyName(original); }
73+
74+
@ModifyExpressionValue(method = "getPlayerName", at = @At(value = "INVOKE", target = "Lnet/minecraft/scoreboard/Team;decorateName(Lnet/minecraft/scoreboard/AbstractTeam;Lnet/minecraft/text/Text;)Lnet/minecraft/text/MutableText;"))
75+
private MutableText modifyDecorateName(MutableText original) { return modifyName(original); }
76+
77+
@Unique
78+
private @Nullable MutableText modifyName(Text original) {
79+
if (ExtraTab.INSTANCE.isDisabled() ||
80+
!ExtraTab.getHighlightFriends() ||
81+
!FriendManager.INSTANCE.isFriend(original.getString())) return original.copy();
82+
var newText = original.copy();
83+
var textBuilder = new TextBuilder();
84+
TextDslKt.color(textBuilder, ExtraTab.getFriendColor(), builder -> {
85+
builder.styleAndAppend(newText);
86+
return Unit.INSTANCE;
87+
});
88+
return textBuilder.getText();
89+
}
5390
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@ package com.lambda.module.modules.render
1919

2020
import com.lambda.module.Module
2121
import com.lambda.module.tag.ModuleTag
22+
import java.awt.Color
2223

2324
object ExtraTab : Module(
2425
name = "ExtraTab",
2526
description = "Adds more tabs to the main menu",
2627
tag = ModuleTag.RENDER,
2728
) {
28-
@JvmStatic
29-
val tabEntries by setting("Tab Entries", 80L, 1L..500L, 1L)
30-
31-
@JvmStatic
32-
val rows by setting("Rows", 20, 1..100, 1)
29+
@JvmStatic val tabEntries by setting("Tab Entries", 80L, 1L..500L, 1L)
30+
@JvmStatic val rows by setting("Rows", 20, 1..100, 1)
31+
@JvmStatic val friendsOnly by setting("Friends Only", false)
32+
@JvmStatic val highlightFriends by setting("Highlight Friends", true)
33+
@JvmStatic val friendColor by setting("Friend Color", Color(120, 120, 255, 255), "The color friends will be highlighted") { highlightFriends }
3334
}

0 commit comments

Comments
 (0)