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

Denizen 1.3.4-b7314M
Скрипты стали быстрее, лагов меньше, и много исправлений. Просто замените jar: скрипты менять не нужно.

Стало быстрее
  • Запись флагов быстрее примерно на 20%, inject почти вдвое быстрее, run быстрее примерно на 15%.
  • Математика с целыми числами и округление (round, round_up, round_down, round_to) больше не идут медленным путём через точные десятичные дроби. Результат тот же, а работы гораздо меньше.
  • События, под которые не подошёл ни один скрипт, стоят примерно втрое меньше, а свитч flagged: разбирается один раз, а не на каждом событии.
  • list.get, map.get, сравнение чисел, replace и filter работают быстрее.
  • Скрипты, которые обрабатывают много пакетов, создают гораздо меньше мусора в памяти, поэтому пауз на сборку мусора стало меньше.

Асинхронность
  • Новый свитч thread:network для событий пакетов, player receives message, player receives actionbar и player hears sound. Такие события выполняются прямо в сетевом потоке и не ждут тика сервера.
  • Намного больше тегов работает в асинхронных скриптах без ожидания главного потока, в том числе location.block, entity.is_sneaking и location.find_blocks.
  • Плейсхолдеры PlaceholderAPI %denizen_...% теперь работают из любого потока (включено по умолчанию).
  • Исправлены редкие случайные ошибки при большой асинхронной нагрузке.

✨ Новое
  • <PlayerTag.plugin_channels>: каналы модов, которые использует клиент игрока.
  • <LocationTag.collision_boxes>: твёрдые коробки блока, в том же формате, что и bounding_box.
  • Новые свойства предметов: tooltip_style, enchantment_glint_override и intangible_projectile.

Исправлено
  • fake_player через fakespawn снова работает на Paper.
  • Позиции в advancement, ItemTag.json, <&head> и пространства имён спрайтов.
  • <LocationTag.highest> больше не выдаёт ошибку в незагруженных чанках.
  • Обработка ошибок асинхронного телепорта, событие server list ping и исправления для Minecraft 26.1–26.3.
  • Аддоны, которые напрямую читают определения очереди (например, denizen-reflect), снова работают.
Denizen 1.3.4-b7309M - Теперь БЫСТРЕЕ, УМНЕЕ и уже на 26.3! 🚀

Это большое обновление с момента 7302M: поддержка Minecraft 26.3, огромная работа над скоростью ядра скриптов, доработки async и куча исправлений. Версия поднята до 1.3.4.

⚡ Скорость скриптов (Core)
Основной упор этого релиза - ядро выполняет скрипты заметно экономнее: меньше аллокаций, меньше повторных разборов, меньше лишней работы на каждой строке.
Циклы
  • Тело цикла (foreach, repeat, while) теперь выполняется из одной копии с «рамкой» (frame) на очереди, а не копируется и вставляется заново на каждом шаге.
  • Счётчик цикла меняется «на месте», без создания нового значения и массива на каждый шаг; все счётчики теперь числа.
  • Тело if берётся только если условие прошло; условия if/while разбираются один раз при компиляции.
  • if, else, define и foreach переведены на autoCompile.
Definitions (<[name]>)
  • Определения получили «слоты» и кэширование: чтение <[name]> и <[name].sub.tag> больше не ищет имя по списку и не разбивает точечные имена каждый раз.
  • Определения очереди вынесены в отдельный объект-хранилище.
  • Тег вида <[name]> читает определение напрямую, без лишних построений.
Аргументы и теги
  • Аргументы без тегов больше не парсятся повторно; форма аргумента определяется один раз, а не при каждом выполнении.
  • Контекст тега клонируется только там, где это реально нужно.
  • Меньше аллокаций на Attribute, быстрее разбор префиксов типов объектов и чтение «плоских» флагов без разбиения имени.
  • definemap: карта строится один раз, если строка состоит из фиксированного текста, и кэшируется для YAML-блоков без тегов.
🧵 Async
  • Окно ожидания главного потока теперь адаптивное: оно растёт для скриптов, которым это выгодно, и сжимается обратно, если не помогает.
  • Команда async получила отчёт для отладки.
  • README приведён в соответствие с новой логикой окна ожидания.
✨ Улучшения
  • adjustblock теперь принимает MapTag, как и adjust.
  • Механизм attribute у BiomeTag модернизирован. Теперь принимает тип аттрибутов gameplay и audio.
  • Событие PlayerChangesUncheckedSignScriptEvent: обновлено название и мета. Теперь в скриптах это player changes unchecked sign
  • Дубликат ключа в YAML теперь сообщает, в каком файле он найден и при чтении старого файла сохранений указывается его имя.
  • Из плагина убрана отправка отладочных логов на сервер оригинального плагина Denizen вместе с настройками в config.yml.
🐛 Исправления
  • Тело цикла не видело смену привязанного игрока/NPC (__player, __npc, linked_player, linked_npc): foreach по онлайн-игрокам мог держать первого игрока. Теперь исправлено.
  • Поиск игрока и NPC внутри тела цикла теперь читает реальную следующую запись очереди.
  • Айтем скрипты теперь загружаются до проверки ивентов. Баг был с версии 7302M, исправлено.
  • Исправлены shadow_color, shadow_gradient и dual_gradient.
  • Исправления тега gamerule у WorldTag.
  • Исправления showfake для 26.3 версии.
  • Исправления NPE и работы команды fakeequip.
  • Исправление ошибки детерймана у ивента server list ping.

Полный список изменений:7302M...master · Core
Нужна сборка 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 за помощь!
ВерхНиз