Помогите Перезагрузить entity на клиенте

  • Автор темы Автор темы Dymeth
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Dymeth

Активный участник
Пользователь
Баллы
98
Имя в Minecraft
Dymeth
Здравствуйте.

Задача следующая:
Имеется последний билд спигота. Нужно в произвольный момент времени повторно отправить на клиент всех мобов, которые должны быть отображены при нормальных обстоятельствах. Точнее цель даже не в том, чтобы энтити заспаунились на клиенте, а в том, чтобы сформировать пакеты спауна и затем обработать хендлером пакетов (конкретно у меня ProtocolLib, но не суть). Зачем это нужно - сказать не могу (секретики), но, возможно, сами догадаетесь.

В данный момент я просто телепортирую игрока подальше от текущего места, а потом обратно. Но, сами понимаете, очень костыльное и кривое решение.
В идеале сделать так, чтобы нагрузка на сервер была минимальной - не формировались бы пакеты чанков и прочего.

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

Кстати записывать всех энтити сразу при заходе игрока тоже нельзя, поскольку по ходу игры список мобов на клиенте, как вы понимаете, меняется. И всё это отследить тупо невозможно, потому что клиент сам при некоторых обстоятельствах удаляет энтити у себя - без пакета EntityDestroy.
Да и памяти такое решение может требовать прилично - придется хранить всех мобов для всех игроков на сервере.

Возможно кто-то уже делал подобное? Ну, либо можете предложить альтернативные решения.
Лично я пробовал выгружать и загружать чанки баккитом, но даже это не помогло - в новых версиях булин safe просто игнорируется (по-умолчанию false), а соответственно чанки не выгружались.

Спасибо.

UPD: Уже нашёл нужный код в ядре и частично переписал под баккит. Остальное закостылил тонной рефлексии. Код привести не могу. Лишь скажу, что нужные участки находятся в нмс-классах EntityTracker и EntityTrackerEntry.
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх