diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/chat')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt index 2fbb9630e..b9ef6588e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt @@ -4,36 +4,48 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.data.hypixel.chat.event.SystemMessageEvent import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager +import at.hannibal2.skyhanni.utils.ComponentMatcher +import at.hannibal2.skyhanni.utils.ComponentMatcherUtils.intoSpan +import at.hannibal2.skyhanni.utils.ComponentMatcherUtils.replace +import at.hannibal2.skyhanni.utils.ComponentSpan import at.hannibal2.skyhanni.utils.StringUtils import net.minecraft.util.ChatComponentText +import net.minecraft.util.IChatComponent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.util.regex.Pattern class PlayerChatModifier { private val config get() = SkyHanniMod.feature.chat.playerMessage - private val patterns = mutableListOf<Regex>() - - init { - patterns.add("§[ab6]\\[(?:VIP|MVP)(?:§.|\\+)*] {1,2}(?:§[7ab6])?(\\w{2,16})".toRegex()) // ranked player with prefix everywhere - patterns.add("§[7ab6](\\w{2,16})§r(?!§7x)(?!\$)".toRegex()) // all players without rank prefix in notification messages - } + private val patterns = listOf<Pair<Pattern, ComponentMatcher.() -> IChatComponent>>( + "\\[(?:VIP|MVP)(?:§.|\\+)*] {1,2}(?:§[7ab6])?(?<name>\\w{2,16})".toPattern() to { + ChatComponentText("§b").appendSibling(componentOrThrow("name")) + }, + "§[7ab6](?<name>\\w{2,16})§r(?!§7x)(?!\$)".toPattern() to { + ChatComponentText("§b").appendSibling(componentOrThrow("name")) + }, + "§[7ab6](?<name>\\w{2,16}'s)".toPattern() to { + ChatComponentText("§b").appendSibling(componentOrThrow("name")) + }, + "§[7ab6](?<name>\\w{2,16} §.)".toPattern() to { + ChatComponentText("§b").appendSibling(componentOrThrow("name")) + } + ) @SubscribeEvent fun onChat(event: SystemMessageEvent) { - val newMessage = cutMessage(event.chatComponent.formattedText) + val newMessage = cutMessage(event.chatComponent.intoSpan()) - event.chatComponent = StringUtils.replaceIfNeeded(event.chatComponent, ChatComponentText(newMessage)) ?: return + event.chatComponent = StringUtils.replaceIfNeeded(event.chatComponent, newMessage.intoComponent()) ?: return } - private fun cutMessage(input: String): String { + private fun cutMessage(input: ComponentSpan): ComponentSpan { var string = input if (config.playerRankHider) { - for (pattern in patterns) { - string = string.replace(pattern, "§b$1") + for ((pattern, func) in patterns) { + string = string.replace(pattern, func).intoSpan() } - string = string.replace("§[7ab6]((?:\\w+){2,16})'s", "§b$1's") - string = string.replace("§[7ab6]((?:\\w+){2,16}) (§.)", "§b$1 $2") } string = MarkedPlayerManager.replaceInChat(string) |
