- Исправлено: компонент ауры onDeath не срабатывал, если была включена опция cancelOnDeath.
- Перф: убрано около 1 секунды лишнего времени при каждой перезагрузке
Две лишние операции выполнялись при каждом reload независимо от размера конфигурации: плагин несколько раз заново сканировал весь свой JAR-файл, а также создавал ошибку для каждого предмета без указанного цвета. Теперь эти операции пропускаются, что бесплатно экономит примерно 1 секунду на каждой перезагрузке.- Исправление: ключ tooltip_style теперь корректно разрешается с использованием пространства имён (namespace) ресурспака Crucible.
- API: добавлен метод give для LootBags.
- Перф: скорость перезагрузки увеличена примерно в 10 раз.
Перф: предварительно задан размер буфера целей снаряда и пропущена лишняя проверка isDead.
- Производительность (particles): добавлено пакетирование / объединение particle-пакетов по тикам (rx ~10k → ~40)
- Частицы теперь проходят через NMS, а несколько частиц, отправленных в один тик, объединяются в одну доставку для каждого игрока
- В зависимости от ситуации входящий поток пакетов у клиента снижается примерно с ~10 000/сек до ~40/сек для тяжёлых particle-skills
Визуально всё остаётся тем же, просто пакеты больше не отправляются по одному как почтовые голуби с астмой.
Настройки в config-general.yml → Packet:YAML:Packet: ParticleBundleEnabled: true ParticleTickBatchEnabled: true ParticleBundleSize: 512
- ParticleBundleEnabled — включает объединение пакетов (по умолчанию: true)
- ParticleTickBatchEnabled — включает пакетирование по тикам (по умолчанию: true)
- ParticleBundleSize — размер пакета (по умолчанию: 512, максимум 4096)
- ВАЖНО: для применения изменений настроек требуется полный перезапуск сервера
- Исправление: механика damage{} теперь корректно учитывает triggerSkills
- Исправление: запись сущностей в SetTextDisplayMechanic теперь выполняется в owning region (Folia)
- Исправление: устранена ошибка с длительностями и математическими формулами, возвращавшими слишком высокую точность
- Исправление: устранён баг с призывом (summoning)
- Возможность: добавлены механика и условие для управления сидением питомца
- Возможность: небольшое изменение
- Возможность: обновлено использование существующей механики toggleSittingMechanic
- Исправление: возвращены doc-комментарии
- Возможность: добавлен onEffectRemove
- Исправление: вложенные entity targeters в слотах location= теперь корректно применяют sort, conditions и limit
- Исправление: aura onTick продолжала работать после окончания действия ауры / уходила в отрицательную длительность
Ауры, созданные через overwrite или удалённые во время тика, могли превращаться в «зомби-ауры» — onTick продолжал срабатывать даже после завершения эффекта, а оставшееся время уходило всё глубже в минус. Красота.
Исправлены две причины:Особенно легко воспроизводилось при быстром пересоздании одной и той же ауры (например, таймер с removeAura + aura ow=true).
- run() теперь прекращает выполнение, если аура уже помечена как завершённая
- Исправлена гонка в registry, из-за которой новая аура могла «осиротеть» при одновременном удалении старой и продолжать тикать вне контроля registry
- Исправление: фильтр BukkitAttribute.values() был инвертирован и возвращал пустой/неверный набор вместо поддерживаемых атрибутов
- Исправление: те же фиксы для 1.21.1 применены и здесь
- Исправление: MythicMobDeathEvent и дропы могли не срабатывать из-за race condition с async skill clock (#2204)
- Исправление: aura с cancelOnDeath=false теперь корректно сохраняется после респавна игрока (#2221)
- Исправление: ключ локации для trail particle должен использовать target, а не source (#2192)
- Исправление: particlesphere дважды применял yoffset (#2200)
- Исправление: параметры eqy и eqz в particlelineequation игнорировались (#2218)
Раньше билдера выражений для Y и Z брали this.equationX, из-за чего все три оси использовали X-уравнение. Теперь каждая ось использует своё собственное поле, и 3D-кривые (например, спирали/геликсы) наконец работают как задокументировано. Да, удивительно, когда Z — это реально Z, а не X в парике.- Исправление: preservepitch/preserveyaw терялись при поиске безопасной точки телепорта (#2217)
findSafeSpawnLocation создавал Location только с world/x/y/z, из-за чего yaw и pitch с исходной позиции терялись. Теперь base.getYaw() и base.getPitch() корректно передаются в каждую новую Location, поэтому телепорт сохраняет ориентацию при использовании radius/spread.- Исправление: stats.yml теперь извлекается во время load(), чтобы аддоны могли регистрировать статы раньше
- Исправление: устранён баг с родительскими командами (parent commands)
- API: добавлено экспериментальное API для packet item lore
- Возможность: добавлена настройка Command.Parent для command skills
- Возможность: большинство механик с длительностями и интервалами переведены на PlaceholderDuration, поэтому теперь можно указывать единицы времени напрямую.
При использовании математики это пока не работает, потому что жизнь разработчикам мёдом не намазана.Код:- potion{type=POISON;duration=10s} # Отравление на 10 секунд
- Рефакторинг: StatExecutor теперь загружается раньше
- Механика setDisplayEntityItem теперь поддерживает block display entities
- Добавлена поддержка trigger conditions для aura-компонента onAttack
- Исправлена яркость nameplate
- API: добавлен PlaceholderDuration
- Возможность: skills, mechanics и механика skillCooldown теперь поддерживают кулдауны в разных единицах времени. По умолчанию всё ещё используются секунды.
YAML:Skill: Cooldown: 5t # 5 тиков Skill: Cooldown: 1m # 1 минута
- Проведён рефакторинг некоторых внутренних систем, связанных со статами
- Добавлен новый тип кастомного стата MUTATOR, позволяющий легко создавать статы, изменяющие другие статы, без необходимости задавать связь parent-child
В этом примере 20 agility дадут 2% шанса критического удара и 1% шанса уклонения.YAML:AGILITY: Type: MUTATOR ... Components: - Stat: CRITICAL_STRIKE_CHANCE Formula: 'v / 1000' Operation: ADDITIVE - Stat: DODGE_CHANCE Formula: 'v / 2000' Operation: ADDITIVE
- Добавлено условие canBeHitByProjectile, позволяющее пропускать кастомные hitbox'ы MEG через API
- API: добавлено событие MythicStatsRegistrationEvent