- Баллы
- 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). Вот он-то мне и помог. Теперь спокойно удаляю мобов при отгрузке чанков.
Проблема решена.
Стоит задача создать моба на определённой точке. Причём в данных мира этого моба хранить нельзя.
Первое, что пришло в голову - прослушка 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). Вот он-то мне и помог. Теперь спокойно удаляю мобов при отгрузке чанков.
Проблема решена.
Последнее редактирование: