feat: highlight player names in chat with LuckPerms colors
This commit is contained in:
@@ -12,6 +12,7 @@ import net.minecraft.server.level.ServerPlayer;
|
|||||||
import org.examp.john.stealth.StealthStorage;
|
import org.examp.john.stealth.StealthStorage;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ChatHandler {
|
public class ChatHandler {
|
||||||
@@ -30,7 +31,8 @@ public class ChatHandler {
|
|||||||
String actualMessage = text.substring(1).trim();
|
String actualMessage = text.substring(1).trim();
|
||||||
Component globalMessage = Component.empty()
|
Component globalMessage = Component.empty()
|
||||||
.append(formattedName)
|
.append(formattedName)
|
||||||
.append(Component.literal(": " + actualMessage));
|
.append(Component.literal(": "))
|
||||||
|
.append(buildMentionMessage(actualMessage, players));
|
||||||
|
|
||||||
for (ServerPlayer player : players) {
|
for (ServerPlayer player : players) {
|
||||||
player.sendSystemMessage(globalMessage);
|
player.sendSystemMessage(globalMessage);
|
||||||
@@ -62,7 +64,8 @@ public class ChatHandler {
|
|||||||
if (!hearers.isEmpty()) {
|
if (!hearers.isEmpty()) {
|
||||||
Component localMessage = Component.empty()
|
Component localMessage = Component.empty()
|
||||||
.append(formattedName)
|
.append(formattedName)
|
||||||
.append(Component.literal(": " + text).withStyle(ChatFormatting.GRAY));
|
.append(Component.literal(": ").withStyle(ChatFormatting.GRAY))
|
||||||
|
.append(buildMentionMessage(text, players).withStyle(ChatFormatting.GRAY));
|
||||||
|
|
||||||
sender.sendSystemMessage(localMessage);
|
sender.sendSystemMessage(localMessage);
|
||||||
for (ServerPlayer hearer : hearers) {
|
for (ServerPlayer hearer : hearers) {
|
||||||
@@ -84,6 +87,58 @@ public class ChatHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static MutableComponent buildMentionMessage(String text, List<ServerPlayer> onlinePlayers) {
|
||||||
|
List<ServerPlayer> sorted = onlinePlayers.stream()
|
||||||
|
.sorted(Comparator.comparingInt((ServerPlayer p) -> p.getName().getString().length()).reversed())
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
MutableComponent result = Component.empty();
|
||||||
|
String remaining = text;
|
||||||
|
|
||||||
|
while (!remaining.isEmpty()) {
|
||||||
|
int earliestIndex = remaining.length();
|
||||||
|
ServerPlayer mentioned = null;
|
||||||
|
|
||||||
|
for (ServerPlayer player : sorted) {
|
||||||
|
String name = player.getName().getString();
|
||||||
|
int index = remaining.toLowerCase().indexOf(name.toLowerCase());
|
||||||
|
if (index >= 0 && index < earliestIndex) {
|
||||||
|
earliestIndex = index;
|
||||||
|
mentioned = player;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mentioned == null) {
|
||||||
|
result.append(Component.literal(remaining));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (earliestIndex > 0) {
|
||||||
|
result.append(Component.literal(remaining.substring(0, earliestIndex)));
|
||||||
|
}
|
||||||
|
|
||||||
|
result.append(createMentionComponent(mentioned));
|
||||||
|
|
||||||
|
remaining = remaining.substring(earliestIndex + mentioned.getName().getString().length());
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Component createMentionComponent(ServerPlayer player) {
|
||||||
|
String prefix = getLuckPermsPrefix(player);
|
||||||
|
String formattedPrefix = prefix.replace("&", "\u00a7");
|
||||||
|
String name = player.getName().getString();
|
||||||
|
|
||||||
|
return Component.literal(formattedPrefix + name)
|
||||||
|
.withStyle(Style.EMPTY
|
||||||
|
.withClickEvent(new ClickEvent.SuggestCommand("/msg " + name + " "))
|
||||||
|
.withHoverEvent(new HoverEvent.ShowText(
|
||||||
|
Component.literal("Натисніть щоб написати " + name)
|
||||||
|
.withStyle(ChatFormatting.GRAY)))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private static MutableComponent buildFormattedName(ServerPlayer player) {
|
private static MutableComponent buildFormattedName(ServerPlayer player) {
|
||||||
String prefix = "";
|
String prefix = "";
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,gi
|
||||||
"id": "msnexus",
|
"id": "msnexus",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"name": "msnexus",
|
"name": "msnexus",
|
||||||
|
|||||||
Reference in New Issue
Block a user