跳到主要内容

Dialog Menu

由 TypeWriter 驱动的原生 Minecraft 对话界面:按钮、输入框、确认框。

免费v0.7菜单与视觉
依赖TypeWriter0.9Paper1.21.6+Basic extensionPlaceholderAPI可选

概览​

Dialog Menu 通过 Paper 的对话框 API 打开 Minecraft 1.21.6 及更高版本的原生对话框界面。对话框是屏幕中央的一个窗口,包含标题、文本正文、可选的物品、按钮和输入字段。它不需要资源包,也不需要自定义物品栏。

你只需在一个动作条目 Paper Dialog 中构建整个对话框。每个按钮要么以玩家身份运行命令,要么触发其他 TypeWriter 条目。输入字段(文本、开关、选项、滑块)会在玩家确认时被读取,其值会通过 $(key) 插入到命令中。

功能​

  • 原生对话框 — 通过 Paper 的对话框 API 打开的原版对话框窗口。
  • 三种布局 — 按钮网格、是/否确认框,或单按钮通知。
  • 动作按钮 — 以玩家身份运行命令,也可选择以 OP 身份运行。
  • 触发器按钮 — 无需命令,直接触发 TypeWriter 条目。
  • 输入 — 文本框(含多行)、开关、多选项和数字滑块。
  • 命令中的输入值 — 在命令中使用 $(key),插入玩家输入或选择的内容。
  • 动态文本 — 标题、消息和标签支持 MiniMessage 和 PlaceholderAPI 占位符。
  • 正文物品 — 在对话框正文中显示一个物品。
  • 动作后的行为 — 关闭对话框、保持打开,或等待服务器响应。
  • 占位符 — 检查玩家当前是否打开了对话框。

安装​

  1. 运行 Paper(或 Folia 等分支)1.21.6 或更高版本:更旧的版本没有对话框 API。
  2. 确认已安装 TypeWriter 的 Basic 扩展(参见 TypeWriter 文档)。
  3. 可选:安装 PlaceholderAPI,以便在文本中使用占位符。
  4. 将 Dialog Menu 的 JAR 放入 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) 的位置。

注意

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>%如果打开的对话框是具有此条目名称的 Paper Dialog 条目,则为 1。%typewriter_inmenudialog:<name>% 同样可用。

该状态会在点击按钮、玩家退出以及 TypeWriter 重载时被清除。玩家用 Esc 键关闭对话框时则不会被清除。

条目​

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。 玩家用 Esc 关闭了对话框,这不会重置状态。它会在下一次点击按钮、玩家离开或重载时重置。

相关扩展​

  • Companion — 当玩家点击其同伴时打开对话框。