Я болею, но R4.0.8 (наконец-то, спустя полгода) вышел, и в этот раз с множеством новых функций и исправлений багов. Вот основные моменты:
Поддержка 1.21.4 с Composite Bones
С выходом компонентов моделей предметов, ориентированных на данные, нам удалось избавиться от обычного ограничения на вращение кубов без добавления дополнительных костей.
Когда MEG обрабатывает кость, он пытается разделить модель на минимальное количество "групп". Группа — это модель предмета, которая будет композирована, то есть объединена с другими группами в единую модель. Это фактически убирает лимит углов, используя минимум ресурсов.
Технические блаблабла, не читал, делайте, что хотите.
Примечание: хотя эта функция работает и на версиях ≤1.21.3, она создаст дополнительные сущности для представления нелегальных вращений. Имейте это в виду (или просто обновитесь, 1.21.4+ топ).
Компенсация клиентских лагов
Вы замечали, как ваша модель немного дёргается после перемещения на несколько блоков? Да, я тоже. И я ненавидел себя за это. Но спустя столько лет я, наконец, нашёл решение (ну, почти).
Проблема в том, что клиент и сервер тикают с несовпадающим "смещением". Оба работают на 20 TPS, но сервер может тикать на 25 мс раньше или позже. Это само по себе не проблема, но если сервер отправляет 2 пакета с разных тиков, а клиент читает их в один тик, то модель внезапно подскакивает в последнюю позицию, а затем останавливается на тик. Худшее — эта проблема полностью зависит от FPS. Например, на 60 FPS всё будет гладко, а на 144 FPS модель начнёт дёргаться, из-за чего отладка была адом.
Но после долгих раздумий и внутренней битвы с шестилетним мной, я придумал компенсатор, который определяет, когда клиент дёргается, и задерживает пакеты менее чем на 1 тик для их синхронизации. Это не идеально — иногда лаги будут оставаться пару секунд, но потом исчезнут.
Система Animation LOD
После того, как @Taiyou угрожающе встал в позу Ти, я согласился встроить его систему Animation LOD, и, чёрт возьми, это того стоило.
Если кто не знает, LOD — это "Уровень детализации". Проще говоря: "Чем дальше объект, тем менее детализированным он выглядит, потому что вы всё равно не заметите разницы :kekw_dog:". С этой системой модели, находящиеся далеко от игрока, будут отправлять меньше обновлений, что значительно снизит нагрузку на сеть в местах с большим количеством сущностей. Можно настроить этот параметр для каждой модели через
cullconfig, а значения регулируются в конфиге.
Root Motion
По просьбе @TugkanDeMan теперь можно анимировать передвижение мобов прямо через анимации! Пока что это работает только для позиции моба, но даже этого хватит для создания интересных движений.
Почему это заняло так много времени?
На самом деле, нет. Обновление было готово ещё в конце декабря прошлого года, но из-за изменения важных внутренних компонентов и добавления новых крупных функций я решил оставить его в
dev-builds, чтобы исправлять баги по ходу. Кроме того, я не видел смысла выпускать релиз, когда dev-версии доступны всем премиум-пользователям. А ещё я обещал добавить
IK и Molang, так что хотел хотя бы один из них закончить перед релизом. Но кажется, я затянул это слишком надолго. Пора выпустить и двигаться дальше. По крайней мере, теперь у меня есть чёткое представление, как IK будет работать в MEG.
Всё, горло убито, монитор в соплях, я кашляю лёгкими. Полный список изменений на странице плагина. Удачи, я спать
Исправления багов:
- Исправлено, что хитбоксы не применялись к постоянным моделям.
- Исправлено, что анимация смерти не воспроизводилась, если не было других активных анимаций во время смерти.
- Исправлено, что OBB не работал на 1.20.5+.
- Исправлена ошибка, из-за которой дальность взаимодействия сущностей использовала BlockInteractionRange вместо EntityInteractionRange.
- Исправлено, что атрибут interactmount в механике mountmodel не использовался.
- Исправлено, что модели сохранялись несколько раз при отключении плагина, из-за чего завершение работы занимало невероятно много времени.
- Исправлено, что плагин отправлял пустые пакеты бандлов.
- Исправлено дёргание моделей на клиенте (насколько возможно).
- Исправлено, что плагин не загружался на Java 17.
- Исправлены предупреждения о ресурс-паке на старых версиях.
- Исправлено некорректное положение поводка на 1.21+ (спасибо, Mojang).
- Исправлено, что поводок отставал от моделей.
- Исправлено, что эффекты зелий у игроков не удалялись после истечения.
- Исправлено, что игроки внезапно начинали дёргаться и телепортироваться.
- Исправлено, что прерывистые кадры неправильно обрабатывались.
- Исправлено, что изменения скорости не применялись к замаскированным игрокам.
- Исправлено, что вращение модели не обновлялось, если рядом не было игроков.
Изменения:
- Имена над головами теперь используют Text Displays.
- Обновление моделей теперь использует новую систему, обеспечивающую лучшую балансировку нагрузки и более стабильное тикание.
- В механике model теперь step по умолчанию null, что означает использование оригинальной высоты шага моба.
- Расширен механизм syncyaw, теперь он может синхронизировать любой тип угла поворота (yaw, body, head).
Новые функции:
- Поддержка 1.21.3 и 1.21.4.
- Кубы больше не имеют ограничения угла. В версиях ≤1.21.3 будут добавляться дополнительные кости, в ≥1.21.4 новых сущностей не создаётся.
- Полулегальные кубы теперь автоматически исправляются (например, 67.5° и 90°).
- Поддержка MM ModelEngine bullet.
- Добавлена генерация нескольких базовых предметов.
- Механика AnimateModel — позволяет управлять трансформацией костей через навыки.
- Добавлено движение через анимации (Root Motion) — можно анимировать передвижение мобов через модели.
- Добавлен атрибут child к механикам brightness, enchant, glow, partvis, tint.
- Улучшен API для парсинга кастомных моделей.
- Улучшен API для парсинга кастомного поведения костей.
- Добавлен атрибут skipLastFrame к механике состояний.
- Текстуры с нелегальными символами в названии теперь автоматически исправляются (создаётся уникальный UUID в качестве имени).
- Система Animation LOD — модели отправляют меньше обновлений для игроков, которые находятся далеко.