summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/mixins
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/mixins')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiPlayerTabOverlayHook.kt30
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiPlayerTabOverlay.java26
2 files changed, 56 insertions, 0 deletions
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<Boolean>() {
+ override fun initialValue(): Boolean {
+ return false
+ }
+}
+
+private operator fun <T> ThreadLocal<T>.setValue(t: Any?, property: KProperty<*>, any: T) {
+ this.set(any)
+}
+
+private operator fun <T> ThreadLocal<T>.getValue(t: Any?, property: KProperty<*>): T {
+ return get()
+}
+
+fun getPlayerName(original: String, cir: CallbackInfoReturnable<String>) {
+ 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<String> cir) {
+ String text;
+ if (info.getDisplayName() != null) {
+ text = info.getDisplayName().getFormattedText();
+ } else {
+ text = ScorePlayerTeam.formatPlayerName(info.getPlayerTeam(), info.getGameProfile().getName());
+ }
+ GuiPlayerTabOverlayHookKt.getPlayerName(text, cir);
+ }
+}