Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Bars

Старожил
Девелопер
Пользователь
Баллы
173
Как сделать совместимость между бордами и кастомными тимами?

Вступление​

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

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

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

Теперь к делу​

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

Если есть евентлистенеры, например на коннект - все просто, отрегистрируйте их.
А лучше просто напишите весь функционал сами а не лепите что-то из чего-то.
 
Так как NametagEdit работает на пакетах, то по сути он должен наоборот работать в режиме "фулл-компатибл" в отличие от реальных тим, как это реализовано в ColoredTags.
А на каком основании? Если крашится клиент, то какая разница, что сделано на сервере? При использовании апи в конечном счёте получится та же самая отправка пакетов клиенту. И более того, плагин не учитывает того, что клиент уже может иметь какие-то борды, и отправляет новую, тем самым краша его. Если не понимаете логику отображения борд, гляньте сорцы клиента, по ним очень легко будет понять. Таким образом, чтобы избежать крашей, нужно просто убрать борду, которая поставлена другим плагином, перед установкой от вашего.
 
А на каком основании? Если крашится клиент, то какая разница, что сделано на сервере? При использовании апи в конечном счёте получится та же самая отправка пакетов клиенту. И более того, плагин не учитывает того, что клиент уже может иметь какие-то борды, и отправляет новую, тем самым краша его. Если не понимаете логику отображения борд, гляньте сорцы клиента, по ним очень легко будет понять. Таким образом, чтобы избежать крашей, нужно просто убрать борду, которая поставлена другим плагином, перед установкой от вашего.
Меня интересует создание гибрида при отправлении клиенту, в то время как на сервере они будут отображаться раздельно и несовместимо
 
В каком смысле гибрид?
Две борды с их тимами, совмещённые в одну.
4guhgieaye3p.png

Допустим у игрока уже имеется его Scoreboard (далее - табло) и он состоит в тиме ghosts (префикс &7). Мы берём это табло, создаём фейковое кастомное табло с фейковой тимой и префиксом &4[A].
Потом соединяем реальную с фейковой кастомной при отправке клиенту и он видит тиму ghosts с префиксом &4[A]&7, в то время как на сервере реальная тима ghosts всё также имеет префикс &7, мы меняем (совмещаем префиксы) только при отправке клиенту.
Есть идея при отправке реального пакета модифицировать его префикс на кастомный
Не, не сработает. Ибо тима одна (например тот же ghosts), а префиксы у игроков разные. Можно тогда посылать чисто кастомную тиму NTE0, но из-за этого не будут работать всякие friendly invisible false...
@Shevchik
Да ну, люди ж как-то делают...
 
Делают всё просто, пишется один плагин который управляет всеми фичами скоребоарда.
Заставить несколько плагинов работать друг с другом почти нереально.
 
Хотя с другой стороны ghost'ам можно не отсылать пакет с кастомными тимами, тогда у них будет работать friendly invisibles, но не будет кастомных префиксов, а так как они ghost'ы временно (только в режиме наблюдателя), то им в этом режиме не обязательно видеть всякие кастомные префиксы. Окей, так и сделаю
Единственное - у самого игрока его префикс виден не будет (только кастомный).
Кажется придумал.
1. Надо перед отправкой тим игроку фейково (пакетами) зарегать все эти тимы в его борде
2. if (!fakeTeam.getFriendlyInvisibles() && !playerTeam.getFriendlyInvisibles()) соединяем кастомный префикс с реальным и отправляем игроку пакеты с фейковыми тимами полученными в первом пункте;
 
Последнее редактирование:

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

Назад
Верх