Skip to content

Commit 4d4331e

Browse files
Edouard127Avanatiker
authored andcommitted
AntiSpam: Prevent heavy unicode & utf16/32 from lagging the game (lambda-client#425)
* lag prevent * Change to safeListener Co-authored-by: Constructor <[email protected]>
1 parent 69410dd commit 4d4331e

File tree

1 file changed

+20
-3
lines changed
  • src/main/kotlin/com/lambda/client/module/modules/chat

1 file changed

+20
-3
lines changed

src/main/kotlin/com/lambda/client/module/modules/chat/AntiSpam.kt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.lambda.client.module.modules.chat
22

33
import com.lambda.client.LambdaMod
4-
import com.lambda.client.event.listener.listener
54
import com.lambda.client.module.Category
65
import com.lambda.client.module.Module
76
import com.lambda.client.util.text.MessageDetection
87
import com.lambda.client.util.text.MessageSendHelper
98
import com.lambda.client.util.text.SpamFilters
9+
import com.lambda.client.util.threads.safeListener
1010
import net.minecraft.util.text.TextComponentString
1111
import net.minecraftforge.client.event.ClientChatReceivedEvent
1212
import java.util.concurrent.ConcurrentHashMap
@@ -32,6 +32,8 @@ object AntiSpam : Module(
3232
private val specialCharBegin = setting("Special Begin", true, { page == Page.TYPE })
3333
private val greenText = setting("Green Text", false, { page == Page.TYPE })
3434
private val fancyChat by setting("Fancy Chat", false, { page == Page.TYPE })
35+
private val lagMessage by setting("Lag Message", true, { page == Page.TYPE })
36+
private val thresholdLagMessage by setting("Threshold Lag", 256, 256..1024, 1, { page == Page.TYPE && lagMessage }) // Is 1024 the max?
3537

3638
/* Page Two */
3739
private val aggressiveFiltering by setting("Aggressive Filtering", true, { page == Page.SETTINGS })
@@ -82,8 +84,10 @@ object AntiSpam : Module(
8284
messageHistory.clear()
8385
}
8486

85-
listener<ClientChatReceivedEvent> { event ->
86-
if (mc.player == null) return@listener
87+
safeListener<ClientChatReceivedEvent> { event ->
88+
if (lagMessage && isLagMessage(event.message.unformattedText)) {
89+
event.isCanceled = true
90+
}
8791

8892
messageHistory.values.removeIf { System.currentTimeMillis() - it > 600000 }
8993

@@ -131,6 +135,16 @@ object AntiSpam : Module(
131135
}
132136
}
133137

138+
private fun isLagMessage(message: String): Boolean {
139+
return if (!filterOwn && isOwn(message)
140+
|| !filterDMs && MessageDetection.Direct.ANY detect message
141+
|| !filterServer && MessageDetection.Server.ANY detect message) {
142+
false
143+
} else {
144+
message.getBytes() > thresholdLagMessage
145+
}
146+
}
147+
134148
private fun detectSpam(message: String): String? {
135149
for ((key, value) in settingMap) {
136150
findPatterns(value, message)?.let {
@@ -169,6 +183,9 @@ object AntiSpam : Module(
169183
return isDuplicate
170184
}
171185

186+
private fun String.getBytes(): Int {
187+
return this.toByteArray().size
188+
}
172189

173190
private fun isOwn(message: String): Boolean {
174191
/* mc.player is null when the module is being registered, so this matcher isn't added alongside the other FilterPatterns */

0 commit comments

Comments
 (0)