feat: add LuckPerms support to chat handler

This commit is contained in:
2026-08-09 15:28:32 +02:00
parent 4de15842e7
commit 896ec668eb
6 changed files with 106 additions and 14 deletions
+32 -9
View File
@@ -1,19 +1,23 @@
package org.examp.john;
import net.fabricmc.fabric.api.message.v1.ServerMessageEvents;
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.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import java.util.List;
public class ChatHandler {
public static void register() {
public static void register() {
final String prefix = "!";
final float LOCAL_CHAT_RADIUS = 50;
final float LOCAL_CHAT_RADIUS = 100;
ServerMessageEvents.ALLOW_CHAT_MESSAGE.register((message, sender, params) -> {
String text = message.signedContent();
@@ -21,20 +25,39 @@ public class ChatHandler {
ServerLevel serverLevel = sender.level();
MinecraftServer server = serverLevel.getServer();
List<ServerPlayer> players = server.getPlayerList().getPlayers();
String nickmane = sender.getDisplayName().getString();
if (text.startsWith(prefix)) {
String playerPrefix = "";
try {
LuckPerms luckPerms = LuckPermsProvider.get();
User user = luckPerms.getUserManager().getUser(sender.getUUID());
if (user != null) {
String metaPrefix = user.getCachedData().getMetaData().getPrefix();
if (metaPrefix != null) {
playerPrefix = metaPrefix;
}
}
} catch (Throwable ignored) {
}
MutableComponent formattedPrefix = Component.literal(playerPrefix.replace("&", "§"));
MutableComponent formattedName = Component.empty()
.append(formattedPrefix)
.append(sender.getDisplayName());
if (text.startsWith(prefix)) {
String actualMessage = text.substring(1).trim();
Component globalMessage = Component.literal(nickmane + ": " + actualMessage);
Component globalMessage = Component.empty()
.append(formattedName)
.append(Component.literal(": " + actualMessage));
for (ServerPlayer player : players) {
player.sendSystemMessage(globalMessage);
}
} else {
Component localMessage = Component.literal(nickmane + ": ")
.append(Component.literal(text)).withStyle(ChatFormatting.GRAY);
Component localMessage = Component.empty()
.append(formattedName)
.append(Component.literal(": " + text).withStyle(ChatFormatting.GRAY));
for (ServerPlayer player : players) {
if (player.level() == serverLevel && player.distanceTo(sender) <= LOCAL_CHAT_RADIUS) {
+1 -1
View File
@@ -13,4 +13,4 @@ public class Localchat implements ModInitializer {
// Тепер ChatHandler викликається з того ж пакета без помилок імпорту
ChatHandler.register();
}
}
}