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();


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

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

Войти через центр авторизации
Похожие вопросы