- Фича: расширено условие entityType. Добавлена поддержка вложенных entityType... условий
Это исправляет 30–40 механик для Folia.
- Исправление: доступ к состоянию сущностей в механиках теперь выполняется в потоке региона, которому принадлежит сущность, на Folia (#2255).
- Исправлена поддержка плейсхолдеров в громкости (volume) звукового механизма.
- Исправление: снаряды onHit больше не игнорируются на Folia (#2256).
- Исправление: теперь учитываются флаги cancelOn* у ауры на уровне компонента, а не только строки ауры (#2254).
- Исправление: условия Conditions в мета-скиллах теперь вычисляются один раз за каст через skill mechanic (#2246).
- Исправление: ограничен maxHeight у случайного спавна пределами высоты мира (#2260).
- Исправлено двойное применение модели MEG при использовании mob.Model.Id.
- Добавлена поддержка `` для механики forEach.
perf: lock-free per-player AtomicReference для отслеживания перемещения; удалён лишний Location.clone на каждый PlayerMoveEvent
perf: устранены копирования target-list в горячих клонах SkillMetadata (deepCloneNoTargets); исправлена некорректная очистка целей в DropItem/StealItem
perf: VariableRegistry переведён на lock-free модель; запись PlayerVariableRegistry сериализована и дедуплицирована
- VariableRegistry: убран ReentrantLock вокруг ConcurrentHashMap; операции по ключам теперь lock-free, а очистка по истечению срока использует атомарный conditional remove(key, var), чтобы параллельная запись не перетиралась.
- PlayerVariableRegistry: запись событий сериализована через отдельный write-lock (чтение остаётся lock-free), и MythicPlayerVariableSetEvent теперь вызывается один раз на putAll вместо двух.
- Улучшение производительности: VariableRegistry переведён на ConcurrentHashMap вместо Gson LinkedTreeMap. (порядок итерации не зависит от использования).
- Оптимизация: используется один общий WorldUnloadEvent listener для всех projectiles.
- Добавлен API-метод для lootbag.
- Исправлены изменения Paperweight userdev для 26.2.
- Исправлена яркость механики speak{}.
- Изменена формула Crit Damage: возвращена мультипликативная модель вместо аддитивной с другими модификаторами (modifyDamage{}).
- Оптимизация: исключено создание UUID/knockback-modifier на каждый хит в doDamage, если knockback не предотвращается.
- Добавлена поддержка версии 26.2.
- Оптимизация: заменена итерация чанков на AABB spatial query в getEntitiesNearLocation.
- Оптимизация: заменены streams на обычные циклы в ILocationSelector.filter.
- Исправлена оптимизация getEntitiesNearLocation (fix evlad’s perf).
- Оптимизация: переработан packet-renderer per-tick цикл (сокращены итерации и аллокации).
- trackedPlayers заменён на плотный массив + индексную карту для ускорения циклов (~4x ускорение).
- Убрано дублирование remove packet в cull-проходе.
- Yaw/Pitch переведены на primitive DataTrackerFloat, убраны боксовые Float-аллокации.
- Оптимизация: удалены временные списки при PacketEntityRenderer.sendPacket.
- Улучшение производительности: снижена нагрузка от отправки пакетов снарядов на каждом тике и от вычисления целей.
- Теперь сервер способен обрабатывать около 10k снарядов при ~2 mspt (на 9950X). В дальнейшем планируются дополнительные оптимизации.
- Исправлена ошибка, из-за которой длительности эффектов больше не могли задаваться случайным образом.
- Исправлена проблема, из-за которой эффекты recoil/fear могли выкидывать игроков с ошибкой "Invalid move player packet received".
- Добавлено условие angry для поддерживаемых мобов.
- Условие isSheared теперь также поддерживает Bogged и снеговиков (Snowman).
- Технические изменения: выпуск повышен до мажорной версии.
- Добавлено условие pollinated для пчёл.
- Исправлена неработающая проверка заряженного крипера (creeper charged condition), связанная с конструктором.
Если height > 0, проверка переключается со сферы на Y-ограниченный цилиндр. Если не задано — используется старая логика сферы.
- Отменено изменение: добавление опциональной цилиндрической формы для условия mobsInRadius (revert commit b05b87c87487d160b3486756c009191796112af4).
- Добавлено: параметр shape для условия mobsInRadius.
- Добавлено: опциональная цилиндрическая проверка в mobsInRadius через поля height и yOffset.
Пример:Проверка считает зомби в радиусе 10 блоков по горизонтали, в диапазоне Y [y-2, y+3].Код:mobsInRadius{r=10;height=5;yOffset=-2;types=ZOMBIE;amount=>3}