- Баллы
- 98
- Имя в Minecraft
- Dymeth
Здравствуйте.
Задача следующая:
Имеется последний билд спигота. Нужно в произвольный момент времени повторно отправить на клиент всех мобов, которые должны быть отображены при нормальных обстоятельствах. Точнее цель даже не в том, чтобы энтити заспаунились на клиенте, а в том, чтобы сформировать пакеты спауна и затем обработать хендлером пакетов (конкретно у меня ProtocolLib, но не суть). Зачем это нужно - сказать не могу (секретики), но, возможно, сами догадаетесь.
В данный момент я просто телепортирую игрока подальше от текущего места, а потом обратно. Но, сами понимаете, очень костыльное и кривое решение.
В идеале сделать так, чтобы нагрузка на сервер была минимальной - не формировались бы пакеты чанков и прочего.
Понятное дело, что средствами баккита такое сделать нельзя. Пытался лазить по NMS, но так и не осилил. Пробовал найти нужный метод и из телепортации, и из конструктора пакета чанка, и из конструктора пакета спауна энтити - всё без толку.
Естественно, что этот код где-то есть, но, так или иначе, найти его мне не удалось.
Кстати записывать всех энтити сразу при заходе игрока тоже нельзя, поскольку по ходу игры список мобов на клиенте, как вы понимаете, меняется. И всё это отследить тупо невозможно, потому что клиент сам при некоторых обстоятельствах удаляет энтити у себя - без пакета EntityDestroy.
Да и памяти такое решение может требовать прилично - придется хранить всех мобов для всех игроков на сервере.
Возможно кто-то уже делал подобное? Ну, либо можете предложить альтернативные решения.
Лично я пробовал выгружать и загружать чанки баккитом, но даже это не помогло - в новых версиях булин safe просто игнорируется (по-умолчанию false), а соответственно чанки не выгружались.
Спасибо.
UPD: Уже нашёл нужный код в ядре и частично переписал под баккит. Остальное закостылил тонной рефлексии. Код привести не могу. Лишь скажу, что нужные участки находятся в нмс-классах EntityTracker и EntityTrackerEntry.
Задача следующая:
Имеется последний билд спигота. Нужно в произвольный момент времени повторно отправить на клиент всех мобов, которые должны быть отображены при нормальных обстоятельствах. Точнее цель даже не в том, чтобы энтити заспаунились на клиенте, а в том, чтобы сформировать пакеты спауна и затем обработать хендлером пакетов (конкретно у меня ProtocolLib, но не суть). Зачем это нужно - сказать не могу (секретики), но, возможно, сами догадаетесь.
В данный момент я просто телепортирую игрока подальше от текущего места, а потом обратно. Но, сами понимаете, очень костыльное и кривое решение.
В идеале сделать так, чтобы нагрузка на сервер была минимальной - не формировались бы пакеты чанков и прочего.
Понятное дело, что средствами баккита такое сделать нельзя. Пытался лазить по NMS, но так и не осилил. Пробовал найти нужный метод и из телепортации, и из конструктора пакета чанка, и из конструктора пакета спауна энтити - всё без толку.
Естественно, что этот код где-то есть, но, так или иначе, найти его мне не удалось.
Кстати записывать всех энтити сразу при заходе игрока тоже нельзя, поскольку по ходу игры список мобов на клиенте, как вы понимаете, меняется. И всё это отследить тупо невозможно, потому что клиент сам при некоторых обстоятельствах удаляет энтити у себя - без пакета EntityDestroy.
Да и памяти такое решение может требовать прилично - придется хранить всех мобов для всех игроков на сервере.
Возможно кто-то уже делал подобное? Ну, либо можете предложить альтернативные решения.
Лично я пробовал выгружать и загружать чанки баккитом, но даже это не помогло - в новых версиях булин safe просто игнорируется (по-умолчанию false), а соответственно чанки не выгружались.
Спасибо.
UPD: Уже нашёл нужный код в ядре и частично переписал под баккит. Остальное закостылил тонной рефлексии. Код привести не могу. Лишь скажу, что нужные участки находятся в нмс-классах EntityTracker и EntityTrackerEntry.
Последнее редактирование: