1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Protocollib - получение сообщения

Тема в разделе "Разработка плагинов для новичков", создана пользователем Andrine, 14 дек 2022.

Метки:
  1. Автор темы
    Andrine

    Andrine Активный участник Пользователь

    Баллы:
    66
    Как можно получить сообщение, отправленное игроку плагином? Дайте готовый код, я просмотрел весь интернет, всё что там есть, вызывает ошибки. Мне нужно проверить строку на наличие определенного сообщения и отменить event или удалить ее.
     
  2. Автор темы
    Andrine

    Andrine Активный участник Пользователь

    Баллы:
    66
  3. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Не стоит так часто апать темы. Во-первых, в этом смысла нет. Во-вторых, это запрещено правилами.

    Готовый код никто не даст, это всё не так просто делается. Если хочешь готовый код - плати разработчику и заказывай готовый плагин.
    Расскажу алгоритм действий, но разобраться с реализацией тебя придётся самостоятельно.

    Тебе необходимо в протоколлиб добавить обработчик пакета PacketType.Play.Server.SYSTEM_CHAT или PacketType.Play.Server.CHAT в зависимости от типа сообщения. Если не ошибаюсь, на более ранних версиях оба вида сообщения отправлялись одинаковым пакетом.

    Если работаешь с SYSTEM_CHAT, то, скорее всего, нужно будет поверить тип сообщения. Получить тип можно так: event.getContainer().getChatTypes().read(0)

    Далее получаешь содержимое сообщения:
    либо this.container.getChatComponents().read(0)
    либо this.container.getChatComponentArrays().read(0)

    После этого анализируешь каждый компонент в цикле. Если он текстовый (instanceof), то получаешь его содержимое и проверяешь наличие нужного текста в нём. Если это нужный компонент - пересоздаешь текстовый компонент и заменяешь в контейнете пакета старый компонент на новый.

    На более старых версиях вместо компонентов будут строки (либо в виде json, либо в виде plain-текста)
     
    Последнее редактирование: 14 дек 2022

Поделиться этой страницей