From eb4b815095666bd9d13074a052c4329ba9ac7da7 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Wed, 14 Feb 2024 20:46:25 +0100 Subject: Add mod identification for outgoing mod calls and show this data in /shchathistory. #987 --- .../java/at/hannibal2/skyhanni/data/ChatManager.kt | 28 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/data') diff --git a/src/main/java/at/hannibal2/skyhanni/data/ChatManager.kt b/src/main/java/at/hannibal2/skyhanni/data/ChatManager.kt index d631e8e26..7d0bb6728 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/ChatManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/ChatManager.kt @@ -9,6 +9,8 @@ import at.hannibal2.skyhanni.features.chat.ChatFilterGui import at.hannibal2.skyhanni.utils.IdentityCharacteristics import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.ReflectionUtils.getClassInstance +import at.hannibal2.skyhanni.utils.ReflectionUtils.getModContainer import at.hannibal2.skyhanni.utils.ReflectionUtils.makeAccessible import net.minecraft.client.Minecraft import net.minecraft.client.gui.ChatLine @@ -65,6 +67,8 @@ object ChatManager { var actionKind: ActionKind, var actionReason: String?, val modified: IChatComponent?, + val hoverInfo: List = listOf(), + val hoverExtraInfo: List = listOf(), ) @SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true) @@ -85,12 +89,28 @@ object ChatManager { val message = packet.message val component = ChatComponentText(message) - messageHistory[IdentityCharacteristics(component)] = - MessageFilteringResult(component, ActionKind.OUTGOING, null, null) + val originatingModCall = event.findOriginatingModCall() + val originatingModContainer = originatingModCall?.getClassInstance()?.getModContainer() + val hoverInfo = listOf( + "§7Message created by §a${originatingModCall?.toString() ?: "§cprobably minecraft"}", + "§7Mod id: §a${originatingModContainer?.modId}", + "§7Mod name: §a${originatingModContainer?.name}" + ) + val stackTrace = + Thread.currentThread().stackTrace.map { + "§7 §2${it.className}§7.§a${it.methodName}§7" + + if (it.fileName == null) "" else "(§b${it.fileName}§7:§3${it.lineNumber}§7)" + } + val result = MessageFilteringResult( + component, ActionKind.OUTGOING, null, null, + hoverInfo = hoverInfo, + hoverExtraInfo = hoverInfo + listOf("") + stackTrace + ) + + messageHistory[IdentityCharacteristics(component)] = result if (MessageSendToServerEvent(message).postAndCatch()) { event.isCanceled = true - messageHistory[IdentityCharacteristics(component)] = - MessageFilteringResult(component, ActionKind.OUTGOING_BLOCKED, null, null) + messageHistory[IdentityCharacteristics(component)] = result.copy(actionKind = ActionKind.OUTGOING_BLOCKED) } } -- cgit