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

Dialog Menu

Нативные диалоговые окна Minecraft под управлением TypeWriter: кнопки, поля ввода, подтверждения.

Бесплатныеv0.7Меню и визуал
ТребуетсяTypeWriter0.9Paper1.21.6+Basic extensionPlaceholderAPIнеобязательно

Обзор​

Dialog Menu открывает нативные диалоговые окна Minecraft 1.21.6 и новее через API диалогов Paper. Диалог — это окно в центре экрана с заголовком, текстовой частью, необязательным предметом, кнопками и полями ввода. Ему не нужен ни ресурспак, ни кастомный инвентарь.

Весь диалог собирается в одной записи-действии Paper Dialog. Каждая кнопка либо выполняет команду от имени игрока, либо запускает другие записи TypeWriter. Поля ввода (текст, переключатель, выбор, ползунок) считываются, когда игрок подтверждает диалог, а их значения подставляются в команду через $(key).

Возможности​

  • Нативные диалоги — ванильное диалоговое окно, открываемое через API диалогов Paper.
  • Три раскладки — сетка кнопок, подтверждение «да/нет» или уведомление с одной кнопкой.
  • Кнопки действий — выполняют команду от имени игрока, при необходимости от имени OP.
  • Кнопки-триггеры — напрямую запускают записи TypeWriter, без команды.
  • Поля ввода — текстовое поле (в том числе многострочное), переключатель, множественный выбор и числовой ползунок.
  • Значения полей в командах — используйте $(key) в команде, чтобы подставить то, что игрок ввёл или выбрал.
  • Динамический текст — заголовки, сообщения и подписи поддерживают MiniMessage и плейсхолдеры PlaceholderAPI.
  • Предмет в тексте диалога — покажите предмет в теле диалога.
  • Поведение после действия — закрыть диалог, оставить его открытым или дождаться ответа сервера.
  • Плейсхолдер — проверка того, открыт ли у игрока сейчас диалог.

Установка​

  1. Запустите Paper (или форк, например Folia) версии 1.21.6 или новее: в более старых версиях API диалогов нет.
  2. Убедитесь, что установлено расширение Basic для TypeWriter (см. документацию TypeWriter).
  3. По желанию: установите PlaceholderAPI, чтобы использовать плейсхолдеры в текстах.
  4. Поместите JAR-файл Dialog Menu в plugins/Typewriter/extensions/ и перезапустите сервер.

Начало работы​

Покажите окно подтверждения перед телепортацией игрока:

  1. В веб-панели TypeWriter откройте страницу sequence и добавьте запись Paper Dialog.
  2. Задайте displayName равным <gold>Travel to the spawn?, а message — текстом тела диалога.
  3. Задайте dialogType равным CONFIRMATION.
  4. В buttons добавьте кнопку действия. Задайте её label равным Yes, а command равным spawn.
  5. В exitButton задайте label равным No. Оставьте command пустым: тогда кнопка только закрывает диалог.
  6. Свяжите запись с тем, что должно её открывать: взаимодействием с NPC, командой или вариантом ответа в диалоге.
  7. Опубликуйте и запустите запись в игре.

Чтобы получить значение от игрока, добавьте в buttons текстовое поле: задайте key равным name, buttonLabel равным Send, а command равным rename $(name). Когда игрок нажмёт кнопку, введённый текст подставится вместо $(name).

warning

asOp выполняет команду с временными правами оператора. Используйте его только для команд, которые вы полностью контролируете, и никогда не подставляйте в такую команду произвольный текст игрока.

Как это работает​

Когда действие выполняется, диалог собирается из записи и показывается игроку, который его запустил. Кнопка одноразовая: после клика её действие выполняется один раз для этого диалога. Диалог закрывается или остаётся открытым в соответствии с afterAction.

Все текстовые поля поддерживают MiniMessage и плейсхолдеры. Если displayName пуст, используется название записи.

Меню​

Раскладка диалога зависит от dialogType:

ТипРаскладка
MULTI_ACTIONСетка кнопок с columns столбцами, плюс кнопка выхода, если включён showExitButton.
CONFIRMATIONВанильное окно «да/нет»: первая кнопка подтверждает, кнопка выхода отклоняет. В этом режиме кнопка выхода создаётся всегда.
NOTICEОкно с одной кнопкой, использующее первую кнопку или, если её нет, кнопку выхода.

Типы кнопок, которые можно добавить в buttons:

ТипПоляМакрос в команде
Кнопка действияlabel, command, asOpнет
Кнопка-триггерlabel, triggersнет
Текстовое полеlabel, key (по умолчанию input), buttonLabel, command, asOp, width, labelVisible, initial, maxLength, maxLines, height$(input)
Булев переключательlabel, key (по умолчанию boolean), initial, onTrue, onFalse, buttonLabel, command, asOp$(boolean), заменяется на onTrue или onFalse
Множественный выборlabel, key (по умолчанию choice), options, buttonLabel, command, asOp$(choice)
Числовой диапазонlabel, key (по умолчанию value), start, end, initial, step, buttonLabel, command, asOp$(value), округляется до целого числа

Поля ввода показываются над кнопками. Каждая кнопка с полем ввода также добавляет собственную кнопку подтверждения с текстом buttonLabel; команда может использовать $(key) любого поля ввода из того же диалога. Кнопка выхода настраивается отдельно в exitButton.

Для множественного выбора записывайте options списком через запятую и добавляйте * после варианта, который должен быть выбран изначально, например Easy,Normal*,Hard.

Плейсхолдеры​

Плейсхолдеры PlaceholderAPI, предоставляемые расширением typewriter.

ПлейсхолдерВозвращает
%typewriter_inmenudialog%1, если у игрока открыт диалог из этого расширения, иначе 0.
%typewriter_inmenudialog_<name>%1, если открытый диалог — это запись Paper Dialog с таким названием записи. %typewriter_inmenudialog:<name>% тоже работает.

Состояние сбрасывается при клике по кнопке, при выходе игрока и при перезагрузке TypeWriter. Оно не сбрасывается, если игрок закрывает диалог клавишей Escape.

Записи​

Записей: 1, сгенерированы из исходного кода расширения.

Действия1

Устранение неполадок​

При выполнении действия ничего не показывается. Диалогам нужен Paper 1.21.6 или новее. На более старом сервере API диалогов не существует, и действие завершается ошибкой. Также проверьте, выполняются ли criteria записи.

Кнопка ничего не делает. Кнопки команд с пустым command только закрывают диалог. В остальных случаях команда выполняется от имени игрока: если у игрока нет на неё права, она молча не срабатывает, а сбой записывается в лог как Dialog command '…' failed. Сначала проверьте команду в чате.

$(key) остаётся в команде или заменяется пустотой. key поля ввода и макрос должны совпадать точно. Макрос, не соответствующий ни одному полю, заменяется пустым текстом. Для переключателей макрос возвращает значение onTrue или onFalse, а не true или false.

Кнопки перестают работать после первого клика. Каждая кнопка одноразовая для каждого открытого диалога. Если afterAction равен NONE или WAIT_FOR_RESPONSE, окно может оставаться на экране, но его кнопки больше не реагируют. Запустите действие снова, чтобы открыть новый диалог.

%typewriter_inmenudialog% остаётся равным 1. Игрок закрыл диалог клавишей Escape, которая не сбрасывает состояние. Оно сбрасывается при следующем клике по кнопке, при выходе игрока или при перезагрузке.

Связанные расширения​

  • Companion — открывайте диалог, когда игрок кликает по своему компаньону.