forked from SteamWar/SteamWar
Suggest /team info when clicking a team prefix
Clicking the team prefix in the global/local chat or an event team prefix in the fight chat puts /team info <shorthand> into the chat input; the hover explains the click.
This commit is contained in:
@@ -575,7 +575,7 @@ CHAT_EMPTY = §cDon\'t write meaningless empty messages.
|
||||
|
||||
CHAT_SERVERTEAM_SENDER = §e{0}
|
||||
CHAT_SERVERTEAM = §8» §f{2}
|
||||
CHAT_GLOBAL_SENDER = {3}{4}{5}{6}{0}
|
||||
CHAT_GLOBAL_SENDER = {4}{5}{6}{0}
|
||||
CHAT_GLOBAL = §8» {7}{2}
|
||||
CHAT_TEAM_SENDER = §e{0}
|
||||
CHAT_TEAM = §8» §f{2}
|
||||
@@ -593,6 +593,7 @@ CHAT_FIGHT_REFEREE = §8» §e{0}
|
||||
CHAT_FIGHT_TEAM = §8» §f{0}
|
||||
CHAT_ICON = {0}{1}
|
||||
CHAT_HOVER_TEAM = §7Team: §e{0}\n§7Prefix: §r{1}{2}
|
||||
CHAT_HOVER_TEAM_CLICK = §7Team: §e{0}\n§7Prefix: §r{1}{2}\n§8Click to insert §7/team info
|
||||
CHAT_HOVER_LOCAL = {0}\n§7Server: §e{1}
|
||||
CHAT_ICON_GLOBAL = 🌍
|
||||
CHAT_ICON_LOCAL = ⌂
|
||||
|
||||
@@ -540,7 +540,7 @@ CHAT_EMPTY = §cSchreibe keine inhaltslosen Nachrichten.
|
||||
|
||||
CHAT_SERVERTEAM_SENDER = §e{0}
|
||||
CHAT_SERVERTEAM = §8» §f{2}
|
||||
CHAT_GLOBAL_SENDER = {3}{4}{5}{6}{0}
|
||||
CHAT_GLOBAL_SENDER = {4}{5}{6}{0}
|
||||
CHAT_GLOBAL = §8» {7}{2}
|
||||
CHAT_TEAM_SENDER = §e{0}
|
||||
CHAT_TEAM = §8» §f{2}
|
||||
@@ -558,6 +558,7 @@ CHAT_FIGHT_REFEREE = §8» §e{0}
|
||||
CHAT_FIGHT_TEAM = §8» §f{0}
|
||||
CHAT_ICON = {0}{1}
|
||||
CHAT_HOVER_TEAM = §7Team: §e{0}\n§7Kürzel: §r{1}{2}
|
||||
CHAT_HOVER_TEAM_CLICK = §7Team: §e{0}\n§7Kürzel: §r{1}{2}\n§8Klicke, um §7/team info §8einzufügen
|
||||
CHAT_HOVER_LOCAL = {0}\n§7Server: §e{1}
|
||||
CHAT_ICON_GLOBAL = 🌍
|
||||
CHAT_ICON_LOCAL = ⌂
|
||||
|
||||
@@ -32,9 +32,11 @@ 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.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -42,6 +44,9 @@ public class ChatFormat {
|
||||
|
||||
private static final Pattern MENTION = Pattern.compile("@(\\w{1,16})");
|
||||
|
||||
// Formats that show the team prefix in front of the sender name
|
||||
private static final Set<String> TEAM_PREFIX_FORMATS = Set.of("CHAT_GLOBAL");
|
||||
|
||||
private ChatFormat() {}
|
||||
|
||||
/**
|
||||
@@ -52,12 +57,15 @@ public class ChatFormat {
|
||||
SteamwarUser user = sender.user();
|
||||
UserPerm.Prefix prefix = user.prefix();
|
||||
|
||||
String teamPrefix = "";
|
||||
if (user.hasPerm(UserPerm.TEAM) && useSwPrefix(user)) {
|
||||
teamPrefix = "§eS§8W ";
|
||||
// The team prefix is its own component, so that clicking it suggests /team info
|
||||
Component teamPrefix = Component.empty();
|
||||
if (TEAM_PREFIX_FORMATS.contains(format)) {
|
||||
if (useSwPrefix(user)) {
|
||||
teamPrefix = withTeamHover(receiver, user, Chatter.SERIALIZER.deserialize("§eS§8W")).append(Component.text(" "));
|
||||
} else if (user.getTeam() != 0) {
|
||||
Team team = Team.byId(user.getTeam());
|
||||
teamPrefix = "§" + team.getTeamColor() + team.getTeamKuerzel() + " ";
|
||||
teamPrefix = clickableTeam(receiver, team, Chatter.SERIALIZER.deserialize("§" + team.getTeamColor() + team.getTeamKuerzel())).append(Component.text(" "));
|
||||
}
|
||||
}
|
||||
|
||||
String chatColorCode = user.hasPerm(UserPerm.TEAM) ? "§f" : "§7";
|
||||
@@ -65,14 +73,14 @@ public class ChatFormat {
|
||||
user,
|
||||
msgReceiver == null ? receiver : msgReceiver,
|
||||
highlightMentions(message, chatColorCode, receiver),
|
||||
teamPrefix,
|
||||
"",
|
||||
"",
|
||||
prefix == UserPerm.emptyPrefix ? "§f" : prefix.getColorCode(),
|
||||
prefix.getChatPrefix().length() == 0 ? "§f" : prefix.getChatPrefix() + " ",
|
||||
chatColorCode};
|
||||
|
||||
Component senderPart = withTeamHover(receiver, user, receiver.parse(new Message(format + "_SENDER", params)));
|
||||
return Component.text().append(senderPart).append(receiver.parse(new Message(format, params))).build();
|
||||
return Component.text().append(teamPrefix).append(senderPart).append(receiver.parse(new Message(format, params))).build();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,7 +95,7 @@ public class ChatFormat {
|
||||
Component team = Chatter.SERIALIZER.deserialize(coloredTeamName);
|
||||
Team eventTeam = ChatManager.eventTeam(server, coloredTeamName);
|
||||
if (eventTeam != null) {
|
||||
team = team.hoverEvent(HoverEvent.showText(teamHover(receiver, eventTeam)));
|
||||
team = clickableTeam(receiver, eventTeam, team);
|
||||
}
|
||||
line.append(team).append(Component.text(" "));
|
||||
nameColor = coloredTeamName.length() >= 2 && coloredTeamName.charAt(0) == '§' ? coloredTeamName.substring(0, 2) : "";
|
||||
@@ -110,6 +118,15 @@ public class ChatFormat {
|
||||
return component.hoverEvent(HoverEvent.showText(teamHover(receiver, Team.byId(user.getTeam()))));
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows the team on hover and suggests {@code /team info} for it on click.
|
||||
*/
|
||||
private static Component clickableTeam(Chatter receiver, Team team, Component component) {
|
||||
return component
|
||||
.hoverEvent(HoverEvent.showText(receiver.parse(new Message("CHAT_HOVER_TEAM_CLICK", team.getTeamName(), "§" + team.getTeamColor(), team.getTeamKuerzel()))))
|
||||
.clickEvent(ClickEvent.suggestCommand("/team info " + team.getTeamKuerzel()));
|
||||
}
|
||||
|
||||
private static Component teamHover(Chatter receiver, Team team) {
|
||||
return receiver.parse(new Message("CHAT_HOVER_TEAM", team.getTeamName(), "§" + team.getTeamColor(), team.getTeamKuerzel()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user