From 39cacbd701377984e9489fcbeb03ed38359a5a00 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Fri, 16 Oct 2026 10:53:01 +0200 Subject: [PATCH] Show team on hover for @name mentions --- .../steamwar/velocitycore/chat/ChatChannel.java | 2 +- .../steamwar/velocitycore/chat/ChatFormat.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/VelocityCore/src/de/steamwar/velocitycore/chat/ChatChannel.java b/VelocityCore/src/de/steamwar/velocitycore/chat/ChatChannel.java index 51ccc0d2..4bc9d919 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/chat/ChatChannel.java +++ b/VelocityCore/src/de/steamwar/velocitycore/chat/ChatChannel.java @@ -129,7 +129,7 @@ public abstract class ChatChannel { for (Chatter receiver : receivers.values()) { if (!receiver.chatShown()) continue; - Component msg = format(receiver, sender, coloredMessage); + Component msg = ChatFormat.withMentionHovers(receiver, format(receiver, sender, coloredMessage)); if (icon(receiver) != null) { Component icon = iconComponent(receiver, ChatManager.getDefault(receiver) == this ? "§e" : "§7"); msg = Component.text().append(icon).append(Component.text(" ")).append(msg).build(); diff --git a/VelocityCore/src/de/steamwar/velocitycore/chat/ChatFormat.java b/VelocityCore/src/de/steamwar/velocitycore/chat/ChatFormat.java index f5b945dc..8f4a477e 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/chat/ChatFormat.java +++ b/VelocityCore/src/de/steamwar/velocitycore/chat/ChatFormat.java @@ -31,13 +31,17 @@ import de.steamwar.velocitycore.network.NetworkSender; import de.steamwar.velocitycore.util.SteamwarPrefix; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.event.HoverEvent; import java.util.Arrays; +import java.util.regex.Pattern; import java.util.stream.Collectors; public class ChatFormat { + private static final Pattern MENTION = Pattern.compile("@(\\w{1,16})"); + private ChatFormat() {} /** @@ -126,6 +130,19 @@ public class ChatFormat { return SteamwarPrefix.usesSWPrefix(user); } + /** + * Shows the team of every mentioned player ({@code @name}) on hover, like at the sender name. + */ + public static Component withMentionHovers(Chatter receiver, Component component) { + return component.replaceText(TextReplacementConfig.builder() + .match(MENTION) + .replacement((match, builder) -> { + SteamwarUser user = SteamwarUser.get(match.group(1)); + return user == null ? builder : withTeamHover(receiver, user, builder.build()); + }) + .build()); + } + public static String highlightMentions(String message, String returnColor, Chatter player) { if (!message.contains("@")) return message;