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

[Обсудим] Совместимость Scoreboard & Teams

Тема в разделе "Разработка плагинов для новичков", создана пользователем Bars, 6 фев 2015.

  1. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Как сделать совместимость между бордами и кастомными тимами?

    Вступление

    Например есть плагин NametagEdit: он позволяет добавлять префиксы в табе и над головой, и при этом полностью работает на пакетах. Кастомным тимам присваиваются имена "NTE#", где # - номер от нуля и до (кол-во префиксов - 1) (NTE0, NTE1, ..., NTEn), а префикс (по крайней мере у меня) выглядит в таком формате: мой кастомный префикс + реальный префикс из текущей тимы игрока.

    Получается
    Админ Bars
    При том, что кастомный префикс "&4Админ ", а реальный префикс "&6" (если таковой вообще имеется).

    Но стоит поставить любой плагин на борды, как всё сыпется. Например, HealthBar при изменении здоровья игрока крашит все клиенты других игроков.

    Теперь к делу

    Так как NametagEdit работает на пакетах, то по сути он должен наоборот работать в режиме "фулл-компатибл" в отличие от реальных тим, как это реализовано в ColoredTags. Я его переписал под ProtocolLib и при помощи этого могу отлавливать и передаваемые пакеты тим, попутно их изменяя.
    Так вот, как сделать совместимость?
     
  2. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Понять где каждый из плагинов шлет изменения
    Отменить это
    Скомбинировать инфу
    Поставить.

    Если есть евентлистенеры, например на коннект - все просто, отрегистрируйте их.
    А лучше просто напишите весь функционал сами а не лепите что-то из чего-то.
     
  3. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А на каком основании? Если крашится клиент, то какая разница, что сделано на сервере? При использовании апи в конечном счёте получится та же самая отправка пакетов клиенту. И более того, плагин не учитывает того, что клиент уже может иметь какие-то борды, и отправляет новую, тем самым краша его. Если не понимаете логику отображения борд, гляньте сорцы клиента, по ним очень легко будет понять. Таким образом, чтобы избежать крашей, нужно просто убрать борду, которая поставлена другим плагином, перед установкой от вашего.
     
  4. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Меня интересует создание гибрида при отправлении клиенту, в то время как на сервере они будут отображаться раздельно и несовместимо
     
  5. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    В каком смысле гибрид?
     
  6. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Две борды с их тимами, совмещённые в одну.
    [​IMG]
    Допустим у игрока уже имеется его Scoreboard (далее - табло) и он состоит в тиме ghosts (префикс &7). Мы берём это табло, создаём фейковое кастомное табло с фейковой тимой и префиксом &4[A].
    Потом соединяем реальную с фейковой кастомной при отправке клиенту и он видит тиму ghosts с префиксом &4[A]&7, в то время как на сервере реальная тима ghosts всё также имеет префикс &7, мы меняем (совмещаем префиксы) только при отправке клиенту.
    Есть идея при отправке реального пакета модифицировать его префикс на кастомный
    Не, не сработает. Ибо тима одна (например тот же ghosts), а префиксы у игроков разные. Можно тогда посылать чисто кастомную тиму NTE0, но из-за этого не будут работать всякие friendly invisible false...
    @Shevchik
    Да ну, люди ж как-то делают...
     
  7. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Делают всё просто, пишется один плагин который управляет всеми фичами скоребоарда.
    Заставить несколько плагинов работать друг с другом почти нереально.
     
  8. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Хотя с другой стороны ghost'ам можно не отсылать пакет с кастомными тимами, тогда у них будет работать friendly invisibles, но не будет кастомных префиксов, а так как они ghost'ы временно (только в режиме наблюдателя), то им в этом режиме не обязательно видеть всякие кастомные префиксы. Окей, так и сделаю
    Единственное - у самого игрока его префикс виден не будет (только кастомный).
    Кажется придумал.
    1. Надо перед отправкой тим игроку фейково (пакетами) зарегать все эти тимы в его борде
    2. if (!fakeTeam.getFriendlyInvisibles() && !playerTeam.getFriendlyInvisibles()) соединяем кастомный префикс с реальным и отправляем игроку пакеты с фейковыми тимами полученными в первом пункте;
     
    Последнее редактирование: 7 фев 2015

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