aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
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.kt39
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