From 528cf7e4ccdd6d8fbded90b22dcf9ffce447a9be Mon Sep 17 00:00:00 2001 From: asbyth Date: Mon, 19 Apr 2021 09:44:07 -0400 Subject: [PATCH] fix: resolve white chat stripping styling when modified --- .../hytilities/handlers/chat/ChatHandler.java | 32 ++++++++++++++++++- .../modifiers/DefaultChatRestyler.java | 16 ++-------- .../chat/modules/modifiers/WhiteChat.java | 23 ++++++++++--- .../hytilities/util/locraw/LocrawUtil.java | 1 + 4 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/main/java/club/sk1er/hytilities/handlers/chat/ChatHandler.java b/src/main/java/club/sk1er/hytilities/handlers/chat/ChatHandler.java index 9ec170ae..ca80c498 100644 --- a/src/main/java/club/sk1er/hytilities/handlers/chat/ChatHandler.java +++ b/src/main/java/club/sk1er/hytilities/handlers/chat/ChatHandler.java @@ -19,7 +19,12 @@ package club.sk1er.hytilities.handlers.chat; import club.sk1er.hytilities.Hytilities; -import club.sk1er.hytilities.handlers.chat.modules.blockers.*; +import club.sk1er.hytilities.handlers.chat.modules.blockers.AdBlocker; +import club.sk1er.hytilities.handlers.chat.modules.blockers.ChatCleaner; +import club.sk1er.hytilities.handlers.chat.modules.blockers.ConnectedMessage; +import club.sk1er.hytilities.handlers.chat.modules.blockers.GuildMOTD; +import club.sk1er.hytilities.handlers.chat.modules.blockers.QuestBlocker; +import club.sk1er.hytilities.handlers.chat.modules.blockers.ShoutBlocker; import club.sk1er.hytilities.handlers.chat.modules.events.AchievementEvent; import club.sk1er.hytilities.handlers.chat.modules.events.LevelupEvent; import club.sk1er.hytilities.handlers.chat.modules.modifiers.DefaultChatRestyler; @@ -31,6 +36,8 @@ import club.sk1er.hytilities.handlers.chat.modules.triggers.ThankWatchdog; import club.sk1er.hytilities.tweaker.asm.EntityPlayerSPTransformer; import club.sk1er.mods.core.util.MinecraftUtils; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.IChatComponent; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.jetbrains.annotations.NotNull; @@ -128,4 +135,27 @@ public String handleSentMessage(@NotNull String message) { return message; } + + /** + * Fixes styling when modifying a message's events. + * TODO: Improve documentation. + * + * @param component The message being modified & restored + * @param siblings The message's chat component siblings + */ + public void fixStyling(IChatComponent component, List siblings) { + if (!siblings.isEmpty()) { + for (IChatComponent sibling : siblings) { + final ChatStyle chatStyle = sibling.getChatStyle(); + + if (chatStyle.getChatHoverEvent() != null) { + component.getChatStyle().setChatHoverEvent(chatStyle.getChatHoverEvent()); + } + + if (chatStyle.getChatClickEvent() != null) { + component.getChatStyle().setChatClickEvent(chatStyle.getChatClickEvent()); + } + } + } + } } diff --git a/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/DefaultChatRestyler.java b/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/DefaultChatRestyler.java index 25983ddc..4ed1f2de 100644 --- a/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/DefaultChatRestyler.java +++ b/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/DefaultChatRestyler.java @@ -18,6 +18,7 @@ package club.sk1er.hytilities.handlers.chat.modules.modifiers; +import club.sk1er.hytilities.Hytilities; import club.sk1er.hytilities.config.HytilitiesConfig; import club.sk1er.hytilities.handlers.chat.ChatReceiveModule; import club.sk1er.hytilities.handlers.language.LanguageData; @@ -162,19 +163,6 @@ public void onMessageReceived(@NotNull ClientChatReceivedEvent event) { } } - // fix siblings being removed from messages when editing them - if (!siblings.isEmpty()) { - for (IChatComponent sibling : siblings) { - final ChatStyle chatStyle = sibling.getChatStyle(); - - if (chatStyle.getChatHoverEvent() != null) { - event.message.getChatStyle().setChatHoverEvent(chatStyle.getChatHoverEvent()); - } - - if (chatStyle.getChatClickEvent() != null) { - event.message.getChatStyle().setChatClickEvent(chatStyle.getChatClickEvent()); - } - } - } + Hytilities.INSTANCE.getChatHandler().fixStyling(event.message, siblings); } } diff --git a/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/WhiteChat.java b/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/WhiteChat.java index d08e0f92..d9518618 100644 --- a/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/WhiteChat.java +++ b/src/main/java/club/sk1er/hytilities/handlers/chat/modules/modifiers/WhiteChat.java @@ -18,12 +18,15 @@ package club.sk1er.hytilities.handlers.chat.modules.modifiers; +import club.sk1er.hytilities.Hytilities; import club.sk1er.hytilities.config.HytilitiesConfig; import club.sk1er.hytilities.handlers.chat.ChatReceiveModule; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IChatComponent; import net.minecraftforge.client.event.ClientChatReceivedEvent; import org.jetbrains.annotations.NotNull; +import java.util.List; import java.util.regex.Matcher; public class WhiteChat implements ChatReceiveModule { @@ -35,20 +38,30 @@ public int getPriority() { @Override public void onMessageReceived(@NotNull ClientChatReceivedEvent event) { + final String message = event.message.getFormattedText(); + final List siblings = event.message.getSiblings(); + boolean modified = false; + if (HytilitiesConfig.whitePrivateMessages) { - final Matcher matcher = getLanguage().privateMessageWhiteChatRegex.matcher(event.message.getFormattedText()); + final Matcher matcher = getLanguage().privateMessageWhiteChatRegex.matcher(message); if (matcher.find(0)) { - event.message = new ChatComponentText(matcher.group("type") + " " + matcher.group("prefix") + ": " + matcher.group("message").replace("§7", "§f")); + event.message = new ChatComponentText( + matcher.group("type") + " " + matcher.group("prefix") + ": " + + matcher.group("message").replace("§7", "§f") + ); + modified = true; } - - return; } if (HytilitiesConfig.whiteChat) { - final Matcher matcher = getLanguage().whiteChatNonMessageRegex.matcher(event.message.getFormattedText()); + final Matcher matcher = getLanguage().whiteChatNonMessageRegex.matcher(message); if (matcher.find(0)) { event.message = new ChatComponentText(matcher.group("prefix") + ": " + matcher.group("message")); + modified = true; } } + + if (!modified) return; + Hytilities.INSTANCE.getChatHandler().fixStyling(event.message, siblings); } } diff --git a/src/main/java/club/sk1er/hytilities/util/locraw/LocrawUtil.java b/src/main/java/club/sk1er/hytilities/util/locraw/LocrawUtil.java index a362cb6e..af331819 100644 --- a/src/main/java/club/sk1er/hytilities/util/locraw/LocrawUtil.java +++ b/src/main/java/club/sk1er/hytilities/util/locraw/LocrawUtil.java @@ -56,6 +56,7 @@ public void onWorldLoad(WorldEvent.Load event) { tick = 0; } + @SuppressWarnings("UnusedReturnValue") public String onMessageSend(@NotNull String message) { if (message.startsWith("/locraw") && !this.listening) { this.playerSentCommand = true;