资源图标

原创 工具 世界管理 其他 【1.21.7-1.21.8|Paper】DialogMenu — 原版弹窗菜单|告别箱子GUI|表单输入|进服规则确认|举报反馈 1.0.0

完成注册/登录后下载
版权类型
原创
插件中文名称
原版弹窗菜单|告别箱子GUI|表单输入|进服规则确认|举报反馈
插件英文名称
DialogMenu
原帖地址
#
支持的核心(服务端)
  1. Paper
  2. Purpur
语言支持
中文(简体)
前置组件
无
适配版本(Java)
  1. 1.21

插件简介​

1.21.6 起,原版加入了对话框界面,可以显示文字、输入框、下拉框、开关、滑块和按钮。DialogMenu 让你只写 YAML 就能做出这种原生弹窗:
  • 菜单再也不是一格一格的箱子,没有物品可以被拿走、刷出
  • 玩家可以直接打字输入,举报、反馈、改名、传送请求都不用再记指令
  • 进服规则确认,玩家必须点「同意」才能开始游戏
插件开箱即用,内置 5 个示例弹窗,装上就能看到效果。

功能特性​

三种弹窗类型:通知(单按钮)、确认(是 / 否)、多按钮菜单(可设置列数)。
四种输入控件:文本框(支持多行)、下拉选项、开关、滑块,全部原版渲染。
输入校验:支持必填和正则格式校验。玩家填错时自动提示,并重新打开弹窗,已填写的内容会保留。
进服规则确认:
  • 首次进服自动弹出规则
  • 同意前禁止移动、聊天、使用指令和交互,并免疫伤害
  • 点击拒绝直接踢出
  • 修改规则后把版本号 +1,全服玩家需要重新确认
快捷指令:给任意弹窗绑定指令,比如 /menu、/cd,无需重启,重载即可生效。
丰富的按钮动作:玩家指令、控制台指令、私聊消息、全服公告、标题、动作栏、音效、跳转到其他弹窗、通知在线管理员、写入日志文件。
按钮权限:没有权限的玩家看不到对应按钮,例如管理员专属按钮。
文字格式:同时支持 MiniMessage(渐变色、十六进制色、悬浮、点击)和传统 & 颜色代码。
PlaceholderAPI:可选支持,所有文字都能使用 PAPI 变量。
安全:玩家输入的内容会自动转义,无法注入点击事件;支持正则限制输入格式。
热重载:/dm reload 即可生效。

截图​

(这里放截图:主菜单 / 举报表单 / 意见反馈滑块 / 进服规则确认)

运行环境​

项目要求
服务端Paper 1.21.7 / 1.21.8 及其下游分支(Purpur 等)
Java21
客户端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
dialogmenu.rules.bypass 默认谁都没有,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 等提供这些指令的插件,可以按需修改。
作者
北渡南岸
下载
4
查看
65
首次发布
最后更新

评分

0.00 星 0 次评分
后退
顶部 底部