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

[Решено] Спаун/деспаун мобов

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

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

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Доброго времени суток.

    Стоит задача создать моба на определённой точке. Причём в данных мира этого моба хранить нельзя.

    Первое, что пришло в голову - прослушка ChunkLoadEvent и ChunkUnloadEvent'ов. Вот только обнаружилась следующая проблема - после окончания востребованности чанк отгружается не сразу, а через 5-10 секунд (почему так сделано - вполне понятно). В результате этого, если вернуться в чанк до того, как он отгрузится - моб будет отсутствовать, т.к. ChunkLoadEvent не вызывался, следовательно моб не заспаунился.

    А пропал этот моб практически тогда же, когда чанк перестал быть востребованным. Ядро посчитало, что моб не нужен, и со спокойной душой удалило его. По каким критериям работает этот ванильный деспаун - я не интересовался. Вероятно, проверяется наличие игроков в каком-то радиусе (значение из spigot.yml, например).

    Короче говоря, деспаун мобов не связан с отгрузкой чанков, отсюда имеем проблему, из-за которой моб не всегда присутствует в загруженных чанках.

    Собственно, какие есть лаконичные варианты решения этого вопроса?
    Никаких EntityDespawnEvent не нашёл (в Paper'е есть ItemDespawnEvent, но это лишь для дропа).
    Возможно какие-то библиотеки?
    Или остаётся лишь вариант изучать метод деспауна мобов ядром, инвентрировать его использовать уже для спауна? Опять же, есть ли готовый код?
    Ядро модифицировать точно не буду.
    Но готов отключить механику ванильного деспауна.

    Если что, используется Paper 1.13.2, последний билд.

    Решение:
    Нашёл немного информации про ванильный деспаун.
    Нашёл NBT-тег PersistenceRequired и соответствующий ему метод Entity.setPersistent(boolean persisten), который не повлиял ровным счётом ни на что (в ядре используется, но почему не работает - без понятия).
    Почитал про Draft API - нашёл LivingEntity.setRemoveWhenFarAway(boolean remove). Вот он-то мне и помог. Теперь спокойно удаляю мобов при отгрузке чанков.

    Проблема решена.
     
    Последнее редактирование: 16 июн 2019
Статус темы:
Закрыта.

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