- fix: исправлен NPE в привязке aura MEG — modeledEntity использовался до инициализации
- fix: забыл закоммитить это раньше
- perf: оптимизация горячей ветки getTrackedPlayer
- Исправлено принудительное спавнение себя
- Исправлена задержка смерти моделируемого снаряда
- Небольшой рефакторинг механизма состояний
Use bukkit provided no alloc get location
Fixed MEG bullets not despawning when using state machines
- Исправлена задержка появления модели при спавне
- Отменены изменения в API регистрации плейсхолдеров
- Добавлен атрибут modelid для механики lockmodel
Проблема: ClientboundSetPassengersPacket, отправляемый PivotOverrideRegistry, включал только пассажиров, управляемых PivotOverride.
- Исправлено: ошибка Folia AsyncCatcher в sendPivotOverrides.
- Исправлено: NPE при создании hitbox для незаcпавненных сущностей.
- Исправлено: удалены лишние вызовы forceSpawn при снятии disguise, чтобы предотвратить рывки и «тремор» игрока.
- Исправлено: pv=true теперь корректно снимает пассажиров базовой сущности.
Это приводило к игнорированию и снятию нативных Bukkit-пассажиров (например, попугай на плече или игрок верхом на другом игроке) на клиенте при применении модели с pv=true.
- Исправлено: механика folia dismountall.
- Производительность: ускорена обработка пакетов.
- Производительность: оптимизация UpdateScheme за счёт уменьшения количества обращений к хеш-таблицам.
- Откат: «Minor optimization on tracked player filtering».
- Лёгкая оптимизация фильтрации отслеживаемых игроков.
goob
- Исправлена сборка проекта.
- perf: удалён лишний Optional в StateMachineHandler.isGlobalRotation.
- perf: убран ненужный CAS из SafeTransform.
- perf: исключены лишние аллокации итераторов при обновлении пустого map-трекера.
- perf: оптимизирован BoneSnapshotHandler — переиспользование snapshot и встроенное сравнение.
- Больше не создаётся новый объект Snapshot для каждой кости каждый тик, если хэш-коды не изменились.
- Snapshot.compare() заменён на прямую побитовую операцию OR вместо 4 вызовов TMath.setBit()
Это либо ускорит деплой до максимума, либо всё взорвётся 😄
- fix: использование ConcurrentHashMap в BoneSnapshotHandler для предотвращения race condition.
- Исправлено некорректное сохранение ref-анимации.
- Исправлен приоритет анимаций.
- Теперь, если несколько анимаций запускаются в один тик, приоритет всегда получает последняя запущенная.
- Добавлен Pre/Post send callback API.
- Исправлены утечки памяти ByteBuf в ModelEngineChannelHandler.
- Удалён неиспользуемый ByteBuf в handleEntityData.
- Добавлен try-finally с release() в handleEntityId и handleInteract для предотвращения утечек direct-памяти.
- Дополнительная защита от пустых metadata-пакетов и исправление утечки ByteBuf в парсерах v1_21_R1–R7.
- Удалены утечки RegistryFriendlyByteBuf в VFXDisplayParser.
- perf: кэширование иерархии BoneSequencer для устранения лишних вычислений.
- Добавлен dirty-флаг, чтобы не пересчитывать статическую топологию модели каждый тик.
- Примерно ~90x ускорение за счёт удаления аллокаций Map, Set и Iterator.
- perf: устранены накладные расходы HashMap при обновлении keyframe.
- Итерация по HashMap заменена на кэшированную обработку полей.
- Удалены лишние аллокации памяти и достигнуто ~3x ускорение выполнения.
- perf: оптимизирован ModelBoneImpl.tick() за счёт кэширования поведения.
- HashSet и HashMap заменены на примитивные массивы и boolean-кэш.
- Примерно ~3.1x прирост производительности за тик благодаря устранению математических операций, хэширования и аллокаций Iterator.
Оптимизация производительности ModeledEntityImpl.getModelsОптимизация обновлений BukkitEntityData для позиции и булевых значений
- Кэширование внутренней карты models для предотвращения накладных расходов от ImmutableMap.copyOf при каждом вызове.
- Кэш инвалидируется при событиях модификации.
Оптимизация логики syncUpdate в BukkitEntityData
- Дедупликация обновлений позиции: используется повторно используемый объект Location для запроса позиции сущности. Атомное хранилище обновляется только при фактическом изменении позиции, что снижает количество выделений памяти.
- Дедупликация булевых обновлений: проверка текущих значений isEntityValid и isDataValid перед установкой, что уменьшает накладные расходы на volatile-записи, если значения не изменились.
- Бенчмарки показывают ~26% улучшение логики позиции и ~86% для булевых значений в стабильном состоянии.
- Ленивое создание очередей отслеживания для снижения давления на память.
- Использование инкрементальных обновлений для syncTracking вместо полного очищения и повторного хэширования.
- Повышение производительности примерно на ~19% по бенчмаркам в стабильном состоянии.