Я пишу плагин суть которого это цензура в чате для тех кто включил её.
Допустим я написал банворд и для игрока A он без цензуры а для игрока Б который включил режим заменяется на ***
И я столкнулся с проблемой как редакировать сообщение только для некоторых игроков? и именно редактировать а не отменять событие чата и потом отправлять от имени серерва т.к. другие плагины такие как Chatty перестанут видеть в этом сообщение да и перестанет логироваться. Я попытался сделать через ProtocolLib но не получилось т.к. нужная мне функция возвращает NULL и работатет неправильно
protocolManager = ProtocolLibrary.getProtocolManager();
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.HIGHEST, PacketType.Play.Server.CHAT) {
@Override
public void onPacketSending(PacketEvent event) {
logger.info("Пакет получен прохолим проверку");
if (event.getPlayer() == null || !event.getPlayer().isOnline())
return;
if (!event.getPlayer().hasPermission("nbw.filter") || !event.getPlayer().hasPermission("nbw.auto")){
return;
}
logger.info("Проверки пройдены!");
final StructureModifier<WrappedChatComponent> chatComponents = event.getPacket().getChatComponents(); //Тут блять это нахуй ебаный в рот не возвращает ничего нахуй, если у сообщения нет "особых тегов" типо фиолетовой окраски хз
// Я не ебу как поправить код сверху
logger.info("Получаем chatComponents: " + event.getPacket().getChatComponents());
for (WrappedChatComponent component : chatComponents.getValues()) {
logger.info("FOR - Стартует");
if (component == null){
logger.info("component = null");
continue;
}
logger.info("Првоерку мировали, дальше построчноажу");
//component.setJson(component.getJson().replace("#star#", "☆"));
String lowercaseMessage = component.getJson().toLowerCase();
logger.info("lowcasemess усепх");
String end = component.getJson();
logger.info("lm = " + lowercaseMessage + "\n\nEnd: " + end);
event.getPlayer().sendMessage(end);
for (String bannedWord : bannedWords) {
logger.info("GG");
String lowercaseBannedWord = bannedWord.toLowerCase();
if (lowercaseMessage.contains(lowercaseBannedWord)) {
end = end.replaceAll(bannedWord, "*".repeat(bannedWord.length()));
}
}
component.setJson(end);
logger.info("END: " + end);
}
}
Извините за грязь в коде я пытался выяснить в чём прикол, проблема в строке
final StructureModifier<WrappedChatComponent> chatComponents = event.getPacket().getChatComponents();
Есть ли другие способы отредактировать сообщение и только для некоторых игроков