From 3d399dd10a6cb3b2b6d121f5d2608fa798b6234d Mon Sep 17 00:00:00 2001 From: HarvelsX <90945793+HarvelsX@users.noreply.github.com> Date: Sun, 12 Jul 2026 16:19:34 +0300 Subject: [PATCH] fix: double quickPrefix replacement --- .../listeners/ChatListenerInternal.java | 14 +++++++++++++- .../common/users/WrappedCarbonPlayer.java | 19 +++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/common/src/main/java/net/draycia/carbon/common/listeners/ChatListenerInternal.java b/common/src/main/java/net/draycia/carbon/common/listeners/ChatListenerInternal.java index 7d354663c..69989755a 100644 --- a/common/src/main/java/net/draycia/carbon/common/listeners/ChatListenerInternal.java +++ b/common/src/main/java/net/draycia/carbon/common/listeners/ChatListenerInternal.java @@ -39,6 +39,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ComponentIteratorType; import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -65,7 +66,18 @@ protected ChatListenerInternal( final CarbonPlayer.ChannelMessage channelMessage = sender.channelForMessage(originalMessage); final ChatChannel channel = channelMessage.channel(); - return this.prepareAndEmitChatEvent(sender, channelMessage.message(), signedMessage, channel); + Component message = originalMessage; + + final String prefix = channel.quickPrefix(); + if (prefix != null) { + message = originalMessage.replaceText(TextReplacementConfig.builder() + .once() + .matchLiteral(prefix) + .replacement(Component.empty()) + .build()); + } + + return this.prepareAndEmitChatEvent(sender, message, signedMessage, channel); } protected @Nullable CarbonChatEventImpl prepareAndEmitChatEvent(final CarbonPlayer sender, final Component message, final @Nullable SignedMessage signedMessage, final ChatChannel channel) { diff --git a/common/src/main/java/net/draycia/carbon/common/users/WrappedCarbonPlayer.java b/common/src/main/java/net/draycia/carbon/common/users/WrappedCarbonPlayer.java index 0bcef21a0..48a3c341a 100644 --- a/common/src/main/java/net/draycia/carbon/common/users/WrappedCarbonPlayer.java +++ b/common/src/main/java/net/draycia/carbon/common/users/WrappedCarbonPlayer.java @@ -39,7 +39,6 @@ import net.kyori.adventure.identity.Identity; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -236,9 +235,6 @@ public UUID uuid() { @Override public ChannelMessage channelForMessage(final Component message) { final String text = PlainTextComponentSerializer.plainText().serialize(message); - Component formattedMessage = message; - - ChatChannel channel = requireNonNullElse(this.selectedChannel(), this.carbonPlayerCommon.channelRegistry().defaultChannel()); for (final Key channelKey : this.carbonPlayerCommon.channelRegistry().keys()) { final ChatChannel chatChannel = this.carbonPlayerCommon.channelRegistry().channelOrThrow(channelKey); @@ -249,17 +245,16 @@ public ChannelMessage channelForMessage(final Component message) { } if (text.startsWith(prefix) && chatChannel.permissions().speechPermitted(this).permitted()) { - channel = chatChannel; - formattedMessage = formattedMessage.replaceText(TextReplacementConfig.builder() - .once() - .matchLiteral(channel.quickPrefix()) - .replacement(Component.empty()) - .build()); - break; + return new ChannelMessage(message, chatChannel); } } - return new ChannelMessage(formattedMessage, channel); + return new ChannelMessage(message, + requireNonNullElse( + this.selectedChannel(), + this.carbonPlayerCommon.channelRegistry().defaultChannel() + ) + ); } @Override