Плагин Механика Утилита NPC Смешанный DenizenM (Форк Denizen) [Denizen 1.3.3 b7302M]

Нужна сборка DenizenM-Core из этого же релиза - ядро вшивается в джарник плагина, так что смешивать джарники из разных релизов нельзя.

Асинхронные скрипты
Главное в этом релизе: очереди скриптов теперь умеют выполняться вне главного потока сервера. Собственная логика скрипта - теги, математика, текст, списки, карты - больше не тратит время главного потока, и медленный скрипт не может лагать сервер.
Код:
- async:
    - define sorted <server.flag[scores].sort_by_value>
- narrate "Top: <[sorted].keys.last>"
- run my_task async
- ~define result <[huge_list].parse_tag[<[parse_value].to_uppercase>]>
- async detached copy_defs:path|index:
- runlater nightly_report delay:1h async
Всё, что вне главного потока небезопасно, передаётся главному потоку автоматически, а скрипт ждёт ответа. Скрипты поэтому остаются корректными - просто на таких строках ничего не выигрывают. Первый переход в главный поток стоит до целого тика, все следующие за ним - микросекунды. Команды, которые только отправляют что-то и ничего не возвращают (narrate, playsound, playeffect, runlater, ...), передаются вообще без ожидания.
Полное описание, включая списки команд и тегов, безопасных вне главного потока: README ядра либо meta-разделы Async Queues и Async Tag Safety.
Новая секция конфига Scripts.Async: Allow, Main thread wait timeout, Shutdown timeout, Main thread task budget ms, Main thread wait linger us, Warn at queue count, Max queue count.
Новые теги
  • <ListTag.activation[<type>]>, <ListTag.matrix_mul[<list>]>, <ListTag.dot_product[<list>]>
  • <EntityTag.is_enemy>
  • <&sprite[(<atlas>:)<sprite>]> - текстовый компонент atlas_sprite, рядом с уже существующим &head
  • <QueueTag.is_async>, <QueueTag.async_stats>, <util.is_main_thread>, <util.current_thread>, <util.linger_stats>, <util.current_time_nanos>
Новые механизмы
- MaterialTag.chain_part - LEFT/CENTER/RIGHT/UNCONNECTED для полок (в ванилле это состояние называется side_chain); тег и механизм
### Новые аргументы команд
  • playsound ... source:<entity> - звук идёт от энтити, следует за ней и обрывается, когда она умирает. Работает и на фейковых энтити из fakespawn — для тех игроков, которым её показали.
  • playsound ... targets:<player>|... - задаёт, кто именно слышит звук, и заодно позволяет команде не уходить в главный поток
  • runlater ... async — запускает отложенный скрипт в собственной очереди, когда придёт время
Исправления
  • showfake в 26.2 падал с NoSuchMethodError, а на материале без block entity ушёл бы в NPE; теперь block entity строится через NMS, как это давно делают остальные модули
  • &head и &sprite молча терялись при любом преобразовании туда-обратно - raw JSON, лор предмета, страницы книги, — а внутри градиента повторялись на каждом символе
  • &shadow_color / .shadow_color протекали за пределы своей области, сбрасывали цвет текста, обрывали объемлющий цветовой блок и не давали задать полностью непрозрачную тень; градиенты заодно избавились от String.format на каждый символ
  • Ряд пакетных обработчиков (таблист, actionbar, звук) сделаны потокобезопасными
Важное обновление! В этой сборке устранены проблемы с производительностью. Настоятельно рекомендуется обновиться как можно скорее.

  • В событии on player join определены и исправлены ошибки <context.message> с использованием новых компонентов Paper.
  • Асинхронная телепортация: добавлены более строгие проверки успешности (теперь проверяется наличие объекта) для предотвращения ложных отладочных сообщений об ошибках телепортации.
  • Исправлены проблемы с производительностью при использовании команды showfake.
  • Расширена поддержка тега .optimize_json для компонентов головы игрока в сообщениях чата.
  • Добавлена более строгая проверка материалов для команды schematic.
  • Оптимизирована производительность команды playeffect при использовании API ParticleBuilder.
  • Обновление до версии 7299.
  • Модернизация тега <&head[#.#]>: теперь он принимает PlayerTag, имя, UUID, base64 и PlayerTag.skin_blob.
  • Тег <&player_head> был удален. Используйте новый тег <&head>.
  • Добавлены недостающие методы в PaperAPIToolsImpl, что исправило привязку тега .variant к EntityTag и .recent_tps к ServerTag.
  • Исправлен метод setMapData.
  • Исправлен механизм fake_teleport для всех версий.
  • Исправлено использование параметра типа falling_block в команде fakespawn.
  • Удалено огромное количество неиспользуемых импортов и проверок NMSVersion.

Спасибо m1ha1lk за помощь!
ВерхНиз