- Оптимизация: уменьшен объём передаваемых данных при появлении модели в зоне видимости игрока.
Убраны лишние клиентские данные при спавне моделей и начале их отслеживания, что снижает пиковый сетевой трафик примерно на 10–30% при появлении модели в зоне видимости.
Эффект оптимизации зависит от количества событий начала отслеживания (start-tracking), а не от числа игроков, просто наблюдающих за моделью.- Исправлено: устранены две причины отключения клиентов — одна связана с режимом Bundle-Everything, другая возникала при обработке предмета в руке (held-item path)
- Исправлено: асинхронное сохранение и отложенное восстановление теперь безопасны для Folia благодаря использованию снимков данных в региональных потоках.
- Исправлено: исправлено восстановление моделей, которые удалялись из-за ложных событий выгрузки сущностей (entity unload events) (#355).
- Новое: условие hasmodel теперь также может проверять состояние воспроизведения (playing state).
- Исправлено: добавлена передача ID кости дочернего хитбокса в снаряды MythicMobs (#357).
- Новое: добавлено мифическое условие hasmodel для MythicMobs.
- Производительность: небольшие оптимизации и обновления MiniMessage.
- Исправлено: переработан Bundle-Everything (функция была нерабочей после переписывания R4.0.6 updater).
- Исправлено: NPE, из-за которого модели могли зависать при удалении queued-состояния в тот же тик, когда оно проигрывается (#352).
При выгрузке мира некоторые данные не очищались, постепенно накапливались в памяти и со временем могли привести к крашу сервера. Теперь это исправлено:
- Исправлено: теперь можно спешиваться с моделей, базовый моб которых имеет отключённый ИИ (#347).
- Исправлено: устранена утечка данных при выгрузке мира (#187).
- Визуальные эффекты сущностей (Entity VFX) теперь корректно исчезают и продолжают следовать за своей целью, вместо того чтобы оставаться навсегда.
- Невидимые базовые сущности моделей больше не оставляют «висячих» ссылок в памяти.
- Данные о pivot и mount теперь освобождаются одновременно с выгрузкой модели.
- Исправлено: анимации state machine (play/stop/query) теперь применяются в одном тике (#221).
- Производительность: уменьшены per-bone-per-tick аллокации в model tick и внесён ряд других оптимизаций.
- Исправлено: ModifyState теперь задаёт длительность lerp, а не накопитель прогресса (#348).
- Исправлено: ресурсы моделей игрока теперь зависят от Create-Shader (не отправляется player_head.json, если шейдеры отключены).
- Исправлено: добавлено снятие снапшота BoneItems для устранения race condition «Item is null» (#327).
- Улучшено логирование: теперь в ошибке Unable to find model with ID выводится сам ID модели.
- Исправлено: renderByDefault больше не связан с переключателем видимости Blockbench (editor-hidden части всегда скрыты).
- Исправлено: для PseudoThread используется nanoTime в tick guard, чтобы избежать throttling из-за неточных системных часов.
- Исправлено: добавлены недостающие определения (failsafe-инициализация для предотвращения потенциальных ошибок).
- Добавлена поддержка маунтов на небазовых сущностях (non-Mob bases), включая модели на основе ItemDisplay. Изменений поведения по умолчанию нет.
- Custom MountController теперь может работать на non-Mob базах. Для этого нужно переопределить MountController#shouldEngineTickMovement(), чтобы вернуть true — тогда движок будет вызывать updateDriverMovement и updatePassengerMovement каждый тик даже для не-Mob моделей. По умолчанию false, старые контроллеры не затрагиваются.
- MountManager#getSeat(String) теперь поддерживает имя сиденья в формате p_N, а также уже обработанный вариант N, поэтому больше не нужно вручную удалять префикс p_ перед посадкой.
- Теперь здоровье маунта повторно отправляется игрокам при повторном входе в радиус отслеживания, чтобы отображалось актуальное значение, а не полное здоровье по умолчанию.
fix: forgot to git add this lmao
feat: support MiniMessage/HEX in setmodeltag tag, keep legacy codes working (#205)
- Исправлено: генерация ResourcePack больше не отличается при каждом запуске из-за многопоточной обработки.
- Исправлено: getCollidableExemptions больше не вызывает NPE (NullPointerException).