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

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

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

Статус темы:
Закрыта.
  1. Автор темы
    Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Здравствуйте.

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

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

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

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

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

    Спасибо.

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

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

    Баллы:
    66
    Skype:
    flameston
    Имя в Minecraft:
    FlamestoN
    FastConnect?
     
  3. Will Orion Z

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

    Баллы:
    76
    Имя в Minecraft:
    willorion
Статус темы:
Закрыта.

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