Перейти к основному содержимому

История изменений

Примечания к релизам публичных расширений BTC Studio. Для каждого релиза указаны расширение, его версия и то, что изменилось для владельцев серверов, сначала новые, со ссылкой на релиз и на документацию расширения.

Платные расширения ссылаются только на свою документацию; загрузки остаются в магазине. Приватные расширения здесь не перечислены.

2026-10-16​

Dungeon v1.2​

Все изменения перечислены в журнале изменений Dungeon. Для существующего подземелья ничего не меняется, пока оно не использует одно из новых полей.

  • Требуется GUI (OmniGUI) 0.20: рейтинг Dungeon использует источник рейтинга из GUI 0.20 и не загружается со старым GUI. Сначала обновите GUI.
  • Общая добыча: новая запись Dungeon Loot Table, которую используют сундуки (lootTableRef) и мобы (lootTable). Сундук разыгрывает её один раз при первом открытии, моб — при смерти.
  • Больше сундуков: additionalLocations ставит несколько сундуков из одной записи Dungeon Loot Chest (в сгенерированном подземелье игнорируется). У Loot Chest Trigger появился particleEffect с раздельными осями X, Y и Z.
  • Волны и масштабирование: у Dungeon Mob Spawn появились waves, maxSimultaneous, масштабирование по числу игроков (perExtraPlayer, maxCount, playerCountSource), spawnParticle и триггеры onWaveCleared и onCleared. Новое событие On Dungeon Mobs Cleared — чтобы открыть дверь или показать сундук, когда все мобы побеждены.
  • Ограничения: новая запись Dungeon Restrictions (элитры, лодка или вагонетка, жемчуг Края, плод хоруса, рывок трезубца, заблокированные команды, сообщение об отказе, право обхода) с gameMode, limitInteractions (разрешённые взаимодействия, защищённые сущности) и messageRepeatDelay. Рывок трезубца и плод хоруса запрещены при клике. Исключение даёт только право обхода: у оператора оно есть, пока узел не выставлен в false.
  • Статистика: 22 показателя на игрока, считаются по артефакту с общим итогом по нескольким артефактам: нанесённый и полученный урон (только реально потерянное здоровье), убийства, зачищенные волны и комнаты, время игры, смерти, рекорды... statsMobScope выбирает учитываемых мобов. Смерть, из-за которой игрок покидает забег, больше не считается как runs_left. Новый факт dungeon_stat; плейсхолдеры dungeon_stat_<key>[_raw], dungeon_total_<key> и dungeon_inst_<id>_<key>; сниппеты content.dungeon_stats.duration_format и content.dungeon_stats.missing_value.
  • Рейтинг: новая запись dungeon_leaderboard_source (LIFETIME или CURRENT_RUN, rankBy, values, durationFormat, decimals), которую подключают к полю source рейтинга GUI.
  • Повторное подключение: reconnectGrace (по умолчанию 2 минуты). Отключившийся участник сохраняет место и продолжает с того же места (сайдбар, скрытые слоты, режим игры). После этого он покидает забег и при следующем входе возвращается в точку входа.
  • MMOProfiles: возвращение в точку входа и исходный режим игры применяются заново после выбора профиля.
  • Меню: поля слота Dungeon Category unlockedLore и lockedLore теперь называются unlockLore и lockLore. Старые страницы читаются по-прежнему; новый ключ побеждает, если есть оба.
  • Несовместимое изменение API для аддонов: DungeonArtifactData, DungeonStats и PlayerDungeonStats перенесены в пакет btcrenaud.dungeons.core, а у DungeonArtifactEntry.getPlayerStats и update изменилась сигнатура. Аддон, скомпилированный под Dungeon 1.1.x, нужно перекомпилировать.

Документация

GUI v0.20​

  • Вернуть добычу: dropOnClose в простом layout при закрытии меню возвращает то, что игрок не забрал или положил туда. closeDelivery выбирает GIVE_OR_DROP (по умолчанию: в инвентарь, излишек под ноги) или DROP. По умолчанию выключено.
  • Случайные предметы: rollPerSlot выбирает случайный предмет для каждого повторённого слота, а не один на все, а новый liveItem выбирает его заново при каждом обновлении.
  • Пустое имя игнорируется: предмет с пустым именем сохраняет собственное имя, а не показывается без имени.
  • Строки рейтинга от другого расширения: новое поле source у gui_leaderboard. Строки берутся из записи-источника для всех игроков, в сети и нет, например из источника Dungeon. Тексты строк принимают {score}, {score_raw} и {value_<key>}. Тексты источника — обычный текст: имя, похожее на тег MiniMessage, например <red>, больше не меняет порядок.

Релиз v0.20 · Документация

MythicMobs v0.12​

  • Мобы, видимые только некоторым игрокам: у spawn_mythicmobs_mob и mythic_spawner появилось поле visibilityCriteria. Моб виден, доступен как цель и уязвим только для игроков, выполняющих criteria, которые постоянно перепроверяются (visibilityRefreshInterval, по умолчанию 1 секунда). visibilityGroup теперь отслеживается в реальном времени, а не фиксируется при спавне.
  • collidable (spawn_mythicmobs_mob, mythic_spawner, по умолчанию true): false убирает столкновения и отталкивание для всех.
  • Уход: у spawn_mythicmobs_mob появились поля abandonRange и abandonDelay. Моб удаляется, если ни один допущенный игрок не остаётся в радиусе в течение задержки (abandonRange 0 = выключено). Веб-редактор подставляет в новые длительности 1 секунду: проверьте abandonDelay.
  • despawn_mythicmobs_mob: новое поле scope: ALL (по умолчанию, как раньше) или VISIBLE_TO_PLAYER (только мобы, которых видит игрок).
  • Защита: весь урон, связанный с ограниченным мобом (ближний бой, снаряды, навыки MythicMobs, огонь), блокируется в отношении недопущенных игроков, и наоборот. Снаряды пролетают насквозь, а моб бросает недопущенную цель.
  • Условие MythicMobs typewritervisible (псевдоним twvisible): добавьте его к навыкам без урона (зелье, бросок...) в таргетере (conditions=[ - twvisible true ]) или как TargetCondition, чтобы они пропускали игроков, не видящих моба. Расширение один раз выполняет /mm reload при запуске, если ваши файлы MythicMobs его используют.
  • Моб, чья исходная запись удалена, остаётся скрытым для всех.
  • Ограничения: столкновения работают по принципу «всё или ничего»; навыки без урона не фильтруются без twvisible; звуки и частицы вдали от моба не скрываются.

Release v0.12 · Documentation

Shops v1.12​

  • Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.

Release v1.12 · Documentation

Quest Codex v2.16​

  • Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.

Release v2.16 · Documentation

Corpse v0.7​

  • Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.

Release v0.7 · Documentation

Numerical Storage v0.15​

  • Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.

Release v0.15 · Documentation

2026-10-12​

Dungeon v1.1.1​

  • Paper 26.x, WORLD_PER_RUN: забег мог завершиться ошибкой The server did not create world 'dungeon_classic_...'. Копия шаблона сохраняла ID мира шаблона (data/paper/metadata.dat), поэтому сервер отклонял её как дубликат. Теперь копия получает собственный ID.

Документация · Журнал изменений Dungeon

2026-10-08​

Dungeon v1.1​

Полная переработка, построенная вокруг ранов: изолированные миры, сгенерированные подземелья, NPC для каждого рана и ванильные мобы. Прочитайте заметку о миграции перед обновлением с 0.10; все изменения перечислены в журнале изменений Dungeon.

  • Раны: у каждого рана своё состояние и свой журнал. Запуск рана выполняется по принципу «всё или ничего», а стоимость входа возвращается, если запуск не удался. /tw reload и Publish подхватывают запущенные раны, а не завершают их.
  • Изоляция: три режима для каждого подземелья (SLIME_CLONE, WORLD_PER_RUN, SHARED_WORLD_SLOTS) или AUTO.
  • Сгенерированные подземелья: шаблоны комнат, соединители, пулы, генераторы и аффиксы, с редактором в игре для дверей и маркеров.
  • NPC и мобы: NPC для каждого рана из любого определения сущности, видимые только участникам рана; ванильные боевые мобы, создаваемые один раз за ран, с ограничением на число живых.
  • Тексты: каждый текст для игрока — редактируемый сниппет. Только Paper.
  • Ответы команд: каждый ответ команд /tw dungeon, включая административные, — редактируемый сниппет (content.dungeon_command.).
  • Статистика: хранится по профилю MMOProfiles, если этот плагин установлен, и по игроку в остальных случаях.
  • Миры Paper 26.x: миры, хранящиеся по схеме Paper 26.x (dimensions/minecraft/<имя>), находятся для SHARED_WORLD_SLOTS и копируются для WORLD_PER_RUN.

Документация

MythicMobs NPC v5.0​

  • NPC в подземельях: при выключенном ticking NPC, размещённый Dungeon 1.0, виден только участникам своего рана, а клик даёт одно взаимодействие нужному игроку.
  • Bone Visibility Data и Attachment Data теперь применяются к модели NPC, при включённом или выключенном ticking, и снова после каждого возрождения.
  • Play Animation: force теперь останавливает другие анимации, запущенные действием на этом NPC; speed не больше 0 воспроизводится с нормальной скоростью.
  • MythicMob Skill Objective: skillName теперь работает через механику MythicMobs typewriterSkill{name=..} (псевдоним twskill), добавленную в навык и сопровождаемую /mm reload. Прогресс хранится в fact, а прежний прогресс переносится автоматически. Механика сохраняется при публикации из веб-редактора; после полной остановки и запуска Typewriter консоль запрашивает /mm reload.
  • Цель на добычу: названия предметов и мобов добычи читаются с их цветами (раньше это был технический текст), а отметка о выполнении ✔ теперь такая же, как в других расширениях целей.

Документация

MMOItems v2.4​

  • Advanced Tooltip Config: overrideDefaultLore теперь учитывается. Если он выключен, система отключена или запись отсутствует, весь лор MMOItems показывается на одной странице, без разбиения на страницы и без сравнения.
  • Теги лора: теги формата лора MMOItems (<page_break>, <category_image>, <pagination_indicator>, <comparison_indicator>, <requirement_met>, <requirement_not_met>, <total_pages>, <current_page>, <comparison_value>, <comparison_sign>) теперь всегда заменяются или удаляются, и игрок больше не видит их как необработанный текст.
  • Творческий режим: разбиение на страницы и расширенный лор применяются только в выживании и приключении. В творческом режиме лор MMOItems остаётся нетронутым (включая теги), потому что творческий клиент отправляет предметы обратно в том виде, в каком показывает их, и переписанный лор изменил бы настоящий предмет.
  • Поля записи теперь стартуют с рабочими значениями, когда запись создаётся в веб-редакторе (isEnabled, overrideDefaultLore и enableComparisonTags включены, paginationKeybind SWAP_OFFHAND, comparisonKeybind SNEAK, statsStartOnPage 2, символы и подсказки по умолчанию).

Документация

Shops v1.11​

  • perPlayer теперь даёт каждому игроку собственный запас каждого предмета; сброс пополняет запасы всех. Лимиты сохраняют свою область действия.
  • defaultRefreshTicks и refreshTicks предмета перерисовывают открытый магазин, когда меняется показанный запас (только для конечных запасов; 0 у магазина означает отсутствие автоматической проверки).
  • guiSlot предмета закрепляет предмет в фиксированном слоте области содержимого на каждой странице; предмет, который невозможно разместить, переносится в свободную ячейку или сообщается в консоли.
  • Выключенный sellAllEnabled теперь отклоняет действие «продать всё» с сообщением cannotSellMessage.
  • Ответы команд, значки тренда, лор Limited/Unlimited, строки цен, названия по умолчанию, текст без цены и формат длительности теперь редактируются; день в кулдауне по умолчанию записывается как d (раньше j).

Релиз v1.11 · Документация

GUI v0.19​

  • audioDefaults в gui_settings теперь применяется как запасное значение: звук, оставленный пустым в действии Open GUI, берётся оттуда, звук за звуком.
  • Прокручиваемые раскладки получают стрелки по умолчанию, пока включён showDefaultButtons (по умолчанию): по одной на каждое направление без записи в buttons, показываемой только когда содержимое можно прокрутить в эту сторону, и никогда на занятой ячейке. Существующие прокручиваемые меню получают стрелки; установите showDefaultButtons в false, чтобы оставить их как было.
  • Новое поле defaultStep у прокручиваемых раскладок и новый список scrollArrows в gui_settings (direction, item, name, x, y) для изменения стрелок по умолчанию.
  • Новое поле texts в gui_settings: кнопки Confirm и Cancel и строка прогресса хранилища редактируются. «Confirmer» заменено на «Confirm». Исправлен разделитель в навигационной цепочке, который отображался искажённо.

Релиз v0.19 · Документация

Quest Codex v2.15​

  • Разрешение typewriter.codex.open теперь объявляется расширением, по умолчанию только для операторов, поэтому оно отображается в плагинах разрешений, таких как LuckPerms.
  • Подписи навигации, подписи сортировки, заголовки меню по умолчанию и сообщение о неизвестной категории теперь редактируются (navLabels, sortTexts, mainMenuTitle, trackedQuestsTitle, unknownCategoryMessage).

Релиз v2.15 · Документация

Vote System v0.9​

  • Vote Config теперь читается: cooldownSeconds больше 0 позволяет игроку проголосовать снова через указанное число секунд (счётчики накопительные), а debug записывает в журнал принятые и отклонённые голоса.
  • Голоса, сохранённые до появления кулдауна, датируются первым контактом после обновления, поэтому их кулдаун начинается с этого момента.
  • Ответы команд /tw vote — редактируемые сниппеты (content.vote.).
  • Цвета MiniMessage: сообщение о закрытии, новое blockedMessage и два текста Vote Message теперь читаются как MiniMessage, с подставленными плейсхолдерами (раньше теги показывались как есть). Ответы команд по умолчанию цветные.
  • Отклонённый голос действительно отклонён: triggers и modifiers у Vote Action выполняются только если голос записан; отказ больше не показывает сообщение о принятии, и ничего не срабатывает дважды. При отказе показывается closedMessage (после даты окончания) или новое blockedMessage (пока не истекла пауза) и срабатывают новые refusedTriggers. Каждый отказ записывается в лог при включённом debug.
  • Новые плейсхолдеры vote_has_voted_<id> и vote_closed_<id> (1 или 0), а также vote_remaining_<id> (секунды до даты окончания, 0 без даты).

Релиз v0.9 · Документация

Discord v0.13​

  • triggers у Webhook Fact Event теперь выполняются после публикации вебхука, для игрока, чьё изменение fact было опубликовано.
  • Новый triggerCooldownSeconds (по умолчанию 1) у Webhook Fact Event: защита от зацикливания между двумя срабатываниями triggers для одного игрока; 0 отключает её.

Релиз v0.13 · Документация

Custom Biome v0.9​

  • Explore Biome Objective теперь работает: biomes и requireAll читаются, когда игрок входит в биом, а новое поле triggers запускает entries, когда цель выполнена и активна. Цель сама записывает открытие; Enter Biome Event не нужен.
  • Ответы команд /tw biome и текст unknown плейсхолдеров биома — редактируемые сниппеты (content.custombiome.).
  • Paper 26.3: пользовательские биомы снова регистрируются; на 26.3 они не загружались (живая инъекция и запасной вариант через датапак).

Релиз v0.9 · Документация

Numerical Storage v0.14​

  • optionalButtons меню и каждого подменю теперь отрисовываются: предметы только для отображения в своих slots, которые заменяют всё, что раскладка помещает в тот же слот.
  • profileMode теперь использует MMOProfiles: один баланс на профиль MMOProfiles. Без MMOProfiles это баланс игрока. С MMOProfiles и без активного профиля (выбор профиля или после /mmoprofiles quit) показывается баланс 0, а запись отклоняется: админские команды и действия меню отвечают настраиваемым noActiveProfileMessage (в adminMessages) и ничего не записывают. Проценты профиля начисляются при его выборе.
  • Ответы административных команд редактируются (adminMessages); тексты плейсхолдеров и формат длительности — сниппеты (numericalstorage.placeholder., numericalstorage.duration.).
  • Плейсхолдеры загружают хранилище при входе, поэтому показывают сохранённый баланс, а не пустой, пока кэш холодный.
  • Плейсхолдеры и кнопка повышения уровня теперь учитывают profileMode; /tw ns add/remove отвечают на неверную сумму или отсутствующий артефакт редактируемыми сообщениями.

Релиз v0.14 · Документация

Puzzle v0.6​

  • isShared теперь делит прогресс группы (группы fact головоломки): первое решение засчитывается группе, fact поднимается один раз, а каждый участник получает сообщение о завершении, onComplete и шаг цепочки по одному разу (отсутствовавший участник получает их при возвращении).
  • Игрок получает завершение головоломки не более одного раза, даже при смене группы, пока его не затронет сброс администратором. /typewriter puzzle admin reset <player> <id> вновь открывает общую головоломку для всей группы.
  • Puzzle Artifact теперь обязателен для общих головоломок: без него перезапуск снова выплачивает завершение, а возврат к более старой сборке теряет общую запись.
  • Тексты для игроков и ответы команд редактируются: сообщения каждой головоломки и Puzzle Menu — поля записи, а ответы /tw puzzle — сниппеты (content.puzzle.). Тексты, которые по умолчанию были на французском, теперь на английском; страница, сохранившая французский текст, оставляет его.
  • Исправлено, блоки на стороне клиента: нарисованный блок больше не исчезает при отмене клика. Поле перерисовывается через один тик после каждого отменённого клика (зеркала Laser Grid исчезали при правом клике вместо поворота, блоки Block Push исчезали при отклонённом толчке, то же касалось кликов в Memory, Pattern, Item Frame и Pedestal).
  • Исправлено, Block Push: блок, возвращённый на стартовую клетку, больше не отскакивает и не исчезает, а целевая лунка рисуется заново, когда блок был протолкнут через неё и дальше. Отклонённый толчок засчитывается как одна ошибка на блок и целевую клетку, а не на каждый клик, поэтому удержание клика у стены не расходует maxAttempts. Оставляйте стартовые клетки в мире пустыми (воздух). allowPull по-прежнему не действует (не реализовано).
  • Исправлено, Lever Order: рычаги, покоящиеся включёнными, возвращаются в исходное положение после неверного порядка, а их переключение видно. Клик во время паузы после ошибки больше не доходит до настоящего рычага.
  • Исправлено, решённые головоломки: решённые Block Push, Combination Lock, Lever Order и Laser Grid неактивны (нет поля, нет отменённых действий) и больше не поглощают клики по своим рычагам и кнопкам, когда игрок снова в их аудитории. Решённый Pedestal больше не поглощает подбор своего предмета.
  • Laser Grid: луч теперь рисуется через центр блоков и поворачивает точно на каждом зеркале (раньше был смещён). beamDensity — число частиц на блок, вершины рисуются всегда.
  • Laser Grid, maxBeamLength: новое поле, по умолчанию 64 блока (0 или меньше означает 64, никогда не безлимитно). Поле с более длинным лучом должно увеличить значение. Луч никогда не загружает чанк: он останавливается на краю загруженного мира.
  • Combination Lock: цифры нумеруются с 0 (первая указанная позиция — цифра 0); справка объясняет это на примере. Значение code вне диапазона цифр теперь записывает предупреждение в консоль вместо того, чтобы молча игнорировать все нажатия.

Релиз v0.6 · Документация

Corpse v0.6​

  • Фильтр миров: allowedWorlds и excludedWorlds в corpse_settings определяют, в каких мирах смерть оставляет труп. Пустой список разрешённых означает все миры. Поддерживаются подстановки * и ? (dungeon_*), имена миров и ключи измерений (minecraft:the_nether), а исключение всегда имеет приоритет. Вне разрешённых миров смерть остаётся ванильной.
  • filteredWorldDeath: в мире, который отклоняет фильтр, VANILLA_DEATH_SCREEN (по умолчанию) сохраняет обычную смерть Minecraft, тело и экран смерти которой рисует клиент, а INSTANT_RESPAWN возрождает игрока на следующем тике без экрана смерти. Предметы и опыт выпадают, как в ванили. Не действует, если оба списка пусты.
  • Каждый текст редактируется: сообщения, подписи и материалы меню, формат путевой точки с восемью стрелками направления, ответы /corpses, имя трупа по умолчанию и текст цели возвращения. Имя игрока экранируется и никогда не становится кликабельным тегом.
  • Новые настройки interactionReach (6 блоков; сервер не проверял расстояние клика), interactionCooldownMillis и unknownWorldLabel. Определение можно выбирать и по ключу измерения, а заголовок /corpses list редактируется. /corpses list и clear действуют на весь сервер. Новое необязательное поле outOfReachMessage (по умолчанию пусто: сообщения нет).
  • Проверка потери и дублирования предметов: смерти, обыск и хранение были проверены; исправления ниже закрывают все найденные пути потери или дублирования.
  • Исправлено, смерти: смерть, отменённая другим плагином (тотем, воскрешение), больше не забирает снаряжение игрока; keepInventory и keepLevel соблюдаются (при keepInventory трупа нет), а предметы, которые другие плагины сохраняют для игрока, больше не дублируются в труп. Если труп создать не удалось, предметы выпадают как обычно.
  • Исправлено, обыск: взятие предмета при полном инвентаре больше не дублирует часть, которая поместилась, а два клика, борющиеся за один труп, больше не могут выдать его содержимое дважды.
  • Исправлено, хранилище: перезапуск больше не возвращает уже взятые предметы, а нечитаемый или наполовину записанный файл хранилища больше не стирает сохранённые трупы. Восстановленные трупы сохраняют позу, свечение, имя и анимацию (но не скин и броню владельца).
  • Сообщение о возрождении, путевая точка и цель используют последний труп, а меню обыска предупреждает до открытия, а не после первого клика.

Релиз v0.6 · Документация

MythicMobs v0.11​

  • mythic_spawner.group теперь читается: спавнер активируют только участники группы, criteria проверяется для этой группы, а у каждой группы свой прогрев и кулдаун; состояние группы сбрасывается, когда ни одного участника нет в сети.
  • Строку MythicMob Kill Objective в трекере квестов можно менять сниппетами advancedQuest.display и advancedQuest.completed.

Релиз v0.11 · Документация

Enchantment Creator v0.11​

  • Agricultural Harvest теперь читает событие разрушения блока и собирает созревшие культуры вокруг разрушенного блока (radius ограничен 8), а не блок, на который смотрит игрок.
  • Agricultural Harvest: новые поля particle, particleCount, sound, soundVolume и soundPitch.
  • То, что игрок вводит в /enchantcreator give (название зачарования), показывается в ответах как есть и никогда не воспринимается как форматирование.

Релиз v0.11 · Документация

TextDisplayDialogue v2.4​

  • Редактируемые тексты: все 15 сниппетов теперь читаются. Макеты, имена говорящих, строки текста, подсказки, строки вариантов и их префиксы в диалогах Spoken, Option и Player option, а также в субтитрах кинематики изменяются в plugins/Typewriter/snippets; значения по умолчанию воспроизводят прежнее отображение.
  • Плейсхолдер таймера: %typewriter_textdisplaydialogue_timer% теперь зарегистрирован в PlaceholderAPI и работает вне диалогов (0, когда таймер не запущен).
  • Ещё два редактируемых сообщения: textdisplay.inventory.blocked (инвентарь заблокирован во время диалога) и textdisplay.error.init (не удалось запустить отображение); пустой сниппет скрывает сообщение. Причина ошибки инициализации теперь попадает только в журнал сервера: игроку не показываются подробности исключения. Диалог Player option также читает textdisplay.speaker.format и сниппеты textdisplay.option.* (то же отображение по умолчанию).
  • Поле audioProfile удалено из textdisplay_spoken: оно никогда не читалось.
  • Только Paper: Folia не поддерживается.

Документация

Удалено из документации​

  • BTC Nameplates: объединён с UiCore (те же entries, /nameplates); старые страницы перенаправляют на UiCore.
  • MMO Profile: заброшен, никогда не выпускался; его страницы удалены.

2026-10-02​

MythicMobs NPC v4.9.1​

Исправления для взаимодействий, анимаций и кинематографических сцен на Paper 26.x.

  • Клики: правый клик снова работает на Paper 26.x, а LEFT_CLICK и ALL теперь тоже срабатывают. Один клик запускает диалог один раз, а не дважды, и /tw reload больше не ломает клики из-за NoClassDefFoundError.
  • Play Animation: действие с пустой скоростью воспроизводилось замороженным на первом кадре; теперь оно воспроизводится с нормальной скоростью. Оно также работает на NPC с выключенным ticking, воспроизводится поверх анимаций простоя, ходьбы и навыков MythicMobs и ждёт модель, если она ещё не загружена.
  • Кинематографические сцены в другом мире: NPC сцены с сущностью оставался в предыдущем мире игрока, поэтому появлялся только после нескольких запусков. Теперь он появляется уже при первом запуске, вместе со своей анимацией.
  • Движение в сценах: более плавная ходьба, больше нет переключений между простоем и ходьбой и нет мерцания ModelEngine на близком расстоянии.
  • Очистка: невидимые носители NPC больше не накапливаются в мире после кинематографических сцен.

Документация

CraftEngine v1.1​

  • Аудитория зоны квеста: dispose() всегда очищает своё состояние и сбрасывает флаг освобождения, поэтому /tw reload больше не оставляет утёкший слушатель, удерживающий прежний загрузчик классов расширения.

Документация

2026-09-19​

GUI v0.18​

  • Предупреждение о перекрытии слотов теперь называет gap и напоминает, что это шаг, а не интервал: gap: 1 означает соседние слоты, а не один пустой слот между ними. Повторяющийся слот, сталкивающийся с декорацией, размещённой между двумя его копиями, — самая частая причина этого предупреждения.
  • Меню, написанные по формуле Quest Codex до версии 0.3.0, где применялся шаг gap + 1, попадают именно сюда (см. Quest Codex v2.14).

Релиз v0.18 · Документация

Quest Codex v2.14​

  • Задокументировано несовместимое изменение, внесённое в Quest Codex 0.3.0 и никогда не объявлявшееся. До этого маркеры codex использовали собственную формулу повторения, где gap был интервалом (шаг gap + 1). Начиная с 0.3.0 они используют формулу движка GUI, где gap — это шаг: count: 3, direction: right, gap: 1 от x=2 теперь даёт x=2, 3, 4 вместо 2, 4, 6.
  • Поэтому меню, написанное до 0.3.0, размещает свои маркеры через один слот и может столкнуться с декорацией между ними. Чтобы вернуть прежние интервалы, удвойте шаг: gap: 1 становится gap: 2. Семантика шага сохраняется.
  • Пронумерованные маркеры теперь сбрасывают gap вместе с count и repeatY, поэтому проверка меню больше не сообщает об «осиротевшем» повторении для них.
  • Собрано под GUI v0.18.

Релиз v2.14 · Документация

2026-09-14​

GUI v0.17​

  • gap, равный 0, больше не складывает все повторяющиеся копии в исходную ячейку. Веб-редактор сериализует нетронутый gap как 0: QUEST_SLOT с count: 7 и direction: right давал семь маркеров в одной позиции и предупреждение «Slot overlap», которого вы не писали. Теперь gap приводится как минимум к 1, как count и repeatY.
  • Исправление находится в общем коде повторения слотов, поэтому Quest Codex и Shops получают его без пересборки.

Релиз v0.17 · Документация

Shops v1.10​

  • Бартер: цены в предметах. Новый priceMode: ITEMS продаёт товар за один или несколько предметов вместо валюты. itemPrice у предмета перечисляет стоимость (предмет и количество на каждую покупаемую штуку); defaultItemPrice у магазина распространяется на каждый товар ITEMS, у которого её нет. Список товара заменяет список магазина и никогда не добавляется к нему.
  • Товар ITEMS, для которого нигде не задана цена, отклоняется и записывается в лог, а не отдаётся даром. Оплата симулируется по всему инвентарю до того, как что-либо будет удалено, а место для покупаемого предмета проверяется первым, поскольку при бартере возврата нет.
  • Новые cannotAffordItemsMessage (токены {missing}, {amount}) и токен описания {item_price}, по одной строке на каждый требуемый предмет. Строки {buy} и {sell} у такого товара отбрасываются, а плейсхолдеры buy_price / sell_price показывают тире.
  • «Купить максимум» работает с бартерными товарами. Товар ITEMS нельзя продать обратно за валюту: его цена продажи равна нулю.
  • Пересобрано под GUI v0.17.

Релиз v1.10 · Документация

2026-09-09​

Puzzle v0.5​

  • Исправлено: NoClassDefFoundError для PuzzleRenderers после перезагрузки расширения. Расширение регистрировало два слушателя Bukkit в плагине-движке и никогда их не удаляло, поэтому старые экземпляры продолжали срабатывать на закрытом загрузчике классов. Теперь оба снимаются с регистрации при остановке расширения, что также прекращает накопление лишней копии при каждой перезагрузке.
  • Визуальное обновление, уже запланированное к моменту остановки расширения, больше не может вызвать загрузку класса на мёртвом загрузчике.

Релиз v0.5 · Документация

2026-09-08​

Shops v1.9​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.
  • Собрано под GUI v0.16.

Релиз v1.9 · Документация

Discord v0.12​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.12 · Документация

Companion v0.10​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.10 · Документация

Corpse v0.5​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.5 · Документация

Custom Biome v0.8​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.8 · Документация

InputTracker v0.5​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.5 · Документация

Numerical Storage v0.13​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.13 · Документация

Puzzle v0.4​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.4 · Документация

Vanilla v1.4​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Тексты прогресса целей (цели сбора, подсчёта и проверки фактов) теперь разбираются с учётом игрока, поэтому плейсхолдеры в них разрешаются для этого игрока.

Релиз v1.4 · Документация

Vote System v0.8​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.8 · Документация

Enchantment Creator v0.10​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Действия механик теперь планируются через собственный синхронный диспетчер Typewriter вместо приватного вспомогательного планировщика расширения.

Релиз v0.10 · Документация

MMO Inventory v0.7​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.7 · Документация

MythicMobs v0.10​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.10 · Документация

GUI v0.16​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Исправлены строки таблицы лидеров, описывающие зрителя: строка для игрока из рейтинга теперь разрешает свой предмет, название и описание Var относительно этого игрока, а не того, кто открыл меню, поэтому каждая строка больше не показывает значения зрителя. Строки мира, группы и игроков не в сети возвращаются к зрителю.

Релиз v0.16 · Документация

Quest Codex v2.13​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.
  • Собрано под GUI v0.16.

Релиз v2.13 · Документация

Tracking v0.11​

  • Пересобрано под движок Typewriter 0.9.0-beta-177.
  • Изменений в поведении нет.

Релиз v0.11 · Документация

2026-09-06​

Shops v1.8​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.
  • Собрано под GUI v0.15.

Релиз v1.8 · Документация

Discord v0.11​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.11 · Документация

Companion v0.9​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.9 · Документация

Corpse v0.4​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Табличка трупа теперь использует CustomNameProperty движка.
  • Собрано под GUI v0.15.

Релиз v0.4 · Документация

Custom Biome v0.7​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.7 · Документация

InputTracker v0.4​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.4 · Документация

Numerical Storage v0.12​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.12 · Документация

Puzzle v0.3​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.3 · Документация

Vanilla v1.3​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Активности сущностей (обнаружение по видимости, следование, облёт по орбите, избегание, слух, обоняние, патрулирование и подобные) перенесены на жизненный цикл активностей движка 0.9. Названия записей не изменились.

Релиз v1.3 · Документация

Vote System v0.7​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Несовместимое изменение: поле vote_action переименовано. option заменено на optionIndex — простое число, считаемое с 0. Заново выберите вариант в каждом существующем vote_action.
  • Несовместимое изменение: поле vote_message разделено. message заменено на notVotedMessage и alreadyVotedMessage; оставьте второе пустым, чтобы не отправлять сообщение игрокам, которые уже проголосовали.
  • vote_data теперь по умолчанию задаёт artifactId равным vote_storage: задайте фиксированное название, чтобы сохранять бюллетени при перезагрузках.
  • В редакторе появились новые записи vote_config (с debug и cooldownSeconds), vote_fact и vote_cast_event.

Релиз v0.7 · Документация

Dialog Menu v0.7​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.7 · Документация

Enchantment Creator v0.9​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.9 · Документация

MMO Inventory v0.6​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.6 · Документация

MythicMobs v0.9​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.9 · Документация

GUI v0.15​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.15 · Документация

Quest Codex v2.12​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.
  • Собрано под GUI v0.15.

Релиз v2.12 · Документация

Protection v1.3​

  • Устарело: это последний релиз Protection. Для новых развёртываний заменой служит нативная система регионов Typewriter.
  • Расширение сохраняется для существующих серверов и не будет получать новых возможностей.
  • Пересобрано под движок Typewriter 0.9.0-beta-176.

Релиз v1.3 · Документация

Tracking v0.10​

  • Пересобрано под движок Typewriter 0.9.0-beta-176.
  • Изменений в поведении нет.

Релиз v0.10 · Документация

2026-08-29​

GUI v0.14​

  • Таблицы лидеров по фактам. Новое определение gui_leaderboard ранжирует игроков, миры или группы Typewriter по одному или нескольким значениям фактов и отображается новой раскладкой leaderboard в любом пуле open_gui. Строки принимают {rank}, {name}, {score}, {group}, {world} и {score_<fact_id>}.
  • Новый артефакт gui_leaderboard_population хранит последние известные значения игроков не в сети, поэтому таблица лидеров ранжирует не только тех, кто подключён.
  • Новый параметр dropOnClose у слотов хранилища выбрасывает оставшееся содержимое к ногам игрока при закрытии, нажатии Escape и отключении.
  • Исправлено: слоты хранилища temporary никогда не очищались, а Shift + правый клик по подходящему предмету на курсоре забирал предмет вместо того, чтобы вложить его.
  • Пустой viewPermission / clickPermission больше не считается правом: незаданные ограничения, сохранённые веб-редактором, раньше скрывали слот или вкладку от всех не-операторов.
  • Проверка при запуске теперь знает раскладку leaderboard и сообщает об области рангов за пределами инвентаря.

Релиз v0.14 · Документация

Quest Codex v2.11​

  • Пересобрано под GUI v0.14.

Релиз v2.11 · Документация

Shops v1.7​

  • Пересобрано под GUI v0.14.

Релиз v1.7 · Документация

Corpse v0.3​

  • Пересобрано под GUI v0.14.

Релиз v0.3 · Документация

Numerical Storage v0.11​

  • Пересобрано под GUI v0.14.

Релиз v0.11 · Документация

2026-08-24​

Shops v1.6​

  • Новое дерево команд оператора /tw shop admin: список магазинов, просмотр определения, управление сессиями игроков, сброс во время работы, управление запасом прямых предметов и история транзакций.
  • Новое право typewriter.shop.admin (только для операторов). typewriter.shop.open по умолчанию остаётся доступным игрокам.
  • Ручной сброс использует то же поведение, что и автоматический, и пересчитывает следующий запланированный сброс.
  • Исправлена регистрация права публичной команды, чтобы не-операторы могли открывать магазины.

Релиз v1.6 · Документация

2026-08-16​

Discord v0.10​

  • Вебхуки фактов. Новый webhook_fact_event публикует изменение факта в любое назначение webhook_definition для областей игрока, группы Typewriter и глобальной, с необязательными аудиториями, условиями значений, шаблонами сообщений и embed, ветками форума и упоминаниями ролей. Групповая и глобальная области устраняют дублирование обратных вызовов от игроков, наблюдающих за одним и тем же фактом.
  • Связь с Discord полностью необязательна: без discord_link_manifest расширение больше не инициализирует мосты Discord и не разрешает классы JDA.
  • Отключённая или неполная JDA сообщается клиентом, а не вызывает NoClassDefFoundError в серверном потоке.
  • Публичный релиз теперь включает JDA 6.5.0 и её зависимости времени выполнения.

Релиз v0.10 · Документация

2026-08-21​

GUI v0.13​

  • Живые предметы слотов. itemProvider перестраивает предмет, название и описание слота при отрисовке. Слоты раскладки разбираются один раз, и тот же список возвращается при каждой отрисовке, поэтому плейсхолдер или обратный отсчёт в описании разрешался один раз и замораживался — autoRefreshTicks бесконечно перерисовывал одинаковый инвентарь.
  • Одновременно открывается только одно окно. GuiFactory.open() завершается тиком позже, поэтому до этого верхний инвентарь всё ещё остаётся предыдущим представлением, и каждая отрисовка решала открыть заново. Второе открытие закрывало первое окно, это закрытие воспринималось как настоящее, и сессия уничтожалась, пока её меню оставалось на экране — после чего все кнопки были мертвы.
  • Анимация с длительностью 0 больше не считается анимацией. Панель проставляет блок анимации по умолчанию на каждый слот, поэтому декоративные предметы рисовались с индексом 0, а запланированная ими перерисовка гонялась с отложенным открытием.
  • Помеченная кнопка сохраняет собственные взаимодействия автора. Заполнение buttonType раньше отбрасывало весь список взаимодействий, поэтому маркер, который никто не заявил (неверный префикс, неверный регистр или отсутствие нужного расширения на этом экране), становился предметом, на который кликали вхолостую, без каких-либо сообщений в консоли.

Релиз v0.13 · Документация

Quest Codex v2.10​

  • О меню, которые не могут отрисоваться, сообщается при запуске, пока консоль ещё читают, а не молчаливым сбоем в момент клика. Каждое сообщение указывает способ исправления, а не симптом.
  • Однократное преобразование страниц, созданных до шасси open_gui. Пул раскладок переехал из category_menu в связанную запись open_gui, поэтому страница, написанная по старой схеме, сохраняла раскладку, которую движок больше не читает: полностью настроенную в панели, но ничего не отображающую.
  • Заголовки достижений проходят через настоящее преобразование MiniMessage в JSON, поэтому форматирование, написанное в названии квеста, сохраняется в генерируемом им достижении.
  • Требуется OmniGUI v0.13.

Релиз v2.10 · Документация

Puzzle v0.2​

  • Новый activationRadius у каждой головоломки, по умолчанию 16 блоков. Головоломка отрисовывается и работает только для игрока, находящегося в мире её собственных позиций, в пределах этого радиуса от одной из них. 0 отключает только проверку расстояния — проверка мира действует всегда.
  • Исправлено: головоломка рисовалась в каждом измерении. Клиентские блоки и частицы несут координаты, но не мир, поэтому лазерная сетка, настроенная в Верхнем мире, рисовалась перед игроком в Нижнем мире, в Крае или в любом другом мире, который он посещал.
  • Исправлено: головоломка запускалась, как только игрок входил в её аудиторию, независимо от расстояния. Последовательность на память могла проиграть весь свой узор для того, кто находится за тысячи блоков или в другом мире. Теперь последовательность начинается, когда игрок добирается до поля.
  • Уход в сторону очищает поле на клиенте и отменяет ожидающие анимации. Бюджет попыток, перезарядка после неудачи, timeLimit и lifespan теперь включаются по прибытии, а не при входе в аудиторию.

Релиз v0.2 · Документация

Custom Biome v0.6​

  • Несовместимое изменение: biome_audience удалён. Он отвечал на вопрос «находится ли этот игрок в этом биоме», читая собственный биом мира, который клиентское наложение никогда не меняет, — поэтому для каждого биома, который рисует это расширение, он отвечал «нет», что бы игрок ни видел на экране. Никакая конфигурация не заставляла его работать.
  • Его заменяют две записи: biome_overlay_audience (есть ли у этого игрока это наложение) и biome_region_audience (находится ли этот игрок внутри этого региона, включая мир). Страницы, использующие biome_audience, нужно перенаправить на одну из них.
  • Аудитории регионов сопоставляются как по миру, так и по координатам, поэтому регион, определённый в одном мире, больше не совпадает с теми же координатами в другом. ignoreY превращает регион в бесконечную колонну.
  • /tw biome region <entry> заполняет два угла записи из вашего текущего выделения WorldEdit, вместо ручного ввода координат.
  • Наложения для отдельных игроков отслеживаются по чанкам и по владельцам: несколько наложений могут покрывать один чанк, побеждает одно, а его очистка восстанавливает настоящий биом этого чанка, а не последнюю нарисованную палитру.

Релиз v0.6 · Документация

Shops v1.5​

  • Пересобрано под OmniGUI v0.13. У GuiSlot появился параметр itemProvider времени отрисовки, что изменило конструктор, с которым компонуются его вызывающие стороны, поэтому JAR v1.4 вызывал NoSuchMethodError в момент открытия магазина на обновлённом движке GUI — инвентарь так и не появлялся.
  • Изменений в поведении нет. Две версии идут вместе: v1.4 не может работать на OmniGUI v0.13, а v1.5 не может работать на v0.12.

Релиз v1.5 · Документация

Numerical Storage v0.10​

  • Пересобрано под OmniGUI v0.13 из-за того же изменения сигнатуры GuiSlot: JAR v0.9 вызывал NoSuchMethodError при открытии меню хранилища, и меню так и не появлялось.
  • Изменений в поведении нет, и второй миграции нет: хранилище схемы v2 читается точно так же, как его записывал v0.9.

Релиз v0.10 · Документация

Corpse v0.2​

  • Пересобрано под OmniGUI v0.13 из-за того же изменения сигнатуры GuiSlot: JAR v0.1 вызывал NoSuchMethodError при обыске трупа, поэтому меню добычи никогда не открывалось, а труп оставался стоять с недоступным инвентарём.
  • Изменений в поведении нет. Сохранённые трупы, их инвентари и правила их защиты читаются как раньше.

Release v0.2

2026-08-12​

Релиз v0.2 · Документация

GUI v0.12​

  • Расширенные меню. extendToPlayerInventory у open_gui превращает собственные 36 слотов игрока в четыре дополнительных ряда меню, давая холст из 10 рядов. Проекция существует только на клиенте: в настоящий инвентарь никогда ничего не пишется, и он восстанавливается при закрытии меню.
  • Корневая раскладка, идентификатор которой заканчивается на _extended, сама включает эту проекцию, поэтому общее шасси может поставляться в обычном и расширенном вариантах, и ни одному меню не нужно повторять флаг.
  • DynamicMarkers превращает повторяющиеся маркеры содержимого в пронумерованные (QUEST_SLOT#0, QUEST_SLOT#1, …) до разбора, поэтому расширениям больше не нужно хранить у себя частную копию этой семантики.
  • Повторение слотов ограничено, и о нём сообщается: позиции за пределами сетки отбрасываются и записываются в лог с идентификатором раскладки и отклонёнными координатами. Редактор предупреждает, когда count/gap/repeatY заданы без direction, и выдаёт ошибку для неизвестного.
  • Задокументировано, что gap — это шаг (1 = соседние), а repeatY повторяет по оси, перпендикулярной direction.
  • Исправлено наследование mainLayoutId: пустое значение у потомка раньше побеждало унаследованное, поэтому страница, наследующая всё своё шасси, разрешала несуществующую раскладку и отображалась пустой — без единой кнопки, способной принять клик.
  • У перекрытия слотов один владелец: когда два слота претендуют на одну ячейку, побеждает тот, что несёт поведение, и при отрисовке, и при клике, а о коллизии сообщается один раз.
  • Проверка при запуске теперь сообщает только о том, что действительно не работает. Проверки, помечавшие отсутствие необязательных вещей, удалены — frame.view.unresolved, slot.outOfFrame, layout.unreferenced — потому что в шаблонной архитектуре они описывают замысел, а не дефект. Остаются те, что называют записанное намерение, которое не удалось: представление, указывающее на отсутствующую раскладку, слот, выходящий за инвентарь, два слота одной природы, сталкивающиеся в одной раскладке.

Релиз v0.12 · Документация

Shops v1.4​

  • Режим вкладки. baseMenuId делает магазин вкладкой общего меню: его пул раскладок и представления сливаются под шасси, с views, defaultViewId и прямоугольником содержимого (contentX, contentY, contentColumns, contentRows). Если оставить пустым, магазин открывается точно как раньше.
  • Поддержка расширенного шасси: магазин, открытый внутри расширенной оболочки, теперь получает холст из 10 рядов.
  • Добавлены defaultNameFormat и defaultLoreFormat. Предмет, не задающий название или описание, наследует формат магазина; предмет, задающий собственные, сохраняет их нетронутыми — формат магазина заполняет пробелы и никогда не переопределяет формулировки автора.
  • Оба принимают одни и те же токены: {item}, {buy}, {sell}, {stock}, {stock_max}, {currency}. Строка описания, запрашивающая недоступную цену, отбрасывается, а не отображается пустой.
  • Добавлено ShopTransactionEvent, срабатывающее после завершения покупки или продажи. Это точка, к которой подключаются другие расширения — передача в Discord, журнал аудита, — без того, чтобы Shops знал об их существовании. Оно объявляется и никогда не отменяется.
  • Добавлен notificationWebhookId. Shops его не разрешает и не знает, что такое вебхук; идентификатор передаётся вместе с событием. Слушатель, выбросивший исключение, сообщается, а транзакция остаётся в силе — ничто не отменяет оплаченную покупку.
  • Исправлено: раскладка, лишившаяся своих маркеров, выбрасывалась из пула: экран магазина, целиком состоящий из маркеров, или ещё пустая вкладка молча исчезали.

Релиз v1.4 · Документация

Quest Codex v2.9​

  • Повышение до расширенного шасси теперь передаётся через наследование, а не через буквальный идентификатор раскладки. Шасси, корень которого назван иначе, чем shell_root, теряло расширенное оформление, и каждый элемент управления, привязанный к нижней полосе, исчезал при отрисовке — а значит, на него нельзя было кликнуть.
  • Расширение теперь собирается под движок GUI текущей волны релизов, а не под закреплённый старый jar. Оно было заморожено на v0.11 движка, поэтому каждое дополнение после этого релиза было для него невидимым.

Релиз v2.9 · Документация

Discord v0.9​

  • Расширение теперь называется Discord, а не Community. Каталог, пакет и название расширения следуют за этим. Названия записей не тронуты, потому что страницы их сериализуют.
  • DiscordClientService вынесен из функции привязки в собственный пакет: синхронизация чата, консоль и отчёты об ошибках — все используют его, поэтому он никогда не относился к привязке аккаунтов.
  • Вебхуки — это записи. webhook_definition один раз объявляет назначение Discord и используется везде по ссылке. Синхронизация чата, привязка аккаунта и отчёты об ошибках раньше несли каждая свою копию URL, имени пользователя и аватара — смена канала означала редактирование каждого манифеста без гарантии, что они указывают на одно и то же место.
  • WebhookService — это синглтон, который может внедрить любое расширение. HTTP-клиент раньше создавался вручную в инициализаторе и передавался каждому сервису, поэтому ничто снаружи не могло доставить сообщение.
  • У отчётов об ошибках пропал второй переключатель: пустое назначение и есть отключённое состояние.
  • Миграция. Страницы, написанные до этой версии, преобразуются при первом запуске: по одному webhook_definition на каждое отдельное назначение — манифесты с одинаковой настройкой делят одну запись — а манифесты перенаправляются на неё. Каждая переписанная страница сначала сохраняется в резервной копии в backup/community-webhook-v1/. Преобразование определяется формой, а не номером версии, поэтому повторный запуск ничего не меняет. Манифест, который был выключен, сохраняет свой URL в отключённом назначении, а не теряет его.
  • Объявления магазинов. shop_notification_manifest описывает, как транзакция магазина выглядит, когда попадает в Discord. Назначение в нём намеренно отсутствует — оно принадлежит магазину. Поэтому одно оформление служит каждому магазину, а каждый всё равно публикует в свой канал. Требует расширения Shops, но не зависит от него.

Релиз v0.9 · Документация

Puzzle v0.1​

  • Первый релиз.
  • Девять типов головоломок, каждый — цель Typewriter со своей аудиторией, прогрессом и триггерами: толкание блоков, подношения на пьедестал, последовательности на память, порядок рычагов, размещение узора, повороты рамок для предметов, кодовые замки, лазерные сетки и кооперативные нажимные плиты.
  • Всё, что рисует головоломка, происходит на стороне клиента — блоки, призрачные превью, подсветка и лазерные лучи отправляются игроку, который её решает. Двое игроков могут работать над одним полем, не видя прогресса друг друга, а мир никогда не изменяется.
  • Общий жизненный цикл у каждой головоломки: timeLimit, maxAttempts, cooldownOnFail, resetOnWrong, lifespan, подсказки и триггеры onStart / onComplete / onFail / onTimeout / onLifespanExpire.
  • isShared переключает головоломку с личного прогресса на одно поле, которое вся группа продвигает вместе.
  • puzzle_chain запускает несколько головоломок по порядку и срабатывает, когда последовательность решена; resetOnFail определяет, отправляет ли ошибка игрока обратно в начало.
  • puzzle_artifact сохраняет состояние головоломок, поэтому перезапуск в середине попытки не стирает прогресс.
  • puzzle_solved_fact и puzzle_active_fact передают прогресс остальной части вашего содержимого; puzzle_menu показывает в чате список головоломок и их состояние.
  • Совместимо с Folia: каждое чтение и запись мира выполняются в регионе, которому принадлежит головоломка.

Релиз v0.1 · Документация

Corpse v0.1​

  • Первый релиз.
  • Трупы отрисовываются один раз для каждого зрителя, как собственные отображения сущностей движка, поэтому их видят все поблизости, с анимацией моделей и тиками табличек на бэкендах BetterModel, BTC Mob NPC и MythicMobs NPC.
  • Работает на Folia: всё планирование идёт через планировщик, учитывающий Folia, а выпадение предметов, шары опыта и частицы выполняются в регионе, которому принадлежит труп.
  • Инвентарь, который хранит труп, переживает перезапуск, сбой или перезагрузку. Трупы хранятся в MySQL, когда он доступен, иначе в папке плагина, и восстанавливаются при запуске.
  • onlyOwnerCanLoot соблюдается, а обыск сопоставляется с идентификатором сущности самого трупа, а не с любым правым кликом в пределах четырёх блоков.
  • Определение трупа выбирается при каждой смерти по миру и приоритету, а его время жизни определяется один раз для этого трупа.
  • События on_corpse_spawn, on_corpse_loot и on_corpse_expire проходят через конвейер триггеров движка и публикуют владельца, добычу и позицию трупа как контекст.
  • displayName, showDisplayName, dropOnInteract, renderArmor, playDeathAnimation и deathAnimationName все учитываются, а большинство параметров — динамические значения, поэтому ими можно управлять через плейсхолдеры и факты.
  • Отрисованный клиентом контур свечения с настраиваемым цветом и звуки трупа, отправляемые каждому ближайшему игроку, а не всему миру.
  • Факты has_corpse и corpse_count, аудитория corpse_owner_audience, corpse_waypoint, показывающая расстояние и направление к собственному трупу игрока, corpse_recovery_objective и corpse_admin_command с подкомандами list и clear.
  • Окно защиты добычи, по истечении которого труп открывается для всех.
  • Меню добычи — это меню расширения GUI, а не голый инвентарь с собственным слушателем кликов, поэтому оно наследует маршрутизацию кликов движка, историю меню и проекцию расширенного инвентаря. Поэтому расширение GUI обязательно.

Релиз v0.1 · Документация

Custom Biome v0.5​

  • Пользовательские биомы существуют сразу. Определение регистрируется в живом реестре, как только оно сохранено, а не только после перезапуска сервера. Сгенерированный датапак теперь служит слоем сохранения, а не единственным путём.
  • Исправлено: сгенерированный датапак игнорировался сервером: формат пакета был жёстко задан старым значением, а записывался он в папку, которую сервер никогда не читает.
  • Исправлено: baseBiome не действовал ни на что, кроме равнин. Теперь биомы строятся из базового биома, хранимого сервером, и кодируются его собственным кодеком, поэтому появление мобов, особенности и карверы наследуются, а не теряются.
  • Исправлено: изменения биомов пробивали дыры в мире: обновление отправляло пакеты выгрузки чанков, за которыми сервер никогда не следовал повторной отправкой. Теперь клиенты получают обновление биома, построенное из реальных данных чанка.
  • Исправлено: leave_biome_event никогда не срабатывал. Слушатели входа и выхода перезаписывали состояние друг друга, поэтому результат зависел от порядка регистрации.
  • Исправлено: при рисовании записывался каждый блок колонны, а не один на ячейку 4x4x4, причём из вызывающего потока. Теперь записи планируются в регионе, которому принадлежит каждый чанк.
  • Биом, который сервер отказался бы сериализовать, теперь отклоняется при регистрации с указанием проблемного значения. Раньше он принимался, а затем ломал вход каждого игрока.
  • Наложения биомов для отдельных игроков (player_biome_overlay_action): покажите одному игроку другой биом, не трогая мир и не влияя ни на кого другого.
  • Рисование регионов (paint_biome_region_action) со снимками и restore_biome_action, чтобы вернуть регион обратно.
  • biome_transition_cinematic: меняйте биом, который видит игрок, в ходе кинематики.
  • custom_biome_preset: делитесь цветами и визуальными атрибутами между биомами, с переопределением в каждом определении.
  • explore_biome_objective и biome_discovery_fact: квесты, выполняемые посещением биомов.
  • У каждой записи чтения появился параметр source, позволяющий выбирать между тем, что показано игроку, и тем, что содержит мир.
  • Удалены /tw biome setcolor, создававшая одноразовые биомы, которые никогда не сохранялись, и режим факта HASH, значение которого не было стабильным между перезапусками.
  • Размер jar расширения уменьшился с 2,6 МБ до 230 КБ: оно больше не включает библиотеки, которые сервер уже предоставляет.

Релиз v0.5 · Документация

Enchantment Creator v0.8​

  • levelMode у механики сравнивает runOnLevel как точный уровень, минимум (AT_LEAST) или максимум (AT_MOST). Раньше было возможно только точное совпадение.
  • eventPhase выполняет действия механики во время текущего события Bukkit, поэтому отмена события или изменение урона действительно вступают в силу. Задайте false для действий, поставленных в очередь взаимодействий Typewriter.
  • clientSideEffects стал учитывать клиент, с действием client_particle_effect: пользовательский артефакт BTC использует отрисовщик на основе PacketEvents, когда он доступен, а публичный артефакт Paper — запасной вариант Bukkit с областью действия игрока.
  • Ключи реестра теперь выводятся из id. Прежний name сохраняется как устаревший псевдоним при загрузке существующих страниц и предметов, поэтому ничего не нужно создавать заново.
  • Публичный артефакт намеренно не несёт зависимостей BTC-CORE или BTC Velocity: он работает на Paper 1.21.x с Java 21 и собирается из JDK 25 с байт-кодом Java 21.

Релиз v0.8 · Документация

Numerical Storage v0.9​

  • transactionMode в конфигурации транзакций: INTERNAL сохраняет путь через PlaceholderAPI и консольную команду, VAULT идёт напрямую через Vault Economy API и игнорирует amountPlaceholder и поля команд.
  • addCommand и removeCommand были задокументированы наоборот. addCommand завершает внесение в хранилище и проверяется до постоянного изменения; removeCommand завершает снятие.
  • Сохранение теперь асинхронное, с блокировками изменений для каждого артефакта и кратковременным кэшем, поэтому одновременные вклады больше не могут гоняться друг с другом.
  • Файлы хранилища переходят на схему JSON версии 2 по техническому пути артефакта. Устаревший файл, основанный на прежнем семантическом artifactId, сохраняется в резервной копии в backups/numericalstorage/ и переносится при первом обращении — сделайте резервную копию каталога assets/ Typewriter перед обновлением.
  • artifactId — это сгенерированный технический идентификатор: оставьте его пустым, и Typewriter заполнит его.
  • Плейсхолдеры принимают явный аргумент определения (%typewriter_ns_balance_bank%), что устраняет прежнюю неоднозначность разделения по подчёркиванию, когда сам идентификатор определения содержит подчёркивания.
  • Необязательные ключи с учётом профилей, когда установлена интеграция Profiles.

Release v0.9

2026-08-07​

Релиз v0.9 · Документация

Quest Codex v2.8​

  • Настоящие достижения Minecraft. Новая запись advancement_definition записывает настоящие достижения в датапак, которым владеет расширение, поэтому они появляются в ванильном экране достижений со своей вкладкой, деревом, рамками и уведомлениями. parent ссылается на другое определение, поэтому дерево рисуется в редакторе узлов.
  • grant_advancement выдаёт достижение или забирает его обратно и проходит по цепочке родителей, поэтому дочернее достижение никогда не получают при не полученном родительском.
  • autoGrant делает достижение полученным на первом тике игрока. Для корня именно это придаёт его вкладке существование до того, как что-либо получено.
  • Исправлен порядок квестов: вложенный квест читает свой порядок из собственной подкатегории, квесты без явного порядка больше не сливаются вместе, а добавление квеста больше не стирает уже имевшийся у него порядок.
  • Маркеры квестов разбиваются на страницы, режим сортировки задаётся для каждого игрока, а мультиотслеживание переживает повторное подключение в порядке, выбранном игроком.

Релиз v2.8 · Документация

GUI v0.11​

  • Подсказки предметов с переключателем hideVanillaItemStats в записи конфигурации GUI.
  • Раскладка с пагинацией может нести индикатор страницы через новую роль INDICATOR.
  • Меню проверяются при запуске сервера: слот за пределами границ, отсутствующий шаблон или неизвестный тип кнопки называются в консоли до того, как игрок откроет меню.
  • <shift:N> разрешается без CraftEngine через входящий в комплект шрифт Magic Digit.
  • count и repeatY задокументированы как числа повторений слотов, а не размеры стопок.

Релиз v0.11 · Документация

Shops v1.3​

  • Магазин больше не может увести игрока ниже нуля. Это позволяли три независимых пути.
  • Нечитаемый баланс больше не считается нулём, а отформатированные балансы вроде 12.5k разбираются.

2026-08-03​

Релиз v1.3 · Документация

Quest Codex v2.7​

  • Добавлены режимы отображения маршрутных точек: WORLD_DIRECTIONAL проецирует маркеры на сферу вокруг глаз игрока по истинному направлению к месту назначения, TARGET_ANCHORED размещает их на цели, а ADAPTIVE плавно переходит между двумя. HUD_LOCKED остаётся значением по умолчанию, поэтому существующие страницы не меняются.
  • Добавлены постоянный кажущийся размер и угловое разрежение, чтобы несколько маркеров оставались читаемыми, когда их места назначения лежат на одной линии видимости.
  • Добавлена отрисовка нескольких целей в одной записи маршрутной точки с новыми вариантами выбора отслеживаемой цели ALL и ONE_PER_QUEST и ограничением maxTargets.
  • Исправлено: мультиотслеживание игнорировалось маршрутными точками: цели второстепенных отслеживаемых квестов никогда не разрешались, поэтому маркер создавал только основной квест.
  • Добавлен quest_codex_locator_bar, отображающий те же разрешённые цели точками на ванильной полосе локатора в Minecraft 1.21.6+ без создания каких-либо сущностей.

Release v2.7

2026-08-02​

Релиз v2.7 · Документация

Quest Codex v2.6​

  • Добавлено постоянное восстановление прерванных диалогов и кинематик Typewriter, включая последний кадр кинематики. Теперь восстановление сохраняет захваченный снимок, когда Typewriter выдаёт события завершения после отключения игрока.
  • Добавлено постоянное отслеживание нескольких квестов с меню отслеживаемых квестов, отдельными плейсхолдерами и публичным образцом маршрутных точек для двух квестов.
  • Добавлены клиентские маршрутные точки только с текстом с настраиваемым текстом значка, центрированными отображениями блоков, центрированным вращением маяка, выравниванием по уровню цели, плавной интерполяцией, размещением вблизи цели и настраиваемым горизонтальным конусом видимости.
  • Удалены устаревшие слои маршрутных точек с отображением предмета и направленной стрелкой до их первого публичного развёртывания.

Релиз v2.6 · Документация

GUI v0.10​

  • Добавлены движки раскладок Flex и Composite для адаптивного размещения слотов и составных слоёв меню.
  • Добавлены многоразовые адресуемые представления с наследуемыми пулами раскладок, представлениями по умолчанию, навигационными цепочками, тегами представлений и необязательной интеграцией с историей.
  • Добавлена миграция схемы с учётом представлений и интеграция с QuestCodex, а также метаданные публикации Maven.
  • Исправлено: переключения представлений теперь перестраивают меню без мерцания закрытия и повторного открытия, а закрытие инвентаря стало безопасным для Folia.

Релиз v0.10 · Документация

Shops v1.2​

  • Публичное расширение Shop пересобрано и проверено на OmniGUI v0.10.
  • Сохранены существующие динамические раскладки магазинов, история навигации, обработка заполнителей, правила запасов и лимитов и обработчики пользовательских кнопок магазина.
  • Миграция с Shop Extension v1.1 не требуется.

Релиз v1.2 · Документация

MythicMobsNPC Extension v0.4.6​

  • Исправлено: изменение масштаба игнорировалось у модели без анимации, так же как в расширении BetterModel.
  • Варианты ванильных мобов (кошка, лиса, волк, житель и подобные) теперь один раз сообщаются в консоли, а не молча игнорируются: они относятся к конфигурации MythicMobs, которая владеет идентичностью моба и перезаписывала бы их при каждом возрождении.
  • Исправлено: одна сбойная запись данных отменяла все остальные записи, отправленные в той же пачке, из-за чего у NPC могли не примениться никакие из настроенных данных.
  • Эффект свечения и экипировка теперь применяются к модели, а не только к мобу. Тело моба скрыто за моделью, поэтому их задание только на мобе ничего не делало видимым.
  • Экипировка теперь сообщает в консоли, когда у модели нет кости предмета, вместо того чтобы молча ничего не делать.
  • Огонь подтверждается заново каждую секунду, поэтому он больше не гаснет сам, и теперь сообщается, когда BetterModel скрывает тело, на котором рисуется пламя.
  • Исправлено: табличка дёргалась, когда NPC идёт или следует по сети дорог: отображение текста теперь интерполирует между обновлениями, а не телепортируется шагами.

BetterModel Extension v1.3​

  • Исправлено: масштаб модели игнорировался у моделей без анимации. BetterModel пересчитывает трансформацию модели только пока воспроизводится анимация, поэтому изменение масштаба во время работы никогда не достигало статичной модели. Теперь расширение само принудительно выполняет пересчёт.
  • То же исправление применяется к смещению модели, которое проходило тем же путём кода.
  • Записи данных сущности теперь действительно доходят до модели, а не отбрасываются. Поддерживаются: эффект свечения, цвет эффекта зелья (отображается как оттенок предмета), яркость, ограничение billboard, длительность интерполяции, сдвиг, трёхмерный масштаб, размер рамки, экипировка и горение.
  • Добавлен bettermodel_bone_appearance — версия настроек свечения, оттенка, блеска и яркости для отдельной кости, с той же системой критериев, что и у bettermodel_bone_visibility.
  • Экипировка сопоставляется с костями предметов в руке и на голове у BetterModel. Слоты брони один раз сообщаются в консоли, а не молча игнорируются, потому что торс и ноги модели несут собственную геометрию.
  • Неравномерный трёхмерный масштаб теперь выдаёт предупреждение, а не молча использует одну ось: BetterModel поддерживает только равномерный масштаб.
  • Любая запись данных, не имеющая смысла для 3D-модели (позы, варианты мобов, состояние размножения...), теперь один раз сообщается в консоли, а не молча отбрасывается.
  • Свечение, оттенок, яркость, billboard, сдвиг и экипировка теперь переживают перезагрузку ресурспака или возрождение, а не возвращаются к стандартному виду модели.
  • Экипировка теперь сообщает в консоли, когда у модели нет кости с тегом ri, li или ph, вместо того чтобы молча ничего не делать — это обычная причина, по которой предмет не отображается.
  • Огонь теперь рисуется на сущности взаимодействия NPC, а не на костях модели: клиент масштабирует пламя по ограничивающему объёму сущности, а у сущности отображения его нет, поэтому пламя рисовалось нулевого размера.

Nexo Extension v1.0​

  • Добавлены факты для проверки того, что игрок держит, носит в инвентаре, на что смотрит или на чём стоит.
  • Добавлены переменные, дающие идентификатор и свойства целевого предмета, блока и мебели.
  • Добавлены действия выдачи и удаления предмета, оба работают по идентификатору предмета Nexo.
  • Добавлены события подбора, выбрасывания и использования предметов.
  • Добавлены события взаимодействия и урона для пользовательских блоков и мебели, а также событие выпадения добычи.
  • События теперь передают свои данные (идентификатор блока, позицию, предмет в руке) тому, что выполняется следом, поэтому диалог или действие могут использовать их напрямую.

CraftEngine Extension v1.0​

  • Цели квестов теперь работают. Их можно привязать к квесту, они сохраняют прогресс и могут запускать последовательность при завершении.
  • Добавлены факты для перезарядок, для предметов в руке и в инвентаре, а также для блока или мебели, на которые нацелен игрок.
  • Добавлены переменные, дающие идентификаторы, свойства предметов и список загруженного содержимого.
  • Добавлены действия выдачи и удаления предмета, оба работают по идентификатору предмета CraftEngine.
  • Добавлены события подбора, выбрасывания и использования предметов.
  • Добавлены события для попыток размещения и для ударов по мебели.
  • События теперь передают свои данные тому, что выполняется следом.

ItemsAdder Extension v1.0​

  • События блоков и мебели теперь читают ItemsAdder напрямую, а не угадывают по ванильным событиям, что делает их надёжными и убирает небольшую задержку, из-за которой триггер мог пропускаться или повторяться.
  • Добавлены факты для предметов в руке и в инвентаре, оставшихся использований, пользовательской прочности, видимости HUD и роста культур.
  • Добавлены переменные, дающие идентификаторы, свойства предметов и изображения шрифтов.
  • Добавлены действия выдачи и удаления предмета, оба работают по идентификатору предмета ItemsAdder.
  • Добавлены события подбора, выбрасывания и использования предметов.
  • Добавлены события взаимодействия, событие перед размещением мебели и событие смерти пользовательской сущности.
  • События теперь передают свои данные тому, что выполняется следом.

2026-07-26​

Quest Codex v2.5​

  • Добавлено постоянное отслеживание нескольких квестов через запись quest_codex_tracking_artifact.
  • Добавлены режим меню категории @tracked и динамические маркеры TRACKED_QUEST_SLOT.
  • Добавлены /tw codex tracked и внутренняя команда GUI codex:tracked.
  • Добавлены плейсхолдеры PlaceholderAPI для числа отслеживаемых квестов, лимита, основного квеста, отслеживаемых квестов по индексу, статусов, целей и приоритетов.
  • Задокументирована структура публичного набора страниц: главный манифест, статический артефакт отслеживания, определения квестов и настройки GUI.

Релиз v2.5 · Документация

GUI v0.9​

  • Добавлена автоматическая миграция схемы публичных страниц для встроенного хранилища и устаревших полей пагинации.
  • Задокументирована компактная схема storagePool / storageId и navigationButtons, призванная уменьшить зависания редактора Typewriter при публикации.
  • Уточнён рекомендуемый шаблон связанного меню для больших меню QuestCodex.

Релиз v0.9 · Документация