- 版权类型
- 原创
- 插件中文名称
- 原版弹窗菜单|告别箱子GUI|表单输入|进服规则确认|举报反馈
- 插件英文名称
- DialogMenu
- 原帖地址
- #
- 支持的核心(服务端)
- Paper
- Purpur
- 语言支持
- 中文(简体)
- 前置组件
- 无
- 适配版本(Java)
- 1.21
插件简介
1.21.6 起,原版加入了对话框界面,可以显示文字、输入框、下拉框、开关、滑块和按钮。DialogMenu 让你只写 YAML 就能做出这种原生弹窗:- 菜单再也不是一格一格的箱子,没有物品可以被拿走、刷出
- 玩家可以直接打字输入,举报、反馈、改名、传送请求都不用再记指令
- 进服规则确认,玩家必须点「同意」才能开始游戏
功能特性
三种弹窗类型:通知(单按钮)、确认(是 / 否)、多按钮菜单(可设置列数)。四种输入控件:文本框(支持多行)、下拉选项、开关、滑块,全部原版渲染。
输入校验:支持必填和正则格式校验。玩家填错时自动提示,并重新打开弹窗,已填写的内容会保留。
进服规则确认:
- 首次进服自动弹出规则
- 同意前禁止移动、聊天、使用指令和交互,并免疫伤害
- 点击拒绝直接踢出
- 修改规则后把版本号 +1,全服玩家需要重新确认
/menu、/cd,无需重启,重载即可生效。丰富的按钮动作:玩家指令、控制台指令、私聊消息、全服公告、标题、动作栏、音效、跳转到其他弹窗、通知在线管理员、写入日志文件。
按钮权限:没有权限的玩家看不到对应按钮,例如管理员专属按钮。
文字格式:同时支持 MiniMessage(渐变色、十六进制色、悬浮、点击)和传统
& 颜色代码。PlaceholderAPI:可选支持,所有文字都能使用 PAPI 变量。
安全:玩家输入的内容会自动转义,无法注入点击事件;支持正则限制输入格式。
热重载:
/dm reload 即可生效。截图
(这里放截图:主菜单 / 举报表单 / 意见反馈滑块 / 进服规则确认)运行环境
| 项目 | 要求 |
|---|---|
| 服务端 | Paper 1.21.7 / 1.21.8 及其下游分支(Purpur 等) |
| Java | 21 |
| 客户端 | 1.21.6 及以上 |
| 前置 | 无(PlaceholderAPI 可选) |
指令
主指令/dialogmenu,别名 /dm、/dmenu| 指令 | 说明 | 权限 |
|---|---|---|
/dm open <弹窗ID> | 为自己打开弹窗 | dialogmenu.use |
/dm open <弹窗ID> <玩家> | 为指定玩家打开弹窗(可在控制台使用) | dialogmenu.open.others |
/dm list | 查看已加载的弹窗和快捷指令 | dialogmenu.list |
/dm reload | 重载配置和全部弹窗 | dialogmenu.reload |
/dm rules reset <玩家> | 重置某玩家的规则确认状态 | dialogmenu.rules.manage |
/dm rules reset * | 重置所有玩家的规则确认状态 | dialogmenu.rules.manage |
/dm rules show <玩家> | 强制为玩家弹出规则确认 | dialogmenu.rules.manage |
/menu、/cd 等 | 弹窗中 alias 配置的快捷指令 | 弹窗的 permission |
权限
| 权限 | 说明 | 默认 |
|---|---|---|
dialogmenu.admin | 全部管理权限(包含下面所有权限,规则跳过除外) | OP |
dialogmenu.use | 使用 /dm open 打开弹窗 | 所有人 |
dialogmenu.open.others | 为其他玩家打开弹窗 | OP |
dialogmenu.list | 查看弹窗列表 | OP |
dialogmenu.reload | 重载插件 | OP |
dialogmenu.rules.manage | 重置 / 强制弹出规则确认 | OP |
dialogmenu.rules.bypass | 跳过进服规则确认 | 无人 |
dialogmenu.notify.report | 接收举报通知(示例弹窗使用) | OP |
dialogmenu.notify.feedback | 接收反馈通知(示例弹窗使用) | OP |
配置说明
弹窗文件放在plugins/DialogMenu/dialogs/ 目录,文件名就是弹窗 ID。新建一个 xxx.yml 并执行 /dm reload 即可。完整示例
代码:
title: "<gradient:#5ee7df:#b490ca><bold>服务器菜单</bold></gradient>"
external-title: "服务器菜单" # 可选,在暂停菜单等处显示的标题
alias: [menu, cd] # 快捷指令,可选
permission: "" # 打开所需权限,留空为所有人
can-close-with-escape: true # 能否按 ESC 关闭
type: multi # notice 通知 / confirm 确认 / multi 多按钮菜单
columns: 2 # multi 类型的按钮列数
body-width: 300 # 正文宽度
body:
- "<white>你好,<yellow>{player}</yellow>!"
inputs: # 输入控件,可选
name:
type: text # text 文本 / options 下拉 / toggle 开关 / slider 滑块
label: "名字"
max-length: 16
required: true
pattern: "^[A-Za-z0-9_]{3,16}$"
pattern-error: "<red>格式不正确"
buttons:
spawn:
text: "<green>回到主城"
tooltip: "<gray>传送到主城"
width: 150
permission: "" # 无权限时隐藏此按钮
actions:
- "[player] spawn"
exit-button: # multi 类型底部的关闭按钮,可选
text: "关闭"
confirm 类型的按钮名必须是 yes 和 no;notice 类型使用第一个按钮;multi 类型可以有任意多个按钮。输入控件参数
| 类型 | 参数 |
|---|---|
text 文本框 | label initial max-length multiline(行数,0 为单行) required pattern pattern-error width |
options 下拉选项 | label options(ID: 显示文字) default width |
toggle 开关 | label initial(true / false) on-text off-text |
slider 滑块 | label min max step initial format(如 "%s:%s 分") width |
按钮动作
| 动作 | 说明 |
|---|---|
[player] 指令 | 以玩家身份执行指令(不写前缀时默认使用此动作) |
[console] 指令 | 以控制台身份执行指令 |
[message] 文字 | 给玩家发送消息 |
[broadcast] 文字 | 全服公告 |
[actionbar] 文字 | 动作栏消息 |
[title] 主标题;副标题 | 显示标题 |
[sound] 音效名 音量 音调 | 播放音效,如 [sound] entity.player.levelup 1 1 |
[open] 弹窗ID | 打开另一个弹窗 |
[close] | 关闭弹窗 |
[notify] 权限 | 文字 | 通知所有拥有该权限的在线玩家(同时输出到控制台) |
[log] 文件名 | 内容 | 追加写入 logs/文件名.log,自动带时间 |
[kick] 原因 | 踢出玩家 |
[rules-accept] / [rules-deny] | 同意 / 拒绝规则(用于规则弹窗) |
变量
| 变量 | 说明 |
|---|---|
{player} {uuid} {world} {online} | 玩家名、UUID、所在世界、在线人数 |
{input:输入框名} | 玩家填写的值(下拉框为选项 ID,开关为 true / false) |
{label:输入框名} | 显示文字(下拉框为选项文字,开关为 on-text / off-text) |
%papi变量% | 安装 PlaceholderAPI 后可用 |
内置示例
| 文件 | 内容 | 演示功能 |
|---|---|---|
rules.yml | 进服规则确认 | 确认弹窗、禁止 ESC 关闭 |
menu.yml | 主菜单(/menu、/cd) | 多按钮菜单、按钮权限、点击复制 |
tpa.yml | 传送请求 | 文本输入、正则校验、下拉选项 |
report.yml | 举报玩家 | 多行文本、写日志、通知管理员 |
feedback.yml | 意见反馈 | 滑块评分、开关 |
常见问题
玩家看不到弹窗? 弹窗是 1.21.6 新增的原版界面,客户端必须是 1.21.6 或更高版本。通过 ViaVersion / ViaBackwards 使用低版本客户端进服的玩家无法显示。举报和反馈记录保存在哪里?
plugins/DialogMenu/logs/reports.log 和 feedback.log。修改了服务器规则,怎么让所有人重新确认? 把
config.yml 中 rules.version 的数字加 1,然后执行 /dm reload。不想要进服规则确认? 把
config.yml 中 rules.enabled 改为 false。在
[console] 动作里使用玩家输入安全吗? 请务必给对应的输入框配置 pattern,例如玩家名用 ^[A-Za-z0-9_]{3,16}$,防止玩家输入 @a 之类的选择器或额外参数。传送请求按钮没反应? 示例中的
/tpa、/spawn、/home 需要服务器装有 EssentialsX、CMI 等提供这些指令的插件,可以按需修改。