diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/chat/PlayerChatFormatter.kt (renamed from src/main/java/at/hannibal2/skyhanni/features/chat/PlayerChatFilter.kt) | 99 | ||||
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/chat/SkyBlockLevelChatMessage.kt | 39 |
2 files changed, 70 insertions, 68 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerChatFormatter.kt index fcde746d9..72ee33195 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerChatFormatter.kt @@ -7,11 +7,12 @@ import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import net.minecraft.client.Minecraft +import net.minecraft.event.ClickEvent import net.minecraft.util.ChatComponentText import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.regex.Pattern -class PlayerChatFilter { +class PlayerChatFormatter { private val loggerPlayerChat = LorenzLogger("chat/player") @@ -22,7 +23,10 @@ class PlayerChatFilter { private val patternSkyBlockLevel = Pattern.compile("§8\\[§(.)(\\d+)§8] (.+)") //§dTo §r§b[MVP§r§3+§r§b] Skyfall55§r§7: §r§7hello :) - var patternPrivateMessage: Pattern = Pattern.compile("§d(To|From) §r(.+)§r§7: §r§7(.+)") + private var patternPrivateMessage: Pattern = Pattern.compile("§d(To|From) §r(.+)§r§7: §r§7(.+)") + + private val patternUrl = + Pattern.compile("^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$") @SubscribeEvent fun onChatMessage(event: LorenzChatEvent) { @@ -52,13 +56,18 @@ class PlayerChatFilter { } else { "" } - SkyBlockLevelChatMessage.elitePrefix = elitePrefix + + val level: Int + val levelColor: String val matcher = patternSkyBlockLevel.matcher(rawMessage) if (matcher.matches()) { - SkyBlockLevelChatMessage.levelColor = matcher.group(1) - SkyBlockLevelChatMessage.level = matcher.group(2).toInt() + levelColor = matcher.group(1) + level = matcher.group(2).toInt() rawMessage = matcher.group(3) + } else { + level = -1 + levelColor = "" } val split = if (rawMessage.contains("§7§7: ")) { @@ -76,12 +85,11 @@ class PlayerChatFilter { val name = grabName(rawName) ?: return false val message = split[1] - send(channel, name, message.removeColor(), if (elitePrefix != "") " $elitePrefix" else elitePrefix) + callEvent(channel, name, message.removeColor(), level, levelColor, elitePrefix) return true } private fun handlePrivateMessage(originalMessage: String): Boolean { - val matcher = patternPrivateMessage.matcher(originalMessage) if (!matcher.matches()) return false val direction = matcher.group(1) @@ -124,7 +132,14 @@ class PlayerChatFilter { } } - private fun send(channel: PlayerMessageChannel, name: String, message: String, elitePrefix: String) { + private fun callEvent( + channel: PlayerMessageChannel, + name: String, + message: String, + level: Int, + levelColor: String, + elitePrefix: String, + ) { loggerPlayerChat.log("[$channel] ${name.removeColor()}: $message") val event = PlayerSendChatEvent(channel, name, message) event.postAndCatch() @@ -134,34 +149,60 @@ class PlayerChatFilter { return } - val finalMessage = event.message - if (finalMessage != message) { - loggerPlayerChat.log("message changed: $finalMessage") - } - val channelPrefix = getChannelPrefix(channel) val colon = if (SkyHanniMod.feature.chat.playerColonHider) "" else ":" - LorenzUtils.chat("$channelPrefix$elitePrefix$name§f$colon $finalMessage") - } + val levelFormat = getLevelFormat(name, level, levelColor) - companion object { + sendWithLink("$channelPrefix$elitePrefix$levelFormat§f$colon", event.message) + } - fun getChannelPrefix(channel: PlayerMessageChannel): String { - if (channel == PlayerMessageChannel.ALL && !SkyHanniMod.feature.chat.allChannelPrefix) return "" - - val color = channel.prefixColor - val small = channel.prefixSmall - val large = channel.prefixLarge - return when (SkyHanniMod.feature.chat.channelDesign) { - 0 -> "$color$large §8> " - 1 -> "$color$small> " - 2 -> "§8<$color$small§8> " - 3 -> "§8[$color$small§8] " - 4 -> "§8($color$small§8) " - else -> "$color$large §8> " + private fun sendWithLink(prefix: String, message: String) { + val fullText = ChatComponentText(prefix) + + for (lines in message.split(" ")) { + fullText.appendSibling(ChatComponentText(" ")) + if (patternUrl.matcher(lines).matches()) { + val oneWord = ChatComponentText(lines) + oneWord.chatStyle.chatClickEvent = ClickEvent(ClickEvent.Action.OPEN_URL, lines) + fullText.appendSibling(oneWord) + } else { + fullText.appendSibling(ChatComponentText(lines)) } } + Minecraft.getMinecraft().thePlayer.addChatMessage(fullText) + } + + private fun getLevelFormat(name: String, level: Int, levelColor: String): String { + if (level == -1) return name + + return when (SkyHanniMod.feature.chat.skyblockLevelDesign) { + 0 -> "§8[§${levelColor}${level}§8] $name" + 1 -> "§${levelColor}§l${level} $name" + 2 -> "$name §8[§${levelColor}${level}§8]" + 3 -> name + else -> "§8[§${levelColor}${level}§8] $name" + } + } + + private fun getChannelPrefix(channel: PlayerMessageChannel): String { + if (channel == PlayerMessageChannel.ALL && !SkyHanniMod.feature.chat.allChannelPrefix) return "" + + val color = channel.prefixColor + val small = channel.prefixSmall + val large = channel.prefixLarge + return when (SkyHanniMod.feature.chat.channelDesign) { + 0 -> "$color$large §8> " + 1 -> "$color$small> " + 2 -> "§8<$color$small§8> " + 3 -> "§8[$color$small§8] " + 4 -> "§8($color$small§8) " + else -> "$color$large §8> " + } + } + + companion object { + fun testAllChat() { val name = Minecraft.getMinecraft().thePlayer.name val message = diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/SkyBlockLevelChatMessage.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/SkyBlockLevelChatMessage.kt deleted file mode 100644 index 8a0e3628b..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/SkyBlockLevelChatMessage.kt +++ /dev/null @@ -1,39 +0,0 @@ -package at.hannibal2.skyhanni.features.chat - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.events.PlayerSendChatEvent -import at.hannibal2.skyhanni.utils.LorenzUtils -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -class SkyBlockLevelChatMessage { - - companion object { - var level = -1 - var levelColor = "" - var elitePrefix = "" - } - - @SubscribeEvent - fun onChatMessage(event: PlayerSendChatEvent) { - if (level == -1) return - event.cancelledReason = "skyblock level" - - val message = event.message - val name = event.formattedName - val channelPrefix = PlayerChatFilter.getChannelPrefix(event.channel) - - val colon = if (SkyHanniMod.feature.chat.playerColonHider) "" else ":" - - val levelFormat = getLevelFormat(name) - LorenzUtils.chat("$channelPrefix$elitePrefix$levelFormat§f$colon $message") - level = -1 - } - - private fun getLevelFormat(name: String) = when (SkyHanniMod.feature.chat.skyblockLevelDesign) { - 0 -> "§8[§$levelColor${level}§8] $name" - 1 -> "§${levelColor}§l$level $name" - 2 -> "$name §8[§$levelColor${level}§8]" - 3 -> name - else -> "§8[§$levelColor${level}§8] $name" - } -}
\ No newline at end of file |
