1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
package at.hannibal2.skyhanni.features.chat.playerchat
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.LorenzChatEvent
import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager
import net.minecraft.util.ChatComponentText
import net.minecraft.util.IChatComponent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class PlayerChatModifier {
private val patterns = mutableListOf<Regex>()
init {
patterns.add("§(?:a|b|6)\\[(?:VIP|MVP)(?:(?:§.|\\+)*)](?: {1,2})(?:§[7ab6])?(\\w{2,16})".toRegex()) // ranked player everywhere
patterns.add("§(?:7|a|b|6)((?:\\w+){2,16})§r(?!§7x)".toRegex()) // nons in notification message
patterns.add("(?:§7 )?§7((?:\\w+){2,16})§7§r".toRegex()) // nons user chat
}
@SubscribeEvent
fun onChatReceive(event: LorenzChatEvent) {
val foundCommands = mutableListOf<IChatComponent>()
val message = event.chatComponent
addComponent(foundCommands, event.chatComponent)
for (sibling in message.siblings) {
addComponent(foundCommands, sibling)
}
val size = foundCommands.size
if (size > 1) {
return
}
val original = event.chatComponent.formattedText
val newText = cutMessage(original)
if (original == newText) return
val text = ChatComponentText(newText)
if (size == 1) {
val chatStyle = foundCommands[0].chatStyle
text.chatStyle.chatClickEvent = chatStyle.chatClickEvent
text.chatStyle.chatHoverEvent = chatStyle.chatHoverEvent
}
event.chatComponent = text
}
private fun addComponent(foundCommands: MutableList<IChatComponent>, message: IChatComponent) {
val clickEvent = message.chatStyle.chatClickEvent
if (clickEvent != null) {
if (foundCommands.size == 1) {
if (foundCommands[0].chatStyle.chatClickEvent.value == clickEvent.value) {
return
}
}
foundCommands.add(message)
}
}
private fun cutMessage(input: String): String {
var string = input
//all players same color in chat
string = string.replace("§r§7: ", "§r§f: ")
if (SkyHanniMod.feature.chat.chatFilter) {
if (string.contains("§r§f: ")) {
if (PlayerChatFilter.shouldChatFilter(string)) {
string = string.replace("§r§f: ", "§r§7: ")
}
}
}
if (SkyHanniMod.feature.chat.playerRankHider) {
for (pattern in patterns) {
string = string.replace(pattern, "§b$1")
}
string = string.replace("§(?:7|a|b|6)((?:\\w+){2,16})'s", "§b$1's")
string = string.replace("§(?:7|a|b|6)((?:\\w+){2,16}) (§.)", "§b$1 $2")
}
if (SkyHanniMod.feature.markedPlayers.highlightInChat) {
for (markedPlayer in MarkedPlayerManager.playerNamesToMark) {
string = string.replace(markedPlayer, "§e$markedPlayer§r")
}
}
return string
}
// private fun shouldChatFilter(input: String): Boolean {
// val text = input.lowercase()
//
// //Low baller
// if (text.contains("lowballing")) return true
// if (text.contains("lowballer")) return true
//
// //Trade
// if (text.contains("buy")) return true
// if (text.contains("sell")) return true
// if (text.contains("on my ah")) return true
//
//
// return false
// }
}
|