From 478a41184ea08a490f5d6834ea8019dc10f769b1 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 15 Apr 2023 23:31:53 +0200 Subject: Added visitor rarity color tab list --- .../mixins/hooks/GuiPlayerTabOverlayHook.kt | 30 ++++++++++++++++++++++ .../transformers/MixinGuiPlayerTabOverlay.java | 26 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiPlayerTabOverlayHook.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiPlayerTabOverlay.java (limited to 'src/main/java/at/hannibal2/skyhanni/mixins') diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiPlayerTabOverlayHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiPlayerTabOverlayHook.kt new file mode 100644 index 000000000..5d0542e9a --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiPlayerTabOverlayHook.kt @@ -0,0 +1,30 @@ +package at.hannibal2.skyhanni.mixins.hooks + +import at.hannibal2.skyhanni.events.TabListLineRenderEvent +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable +import kotlin.reflect.KProperty + +var tabListGuard by object : ThreadLocal() { + override fun initialValue(): Boolean { + return false + } +} + +private operator fun ThreadLocal.setValue(t: Any?, property: KProperty<*>, any: T) { + this.set(any) +} + +private operator fun ThreadLocal.getValue(t: Any?, property: KProperty<*>): T { + return get() +} + +fun getPlayerName(original: String, cir: CallbackInfoReturnable) { + if (tabListGuard) return + + val event = TabListLineRenderEvent(original) + event.postAndCatch() + val newText = event.text + if (original != newText) { + cir.returnValue = newText + } +} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiPlayerTabOverlay.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiPlayerTabOverlay.java new file mode 100644 index 000000000..8f5187c43 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiPlayerTabOverlay.java @@ -0,0 +1,26 @@ +package at.hannibal2.skyhanni.mixins.transformers; + +import at.hannibal2.skyhanni.mixins.hooks.GuiPlayerTabOverlayHookKt; +import net.minecraft.client.gui.GuiPlayerTabOverlay; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.scoreboard.ScorePlayerTeam; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + + +@Mixin(GuiPlayerTabOverlay.class) +public class MixinGuiPlayerTabOverlay { + + @Inject(method = "getPlayerName", at = @At(value = "HEAD"), cancellable = true) + private void renderItemOverlayPost(NetworkPlayerInfo info, CallbackInfoReturnable cir) { + String text; + if (info.getDisplayName() != null) { + text = info.getDisplayName().getFormattedText(); + } else { + text = ScorePlayerTeam.formatPlayerName(info.getPlayerTeam(), info.getGameProfile().getName()); + } + GuiPlayerTabOverlayHookKt.getPlayerName(text, cir); + } +} -- cgit