История изменений
Примечания к релизам публичных расширений 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>, больше не меняет порядок.
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. Моб удаляется, если ни один допущенный игрок не остаётся в радиусе в течение задержки (abandonRange0= выключено). Веб-редактор подставляет в новые длительности 1 секунду: проверьтеabandonDelay. despawn_mythicmobs_mob: новое полеscope:ALL(по умолчанию, как раньше) илиVISIBLE_TO_PLAYER(только мобы, которых видит игрок).- Защита: весь урон, связанный с ограниченным мобом (ближний бой, снаряды, навыки MythicMobs, огонь), блокируется в отношении недопущенных игроков, и наоборот. Снаряды пролетают насквозь, а моб бросает недопущенную цель.
- Условие MythicMobs
typewritervisible(псевдонимtwvisible): добавьте его к навыкам без урона (зелье, бросок...) в таргетере (conditions=[ - twvisible true ]) или какTargetCondition, чтобы они пропускали игроков, не видящих моба. Расширение один раз выполняет/mm reloadпри запуске, если ваши файлы MythicMobs его используют. - Моб, чья исходная запись удалена, остаётся скрытым для всех.
- Ограничения: столкновения работают по принципу «всё или ничего»; навыки без урона не фильтруются без
twvisible; звуки и частицы вдали от моба не скрываются.
Shops v1.12
- Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.
Quest Codex v2.16
- Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.
Corpse v0.7
- Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.
Numerical Storage v0.15
- Пересобрано под GUI 0.20, который теперь обязателен: предыдущая версия не открывает свои меню с GUI 0.20. Больше ничего не изменилось.
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 в подземельях: при выключенном
tickingNPC, размещённый Dungeon 1.0, виден только участникам своего рана, а клик даёт одно взаимодействие нужному игроку. - Bone Visibility Data и Attachment Data теперь применяются к модели NPC, при включённом или выключенном
ticking, и снова после каждого возрождения. - Play Animation:
forceтеперь останавливает другие анимации, запущенные действием на этом NPC;speedне больше 0 воспроизводится с нормальной скоростью. - MythicMob Skill Objective:
skillNameтеперь работает через механику MythicMobstypewriterSkill{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включены,paginationKeybindSWAP_OFFHAND,comparisonKeybindSNEAK,statsStartOnPage2, символы и подсказки по умолчанию).
Shops v1.11
perPlayerтеперь даёт каждому игроку собственный запас каждого предмета; сброс пополняет запасы всех. Лимиты сохраняют свою область действия.defaultRefreshTicksиrefreshTicksпредмета перерисовывают открытый магазин, когда меняется показанный запас (только для конечных запасов;0у магазина означает отсутствие автоматической проверки).guiSlotпредмета закрепляет предмет в фиксированном слоте области содержимого на каждой странице; предмет, который невозможно разместить, переносится в свободную ячейку или сообщается в консоли.- Выключенный
sellAllEnabledтеперь отклоняет действие «продать всё» с сообщениемcannotSellMessage. - Ответы команд, значки тренда, лор Limited/Unlimited, строки цен, названия по умолчанию, текст без цены и формат длительности теперь редактируются; день в кулдауне по умолчанию записывается как
d(раньшеj).
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». Исправлен разделитель в навигационной цепочке, который отображался искажённо.
Quest Codex v2.15
- Разрешение
typewriter.codex.openтеперь объявляется расширением, по умолчанию только для операторов, поэтому оно отображается в плагинах разрешений, таких как LuckPerms. - Подписи навигации, подписи сортировки, заголовки меню по умолчанию и сообщение о неизвестной категории теперь редактируются (
navLabels,sortTexts,mainMenuTitle,trackedQuestsTitle,unknownCategoryMessage).
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без даты).
Discord v0.13
triggersу Webhook Fact Event теперь выполняются после публикации вебхука, для игрока, чьё изменение fact было опубликовано.- Новый
triggerCooldownSeconds(по умолчанию1) у Webhook Fact Event: защита от зацикливания между двумя срабатываниямиtriggersдля одного игрока;0отключает её.
Custom Biome v0.9
- Explore Biome Objective теперь работает:
biomesиrequireAllчитаются, когда игрок входит в биом, а новое полеtriggersзапускает entries, когда цель выполнена и активна. Цель сама записывает открытие; Enter Biome Event не нужен. - Ответы команд
/tw biomeи текстunknownплейсхолдеров биома — редактируемые сниппеты (content.custombiome.). - Paper 26.3: пользовательские биомы снова регистрируются; на 26.3 они не загружались (живая инъекция и запасной вариант через датапак).
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отвечают на неверную сумму или отсутствующий артефакт редактируемыми сообщениями.
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вне диапазона цифр теперь записывает предупреждение в консоль вместо того, чтобы молча игнорировать все нажатия.
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трупа нет), а предметы, которые другие плагины сохраняют для игрока, больше не дублируются в труп. Если труп создать не удалось, предметы выпадают как обычно. - Исправлено, обыск: взятие предмета при полном инвентаре больше не дублирует часть, которая поместилась, а два клика, борющиеся за один труп, больше не могут выдать его содержимое дважды.
- Исправлено, хранилище: перезапуск больше не возвращает уже взятые предметы, а нечитаемый или наполовину записанный файл хранилища больше не стирает сохранённые трупы. Восстановленные трупы сохраняют позу, свечение, имя и анимацию (но не скин и броню владельца).
- Сообщение о возрождении, путевая точка и цель используют последний труп, а меню обыска предупреждает до открытия, а не после первого клика.
MythicMobs v0.11
mythic_spawner.groupтеперь читается: спавнер активируют только участники группы,criteriaпроверяется для этой группы, а у каждой группы свой прогрев и кулдаун; состояние группы сбрасывается, когда ни одного участника нет в сети.- Строку MythicMob Kill Objective в трекере квестов можно менять сниппетами
advancedQuest.displayиadvancedQuest.completed.
Enchantment Creator v0.11
- Agricultural Harvest теперь читает событие разрушения блока и собирает созревшие культуры вокруг разрушенного блока (
radiusограничен 8), а не блок, на который смотрит игрок. - Agricultural Harvest: новые поля
particle,particleCount,sound,soundVolumeиsoundPitch. - То, что игрок вводит в
/enchantcreator give(название зачарования), показывается в ответах как есть и никогда не воспринимается как форматирование.
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).
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.
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 получают его без пересборки.
Shops v1.10
- Бартер: цены в предметах. Новый
priceMode: ITEMSпродаёт товар за один или несколько предметов вместо валюты.itemPriceу предмета перечисляет стоимость (предмет и количество на каждую покупаемую штуку);defaultItemPriceу магазина распространяется на каждый товарITEMS, у которого её нет. Список товара заменяет список магазина и никогда не добавляется к нему. - Товар
ITEMS, для которого нигде не задана цена, отклоняется и записывается в лог, а не отдаётся даром. Оплата симулируется по всему инвентарю до того, как что-либо будет удалено, а место для покупаемого предмета проверяется первым, поскольку при бартере возврата нет. - Новые
cannotAffordItemsMessage(токены{missing},{amount}) и токен описания{item_price}, по одной строке на каждый требуемый предмет. Строки{buy}и{sell}у такого товара отбрасываются, а плейсхолдерыbuy_price/sell_priceпоказывают тире. - «Купить максимум» работает с бартерными товарами. Товар
ITEMSнельзя продать обратно за валюту: его цена продажи равна нулю. - Пересобрано под GUI v0.17.
2026-09-09
Puzzle v0.5
- Исправлено:
NoClassDefFoundErrorдляPuzzleRenderersпосле перезагрузки расширения. Расширение регистрировало два слушателя Bukkit в плагине-движке и никогда их не удаляло, поэтому старые экземпляры продолжали срабатывать на закрытом загрузчике классов. Теперь оба снимаются с регистрации при остановке расширения, что также прекращает накопление лишней копии при каждой перезагрузке. - Визуальное обновление, уже запланированное к моменту остановки расширения, больше не может вызвать загрузку класса на мёртвом загрузчике.
2026-09-08
Shops v1.9
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
- Собрано под GUI v0.16.
Discord v0.12
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
Companion v0.10
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
Corpse v0.5
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
Custom Biome v0.8
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
InputTracker v0.5
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
Numerical Storage v0.13
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
Puzzle v0.4
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
Vanilla v1.4
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Тексты прогресса целей (цели сбора, подсчёта и проверки фактов) теперь разбираются с учётом игрока, поэтому плейсхолдеры в них разрешаются для этого игрока.
Vote System v0.8
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
Enchantment Creator v0.10
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Действия механик теперь планируются через собственный синхронный диспетчер Typewriter вместо приватного вспомогательного планировщика расширения.
MMO Inventory v0.7
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
MythicMobs v0.10
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
GUI v0.16
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Исправлены строки таблицы лидеров, описывающие зрителя: строка для игрока из рейтинга теперь разрешает свой предмет, название и описание
Varотносительно этого игрока, а не того, кто открыл меню, поэтому каждая строка больше не показывает значения зрителя. Строки мира, группы и игроков не в сети возвращаются к зрителю.
Quest Codex v2.13
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
- Собрано под GUI v0.16.
Tracking v0.11
- Пересобрано под движок Typewriter
0.9.0-beta-177. - Изменений в поведении нет.
2026-09-06
Shops v1.8
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
- Собрано под GUI v0.15.
Discord v0.11
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
Companion v0.9
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
Corpse v0.4
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Табличка трупа теперь использует
CustomNamePropertyдвижка. - Собрано под GUI v0.15.
Custom Biome v0.7
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
InputTracker v0.4
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
Numerical Storage v0.12
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
Puzzle v0.3
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
Vanilla v1.3
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Активности сущностей (обнаружение по видимости, следование, облёт по орбите, избегание, слух, обоняние, патрулирование и подобные) перенесены на жизненный цикл активностей движка 0.9. Названия записей не изменились.
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.
Dialog Menu v0.7
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
Enchantment Creator v0.9
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
MMO Inventory v0.6
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
MythicMobs v0.9
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
GUI v0.15
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
Quest Codex v2.12
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
- Собрано под GUI v0.15.
Protection v1.3
- Устарело: это последний релиз Protection. Для новых развёртываний заменой служит нативная система регионов Typewriter.
- Расширение сохраняется для существующих серверов и не будет получать новых возможностей.
- Пересобрано под движок Typewriter
0.9.0-beta-176.
Tracking v0.10
- Пересобрано под движок Typewriter
0.9.0-beta-176. - Изменений в поведении нет.
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и сообщает об области рангов за пределами инвентаря.
Quest Codex v2.11
- Пересобрано под GUI v0.14.
Shops v1.7
- Пересобрано под GUI v0.14.
Corpse v0.3
- Пересобрано под GUI v0.14.
Numerical Storage v0.11
- Пересобрано под GUI v0.14.
2026-08-24
Shops v1.6
- Новое дерево команд оператора
/tw shop admin: список магазинов, просмотр определения, управление сессиями игроков, сброс во время работы, управление запасом прямых предметов и история транзакций. - Новое право
typewriter.shop.admin(только для операторов).typewriter.shop.openпо умолчанию остаётся доступным игрокам. - Ручной сброс использует то же поведение, что и автоматический, и пересчитывает следующий запланированный сброс.
- Исправлена регистрация права публичной команды, чтобы не-операторы могли открывать магазины.
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 и её зависимости времени выполнения.
2026-08-21
GUI v0.13
- Живые предметы слотов.
itemProviderперестраивает предмет, название и описание слота при отрисовке. Слоты раскладки разбираются один раз, и тот же список возвращается при каждой отрисовке, поэтому плейсхолдер или обратный отсчёт в описании разрешался один раз и замораживался —autoRefreshTicksбесконечно перерисовывал одинаковый инвентарь. - Одновременно открывается только одно окно.
GuiFactory.open()завершается тиком позже, поэтому до этого верхний инвентарь всё ещё остаётся предыдущим представлением, и каждая отрисовка решала открыть заново. Второе открытие закрывало первое окно, это закрытие воспринималось как настоящее, и сессия уничтожалась, пока её меню оставалось на экране — после чего все кнопки были мертвы. - Анимация с длительностью
0больше не считается анимацией. Панель проставляет блок анимации по умолчанию на каждый слот, поэтому декоративные предметы рисовались с индексом 0, а запланированная ими перерисовка гонялась с отложенным открытием. - Помеченная кнопка сохраняет собственные взаимодействия автора. Заполнение
buttonTypeраньше отбрасывало весь список взаимодействий, поэтому маркер, который никто не заявил (неверный префикс, неверный регистр или отсутствие нужного расширения на этом экране), становился предметом, на который кликали вхолостую, без каких-либо сообщений в консоли.
Quest Codex v2.10
- О меню, которые не могут отрисоваться, сообщается при запуске, пока консоль ещё читают, а не молчаливым сбоем в момент клика. Каждое сообщение указывает способ исправления, а не симптом.
- Однократное преобразование страниц, созданных до шасси
open_gui. Пул раскладок переехал изcategory_menuв связанную записьopen_gui, поэтому страница, написанная по старой схеме, сохраняла раскладку, которую движок больше не читает: полностью настроенную в панели, но ничего не отображающую. - Заголовки достижений проходят через настоящее преобразование MiniMessage в JSON, поэтому форматирование, написанное в названии квеста, сохраняется в генерируемом им достижении.
- Требуется OmniGUI v0.13.
Puzzle v0.2
- Новый
activationRadiusу каждой головоломки, по умолчанию16блоков. Головоломка отрисовывается и работает только для игрока, находящегося в мире её собственных позиций, в пределах этого радиуса от одной из них.0отключает только проверку расстояния — проверка мира действует всегда. - Исправлено: головоломка рисовалась в каждом измерении. Клиентские блоки и частицы несут координаты, но не мир, поэтому лазерная сетка, настроенная в Верхнем мире, рисовалась перед игроком в Нижнем мире, в Крае или в любом другом мире, который он посещал.
- Исправлено: головоломка запускалась, как только игрок входил в её аудиторию, независимо от расстояния. Последовательность на память могла проиграть весь свой узор для того, кто находится за тысячи блоков или в другом мире. Теперь последовательность начинается, когда игрок добирается до поля.
- Уход в сторону очищает поле на клиенте и отменяет ожидающие анимации. Бюджет попыток, перезарядка после неудачи,
timeLimitиlifespanтеперь включаются по прибытии, а не при входе в аудиторию.
Custom Biome v0.6
- Несовместимое изменение:
biome_audienceудалён. Он отвечал на вопрос «находится ли этот игрок в этом биоме», читая собственный биом мира, который клиентское наложение никогда не меняет, — поэтому для каждого биома, который рисует это расширение, он отвечал «нет», что бы игрок ни видел на экране. Никакая конфигурация не заставляла его работать. - Его заменяют две записи:
biome_overlay_audience(есть ли у этого игрока это наложение) иbiome_region_audience(находится ли этот игрок внутри этого региона, включая мир). Страницы, использующиеbiome_audience, нужно перенаправить на одну из них. - Аудитории регионов сопоставляются как по миру, так и по координатам, поэтому регион, определённый в одном мире, больше не совпадает с теми же координатами в другом.
ignoreYпревращает регион в бесконечную колонну. /tw biome region <entry>заполняет два угла записи из вашего текущего выделения WorldEdit, вместо ручного ввода координат.- Наложения для отдельных игроков отслеживаются по чанкам и по владельцам: несколько наложений могут покрывать один чанк, побеждает одно, а его очистка восстанавливает настоящий биом этого чанка, а не последнюю нарисованную палитру.
Shops v1.5
- Пересобрано под OmniGUI v0.13. У
GuiSlotпоявился параметрitemProviderвремени отрисовки, что изменило конструктор, с которым компонуются его вызывающие стороны, поэтому JAR v1.4 вызывалNoSuchMethodErrorв момент открытия магазина на обновлённом движке GUI — инвентарь так и не появлялся. - Изменений в поведении нет. Две версии идут вместе: v1.4 не может работать на OmniGUI v0.13, а v1.5 не может работать на v0.12.
Numerical Storage v0.10
- Пересобрано под OmniGUI v0.13 из-за того же изменения сигнатуры
GuiSlot: JAR v0.9 вызывалNoSuchMethodErrorпри открытии меню хранилища, и меню так и не появлялось. - Изменений в поведении нет, и второй миграции нет: хранилище схемы v2 читается точно так же, как его записывал v0.9.
Corpse v0.2
- Пересобрано под OmniGUI v0.13 из-за того же изменения сигнатуры
GuiSlot: JAR v0.1 вызывалNoSuchMethodErrorпри обыске трупа, поэтому меню добычи никогда не открывалось, а труп оставался стоять с недоступным инвентарём. - Изменений в поведении нет. Сохранённые трупы, их инвентари и правила их защиты читаются как раньше.
2026-08-12
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— потому что в шаблонной архитектуре они описывают замысел, а не дефект. Остаются те, что называют записанное намерение, которое не удалось: представление, указывающее на отсутствующую раскладку, слот, выходящий за инвентарь, два слота одной природы, сталкивающиеся в одной раскладке.
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 его не разрешает и не знает, что такое вебхук; идентификатор передаётся вместе с событием. Слушатель, выбросивший исключение, сообщается, а транзакция остаётся в силе — ничто не отменяет оплаченную покупку. - Исправлено: раскладка, лишившаяся своих маркеров, выбрасывалась из пула: экран магазина, целиком состоящий из маркеров, или ещё пустая вкладка молча исчезали.
Quest Codex v2.9
- Повышение до расширенного шасси теперь передаётся через наследование, а не через буквальный идентификатор раскладки. Шасси, корень которого назван иначе, чем
shell_root, теряло расширенное оформление, и каждый элемент управления, привязанный к нижней полосе, исчезал при отрисовке — а значит, на него нельзя было кликнуть. - Расширение теперь собирается под движок GUI текущей волны релизов, а не под закреплённый старый jar. Оно было заморожено на v0.11 движка, поэтому каждое дополнение после этого релиза было для него невидимым.
Discord v0.9
- Расширение теперь называется Discord, а не Community. Каталог, пакет и название расширения следуют за этим. Названия записей не тронуты, потому что страницы их сериализуют.
DiscordClientServiceвынесен из функции привязки в собственный пакет: синхронизация чата, консоль и отчёты об ошибках — все используют его, поэтому он никогда не относился к привязке аккаунтов.- Вебхуки — это записи.
webhook_definitionодин раз объявляет назначение Discord и используется везде по ссылке. Синхронизация чата, привязка аккаунта и отчёты об ошибках раньше несли каждая свою копию URL, имени пользователя и аватара — смена канала означала редактирование каждого манифеста без гарантии, что они указывают на одно и то же место. WebhookService— это синглтон, который может внедрить любое расширение. HTTP-клиент раньше создавался вручную в инициализаторе и передавался каждому сервису, поэтому ничто снаружи не могло доставить сообщение.- У отчётов об ошибках пропал второй переключатель: пустое назначение и есть отключённое состояние.
- Миграция. Страницы, написанные до этой версии, преобразуются при первом запуске: по одному
webhook_definitionна каждое отдельное назначение — манифесты с одинаковой настройкой делят одну запись — а манифесты перенаправляются на неё. Каждая переписанная страница сначала сохраняется в резервной копии вbackup/community-webhook-v1/. Преобразование определяется формой, а не номером версии, поэтому повторный запуск ничего не меняет. Манифест, который был выключен, сохраняет свой URL в отключённом назначении, а не теряет его. - Объявления магазинов.
shop_notification_manifestописывает, как транзакция магазина выглядит, когда попадает в Discord. Назначение в нём намеренно отсутствует — оно принадлежит магазину. Поэтому одно оформление служит каждому магазину, а каждый всё равно публикует в свой канал. Требует расширения Shops, но не зависит от него.
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: каждое чтение и запись мира выполняются в регионе, которому принадлежит головоломка.
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 обязательно.
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 КБ: оно больше не включает библиотеки, которые сервер уже предоставляет.
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.
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.
2026-08-07
Quest Codex v2.8
- Настоящие достижения Minecraft. Новая запись
advancement_definitionзаписывает настоящие достижения в датапак, которым владеет расширение, поэтому они появляются в ванильном экране достижений со своей вкладкой, деревом, рамками и уведомлениями.parentссылается на другое определение, поэтому дерево рисуется в редакторе узлов. grant_advancementвыдаёт достижение или забирает его обратно и проходит по цепочке родителей, поэтому дочернее достижение никогда не получают при не полученном родительском.autoGrantделает достижение полученным на первом тике игрока. Для корня именно это придаёт его вкладке существование до того, как что-либо получено.- Исправлен порядок квестов: вложенный квест читает свой порядок из собственной подкатегории, квесты без явного порядка больше не сливаются вместе, а добавление квеста больше не стирает уже имевшийся у него порядок.
- Маркеры квестов разбиваются на страницы, режим сортировки задаётся для каждого игрока, а мультиотслеживание переживает повторное подключение в порядке, выбранном игроком.
GUI v0.11
- Подсказки предметов с переключателем
hideVanillaItemStatsв записи конфигурации GUI. - Раскладка с пагинацией может нести индикатор страницы через новую роль
INDICATOR. - Меню проверяются при запуске сервера: слот за пределами границ, отсутствующий шаблон или неизвестный тип кнопки называются в консоли до того, как игрок откроет меню.
<shift:N>разрешается без CraftEngine через входящий в комплект шрифт Magic Digit.countиrepeatYзадокументированы как числа повторений слотов, а не размеры стопок.
Shops v1.3
- Магазин больше не может увести игрока ниже нуля. Это позволяли три независимых пути.
- Нечитаемый баланс больше не считается нулём, а отформатированные балансы вроде
12.5kразбираются.
2026-08-03
Quest Codex v2.7
- Добавлены режимы отображения маршрутных точек:
WORLD_DIRECTIONALпроецирует маркеры на сферу вокруг глаз игрока по истинному направлению к месту назначения,TARGET_ANCHOREDразмещает их на цели, аADAPTIVEплавно переходит между двумя.HUD_LOCKEDостаётся значением по умолчанию, поэтому существующие страницы не меняются. - Добавлены постоянный кажущийся размер и угловое разрежение, чтобы несколько маркеров оставались читаемыми, когда их места назначения лежат на одной линии видимости.
- Добавлена отрисовка нескольких целей в одной записи маршрутной точки с новыми вариантами выбора отслеживаемой цели
ALLиONE_PER_QUESTи ограничениемmaxTargets. - Исправлено: мультиотслеживание игнорировалось маршрутными точками: цели второстепенных отслеживаемых квестов никогда не разрешались, поэтому маркер создавал только основной квест.
- Добавлен
quest_codex_locator_bar, отображающий те же разрешённые цели точками на ванильной полосе локатора в Minecraft 1.21.6+ без создания каких-либо сущностей.
2026-08-02
Quest Codex v2.6
- Добавлено постоянное восстановление прерванных диалогов и кинематик Typewriter, включая последний кадр кинематики. Теперь восстановление сохраняет захваченный снимок, когда Typewriter выдаёт события завершения после отключения игрока.
- Добавлено постоянное отслеживание нескольких квестов с меню отслеживаемых квестов, отдельными плейсхолдерами и публичным образцом маршрутных точек для двух квестов.
- Добавлены клиентские маршрутные точки только с текстом с настраиваемым текстом значка, центрированными отображениями блоков, центрированным вращением маяка, выравниванием по уровню цели, плавной интерполяцией, размещением вблизи цели и настраиваемым горизонтальным конусом видимости.
- Удалены устаревшие слои маршрутных точек с отображением предмета и направленной стрелкой до их первого публичного развёртывания.
GUI v0.10
- Добавлены движки раскладок Flex и Composite для адаптивного размещения слотов и составных слоёв меню.
- Добавлены многоразовые адресуемые представления с наследуемыми пулами раскладок, представлениями по умолчанию, навигационными цепочками, тегами представлений и необязательной интеграцией с историей.
- Добавлена миграция схемы с учётом представлений и интеграция с QuestCodex, а также метаданные публикации Maven.
- Исправлено: переключения представлений теперь перестраивают меню без мерцания закрытия и повторного открытия, а закрытие инвентаря стало безопасным для Folia.
Shops v1.2
- Публичное расширение Shop пересобрано и проверено на OmniGUI v0.10.
- Сохранены существующие динамические раскладки магазинов, история навигации, обработка заполнителей, правила запасов и лимитов и обработчики пользовательских кнопок магазина.
- Миграция с Shop Extension v1.1 не требуется.
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и внутренняя команда GUIcodex:tracked. - Добавлены плейсхолдеры PlaceholderAPI для числа отслеживаемых квестов, лимита, основного квеста, отслеживаемых квестов по индексу, статусов, целей и приоритетов.
- Задокументирована структура публичного набора страниц: главный манифест, статический артефакт отслеживания, определения квестов и настройки GUI.
GUI v0.9
- Добавлена автоматическая миграция схемы публичных страниц для встроенного хранилища и устаревших полей пагинации.
- Задокументирована компактная схема
storagePool/storageIdиnavigationButtons, призванная уменьшить зависания редактора Typewriter при публикации. - Уточнён рекомендуемый шаблон связанного меню для больших меню QuestCodex.