diff --git a/common/src/main/java/com/ebicep/chatplus/mixin/MixinChatComponent.java b/common/src/main/java/com/ebicep/chatplus/mixin/MixinChatComponent.java index c58b2812..a32af8ad 100644 --- a/common/src/main/java/com/ebicep/chatplus/mixin/MixinChatComponent.java +++ b/common/src/main/java/com/ebicep/chatplus/mixin/MixinChatComponent.java @@ -19,6 +19,8 @@ import net.minecraft.network.chat.MessageSignature; import net.minecraft.util.profiling.Profiler; import net.minecraft.util.profiling.ProfilerFiller; +import org.jspecify.annotations.Nullable; +import org.slf4j.Logger; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -36,6 +38,10 @@ public class MixinChatComponent { @Shadow Minecraft minecraft; + @Shadow + @Final + private static Logger LOGGER; + @Inject(method = "render(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/gui/Font;IIIZZ)V", at = @At("HEAD"), cancellable = true) public void render(GuiGraphics guiGraphics, Font font, int i, int j, int k, boolean bl, boolean bl2, CallbackInfo ci) { if (!ChatPlus.INSTANCE.isEnabled() || (Config.INSTANCE.getValues().getShowVanillaWhenUnfocused() && !ChatManager.INSTANCE.isChatFocused())) { @@ -110,5 +116,14 @@ public void addMessage( EventBus.INSTANCE.post(SkipNewMessageEvent.class, messageEvent); } } + @Inject(method = "deleteMessage(Lnet/minecraft/network/chat/MessageSignature;)V", at = @At("RETURN")) + public void deleteMessage(MessageSignature messageSignature, CallbackInfo ci) { + if (!ChatPlus.INSTANCE.isEnabled()) { + return; + } + for (ChatTab chatTab : ChatManager.INSTANCE.getGlobalSortedTabs()) { + chatTab.deleteMessage(messageSignature); + } + } } diff --git a/common/src/main/kotlin/com/ebicep/chatplus/features/chattabs/ChatTab.kt b/common/src/main/kotlin/com/ebicep/chatplus/features/chattabs/ChatTab.kt index e46de313..03a19259 100644 --- a/common/src/main/kotlin/com/ebicep/chatplus/features/chattabs/ChatTab.kt +++ b/common/src/main/kotlin/com/ebicep/chatplus/features/chattabs/ChatTab.kt @@ -397,6 +397,28 @@ class ChatTab { return added } + fun deleteMessage(signature: MessageSignature) { + val messageIndex = messages.indexOfFirst { it.guiMessage.signature == signature } + if (messageIndex == -1) return + + val message = messages.removeAt(messageIndex) + EventBus.post(ChatTabRemoveMessageEvent(chatWindow, this, message)) + + displayedMessages.removeIf { + val match = it.linkedMessage === message + if (match) { + EventBus.post(ChatTabRemoveDisplayMessageEvent(chatWindow, this, it)) + } + match + } + + unfilteredDisplayedMessages.removeIf { + it.linkedMessage === message + } + + refreshDisplayMessages() + } + fun clear() { messages = ArrayList() displayedMessages = ArrayList() diff --git a/gradle.properties b/gradle.properties index d7f61524..56721231 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ supported_minecraft_version=1.21.11 enabled_platforms=fabric,neoforge archives_base_name=chatplus mod_id=chatplus -mod_version=2.7.1 +mod_version=2.7.2 mod_name=ChatPlus mod_description=Minecraft chat improved. mod_authors=ebicep