From 2bd08f5220ea0325646b72de49965017d20b574b Mon Sep 17 00:00:00 2001 From: Alexander01998 Date: Mon, 22 Jul 2024 17:39:43 +0200 Subject: [PATCH] Create FilterOwnMessagesSetting to handle own message detection --- .../wurstclient/hacks/ChatTranslatorHack.java | 39 ++------------- .../FilterOwnMessagesSetting.java | 49 +++++++++++++++++++ 2 files changed, 54 insertions(+), 34 deletions(-) create mode 100644 src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java diff --git a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java index db92042b..f217defa 100644 --- a/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java +++ b/src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java @@ -7,13 +7,11 @@ */ package net.wurstclient.hacks; -import java.util.regex.Pattern; - import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.events.ChatInputListener; import net.wurstclient.hack.Hack; -import net.wurstclient.settings.CheckboxSetting; +import net.wurstclient.hacks.chattranslator.FilterOwnMessagesSetting; import net.wurstclient.settings.LanguageSetting; import net.wurstclient.settings.LanguageSetting.Language; import net.wurstclient.util.ChatUtils; @@ -32,16 +30,8 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener private final LanguageSetting translateTo = LanguageSetting.withoutAutoDetect("Translate to", Language.ENGLISH); - private final CheckboxSetting filterOwnMessages = new CheckboxSetting( - "Filter own messages", - "Won't translate messages that appear to be sent by you.\n" - + "It tries to detect your messages based on common chat formats" - + " like \"\", \"[username]\", or \"username:\". This" - + " might not work correctly on some servers.", - true); - - private Pattern ownMessagePattern; - private String lastUsername; + private final FilterOwnMessagesSetting filterOwnMessages = + new FilterOwnMessagesSetting(); public ChatTranslatorHack() { @@ -75,7 +65,8 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener || message.startsWith(toLang.getPrefix())) return; - if(filterOwnMessages.isChecked() && isOwnMessage(message)) + if(filterOwnMessages.isChecked() + && filterOwnMessages.isOwnMessage(message)) return; Thread.ofVirtual().name("ChatTranslator") @@ -83,26 +74,6 @@ public final class ChatTranslatorHack extends Hack implements ChatInputListener .start(() -> showTranslated(message, fromLang, toLang)); } - private boolean isOwnMessage(String message) - { - updateOwnMessagePattern(); - return ownMessagePattern.matcher(message).find(); - } - - private void updateOwnMessagePattern() - { - String username = MC.getSession().getUsername(); - if(username.equals(lastUsername)) - return; - - String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}"; - String namePattern = Pattern.quote(username); - String regex = "^" + rankPattern + "[<\\[]?" + namePattern + "[>\\]:]"; - - ownMessagePattern = Pattern.compile(regex); - lastUsername = username; - } - private void showTranslated(String message, Language fromLang, Language toLang) { diff --git a/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java new file mode 100644 index 00000000..16f414fc --- /dev/null +++ b/src/main/java/net/wurstclient/hacks/chattranslator/FilterOwnMessagesSetting.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2014-2024 Wurst-Imperium and contributors. + * + * This source code is subject to the terms of the GNU General Public + * License, version 3. If a copy of the GPL was not distributed with this + * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt + */ +package net.wurstclient.hacks.chattranslator; + +import java.util.regex.Pattern; + +import net.wurstclient.WurstClient; +import net.wurstclient.settings.CheckboxSetting; + +public class FilterOwnMessagesSetting extends CheckboxSetting +{ + private Pattern ownMessagePattern; + private String lastUsername; + + public FilterOwnMessagesSetting() + { + super("Filter own messages", + "Won't translate messages that appear to be sent by you.\n" + + "It tries to detect your messages based on common chat formats" + + " like \"\", \"[username]\", or \"username:\". This" + + " might not work correctly on some servers.", + true); + } + + public boolean isOwnMessage(String message) + { + updateOwnMessagePattern(); + return ownMessagePattern.matcher(message).find(); + } + + private void updateOwnMessagePattern() + { + String username = WurstClient.MC.getSession().getUsername(); + if(username.equals(lastUsername)) + return; + + String rankPattern = "(?:\\[[^\\]]+\\] ?){0,2}"; + String namePattern = Pattern.quote(username); + String regex = "^" + rankPattern + "[<\\[]?" + namePattern + "[>\\]:]"; + + ownMessagePattern = Pattern.compile(regex); + lastUsername = username; + } +}