fix: repair chat code and add **text** italic formatting to chat
This commit is contained in:
@@ -65,7 +65,7 @@ public class AntiAbuse {
|
||||
double spread = Math.max(b[1] - b[0], b[3] - b[2]);
|
||||
|
||||
if (spread > DISTANCE_THRESHOLD) {
|
||||
Localchat.magicModLog.warn(
|
||||
MSNexus.magicModLog.warn(
|
||||
"[ANTI-ABUSE] Гравець {} ймовірно шукає інших: "
|
||||
+ "'{}' ×{} разів, переміщення ~{} блоків",
|
||||
player.getName().getString(),
|
||||
|
||||
@@ -5,8 +5,11 @@ import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.LuckPermsProvider;
|
||||
import net.luckperms.api.model.user.User;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.network.chat.ClickEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.HoverEvent;
|
||||
import net.minecraft.network.chat.MutableComponent;
|
||||
import net.minecraft.network.chat.Style;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import org.examp.john.stealth.StealthStorage;
|
||||
@@ -32,7 +35,7 @@ public class ChatHandler {
|
||||
Component globalMessage = Component.empty()
|
||||
.append(formattedName)
|
||||
.append(Component.literal(": "))
|
||||
.append(buildMentionMessage(actualMessage, players));
|
||||
.append(buildFormattedMessage(actualMessage, players));
|
||||
|
||||
for (ServerPlayer player : players) {
|
||||
player.sendSystemMessage(globalMessage);
|
||||
@@ -65,7 +68,7 @@ public class ChatHandler {
|
||||
Component localMessage = Component.empty()
|
||||
.append(formattedName)
|
||||
.append(Component.literal(": ").withStyle(ChatFormatting.GRAY))
|
||||
.append(buildMentionMessage(text, players).withStyle(ChatFormatting.GRAY));
|
||||
.append(buildFormattedMessage(text, players).withStyle(ChatFormatting.GRAY));
|
||||
|
||||
sender.sendSystemMessage(localMessage);
|
||||
for (ServerPlayer hearer : hearers) {
|
||||
@@ -87,6 +90,38 @@ public class ChatHandler {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Парсить текст між ** і робить його курсивом, поєднуючи з підсвіткою згадок гравців.
|
||||
* Приклад: "привіт **світе** як справи?" -> "привіт [курсив]світе[/курсив] як справи?"
|
||||
*/
|
||||
private static MutableComponent buildFormattedMessage(String text, List<ServerPlayer> players) {
|
||||
MutableComponent result = Component.empty();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
boolean italic = false;
|
||||
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
if (i + 1 < text.length() && text.charAt(i) == '*' && text.charAt(i + 1) == '*') {
|
||||
appendFormattedSegment(result, buffer.toString(), players, italic);
|
||||
buffer.setLength(0);
|
||||
italic = !italic;
|
||||
i++;
|
||||
} else {
|
||||
buffer.append(text.charAt(i));
|
||||
}
|
||||
}
|
||||
appendFormattedSegment(result, buffer.toString(), players, italic);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void appendFormattedSegment(MutableComponent result, String segment, List<ServerPlayer> players, boolean italic) {
|
||||
MutableComponent parsed = buildMentionMessage(segment, players);
|
||||
if (italic) {
|
||||
parsed.withStyle(Style.EMPTY.withItalic(true));
|
||||
}
|
||||
result.append(parsed);
|
||||
}
|
||||
|
||||
private static MutableComponent buildMentionMessage(String text, List<ServerPlayer> onlinePlayers) {
|
||||
List<ServerPlayer> sorted = onlinePlayers.stream()
|
||||
.sorted(Comparator.comparingInt((ServerPlayer p) -> p.getName().getString().length()).reversed())
|
||||
@@ -139,6 +174,21 @@ public class ChatHandler {
|
||||
);
|
||||
}
|
||||
|
||||
private static String getLuckPermsPrefix(ServerPlayer player) {
|
||||
try {
|
||||
LuckPerms luckPerms = LuckPermsProvider.get();
|
||||
User user = luckPerms.getUserManager().getUser(player.getUUID());
|
||||
if (user != null) {
|
||||
String metaPrefix = user.getCachedData().getMetaData().getPrefix();
|
||||
if (metaPrefix != null) {
|
||||
return metaPrefix;
|
||||
}
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private static MutableComponent buildFormattedName(ServerPlayer player) {
|
||||
String prefix = "";
|
||||
try {
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.examp.john.stealth;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import org.examp.john.Localchat;
|
||||
import org.examp.john.MSNexus;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
@@ -45,7 +45,7 @@ public class StealthStorage {
|
||||
}
|
||||
}
|
||||
} catch (IOException | JsonSyntaxException | IllegalArgumentException e) {
|
||||
Localchat.magicModLog.warn("Не вдалося прочитати stealth.json: {}", e.getMessage());
|
||||
MSNexus.magicModLog.warn("Не вдалося прочитати stealth.json: {}", e.getMessage());
|
||||
data = new HashMap<>();
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ public class StealthStorage {
|
||||
GSON.toJson(raw, writer);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Localchat.magicModLog.error("Не вдалося зберегти stealth.json: {}", e.getMessage());
|
||||
MSNexus.magicModLog.error("Не вдалося зберегти stealth.json: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user