Задать вопрос
Tokishu
@Tokishu
Что?

Как отредактировать сообщение игрока на сервере Minecraft с помощью Java только для некоторых?

Я пишу плагин суть которого это цензура в чате для тех кто включил её.
Допустим я написал банворд и для игрока 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();


Есть ли другие способы отредактировать сообщение и только для некоторых игроков
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Dementor
программист, архитектор, аналитик
Не знаю какие там особенности в майнкрафте, но с концептуальной точки зрения вообще нет никаких проблем:
1) хранить в базе реальные исходные сообщения без редактирования
2) при формировании сообщения для игрока учитывать настройки цензуры.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект