MistInteract-按键交互式NPC对话插件-多分支【1.20-1.21.X】已添加Citizens支持

免费 MistInteract-按键交互式NPC对话插件-多分支【1.20-1.21.X】已添加Citizens支持 1.1.1

没有购买权限 (500.00 金锭)
支持核心
Mohist/Spigot/Paper/Purpur
原创/转载
原创
作者
Jens_Hon
前置
ArcartX,Adyeshach
支持版本
1.20.X-1.21.X
MistInteract 插件介绍与使用说明
插件已基本完善,遇到BUG请反馈留言
这个插件的配置难度正常来说比Chemdah简单
如果你实在不会,丢AI让他帮你写配置也可以

F进入交互,滚轮切换(小键盘上下也可以)
新版本支持玩家客户端修改按键改绑
只有滚轮是默认强制的

【当前已对Adyeshach和Citizens添加支持,Adyeshach优先级高于Citizens


插件文档
截图:
1775990926502.webp

1775990946592.webp

1775990972057.webp


注意:目前插件默认是打开对话后隐藏原版的状态栏等,如果你用AX修改了HUD,可以在config配置内添加上配置名,即可隐藏使用AX配置的HUD。

鸣谢:
墨墨啊 提供技术支持和答疑

视频:【拍好了,还没传】



一、插件简介
MistInteract 是一个面向服务器剧情/任务场景的 NPC 对话插件,基于 ArcartX HUD 显示交互界面,并与 Adyeshach NPC 体系联动。
它可以实现“靠近 NPC -> 打开可交互列表 -> 进入分支对话 -> 执行命令/发送提示 -> 记录玩家进度”的完整链路。

二、核心特点
- 对话 HUD 与 NPC 列表 HUD 分离,交互清晰。
- 支持多分支对话(next 跳转、close 结束)。
- 支持玩家对话进度本地持久化(SQLite database.db)。
- 支持首次对话与重复对话入口分离(first / repeatFirst)。
- 支持管理员命令直接打开/中断/重置指定玩家对话。
- 支持隐藏原版 HUD 与额外 AX HUD,减少界面干扰。
- 支持键盘快捷和鼠标滚轮交互(确认/上下选择由 UI 与按键绑定协同处理)。

三、依赖与环境
- 服务端:1.20.1
- 软依赖:ArcartX、Adyeshach
- 本插件会加载 Hud.yml、DialogHud.yml、npchud/*.yml

四、安装步骤
1. 将 MistInteract-1.0.0.jar 放入服务器 plugins 目录。
2. 确认服务器已安装并正常加载 ArcartX 与 Adyeshach。
3. 首次启动后,检查 plugins/MistInteract/ 下是否生成:
- config.yml
- Hud.yml
- DialogHud.yml
- npchud/example.yml
- data/database.db
4. 按需编辑 npchud 内配置,然后执行重载命令。


五、`npchud` 对话 YAML:文件级(顶层)
每个文件对应 一个*逻辑 NPC(`npcId` 全局唯一;重复时后加载的覆盖先加载的,控制台会 warning)。


字段是否必填说明

npcId
与 Adyeshach 里该 NPC 的 **id** 一致(插件用它在世界里找实体)

displayName
对话里展示的名字;默认等于 `npcId` |

hudListName
NPC 列表 HUD 上显示的名称;不填则用 `displayName`

first
建议首次进入对话时的**起始节点 id**;缺省插件内部按 `"1"` 处理
repeatFirst满足“回访条件”时,用哪个节点替代 `first` 作为入口
repeatFirstRequires“字符串”若“非空”:仅当玩家对该 NPC 的 `setFlags` 标记集合里同时包含 此处列出的所有标记时才走 `repeatFirst`。多个标记在同一字符串里用 英文逗号 分隔,例如 `a,b,c`(不要写成 YAML 列表,否则读不到)。若留空:只要该玩家对该 NPC **`talk_count` > 0(曾经通过带非空 `next` 且 `incrementProgress: true` 的选项推进过)就走 `repeatFirst` |
distance该 NPC 交互半径(格);不填用全局 `scanDistance`
dialogues节点字典,键为节点 id,值为节点内容(见下节)




六、节点(`dialogues` 下的每一项)
字段说明

text
节点正文,支持 `&` 颜色代码(由客户端/AX 侧表现为准)
textRoll与 `text` 二选一或共存:有 `textRoll` 时,界面正文从列表中 按 weight 加权随机 抽一条。每项为 `{ weight: 数字, text: "..." }`,`weight` 最小按 1 计

options
选项字典,键为选项 id(会发给客户端,需稳定);值为选项配置(见下节)
校验:每个节点至少要有一个非空 `text` 或非空 `textRoll`,否则重载时 warning。

七、选项(`options` 下的每一项)

字段说明
text选项在对话 HUD 上显示的文字
playerMessage选中后发给玩家聊天栏的消息;可为一条字符串或字符串列表;支持 `&` 颜色(插件会转换);支持占位符(与 `commands` 相同,见下面第八内容)
commands命令列表,见下面第八内容
next非空:选完后跳转到该节点 id,不关闭对话 HUD
close`true`:选完后关闭对话并走正常结束流程(会执行已排队的 `afterDialogue` 命令)
incrementProgress默认` true`。为 `true` 时:若本选项 `next` 非空,选中后会对该玩家该 NPC 的 `talk_count` +1;为 `false` 则不加 |
setFlags字符串列表;选中后把这些标记名写入该玩家对该 NPC 的持久化标记(逗号拼接存储),供 `repeatFirstRequires`、`requireFlags`、`forbidFlags` 使用 |
requireFlags字符串列表;玩家必须已拥有其中全部标记,该选项才会出现在当前节点
forbidFlags字符串列表;玩家只要拥有其中任意一个标记,该选项不出现
**结束方式建议**:
- 真正结束对话:用 `close: true`,或 `next` 留空(插件也会结束对话,但建议显式 `close`)。
- 若写 `next`,目标节点必须在同一文件 `dialogues` 里存在,否则重载 warning。
打断与延后命令:玩家被 `interrupt`、死亡、换世界、退出服务器等非正常结束时,不会执行已排队、时机为 对话结束后(`afterDialogue`)的命令。


八、占位符与 `commands` 写法
占位符(`playerMessage` 与命令里的 `run`/字符串命令都会先替换)

占位符含义
%player%这应该不用说了吧.....【玩家名】
%uuid%这也应该懂的吧?【玩家 UUID 字符串】
%npc%当前 npchud.yml 的 `displayName`
%npc_id%当前 npchud.yml 的`npcId`
%world%玩家所在世界名
`%x%` `%y%` `%z%`玩家脚下方块整数坐标
%yaw% %pitch%视角浮点数(两位小数)
注意:命令里的 `&` 不会被当成颜色代码替换(与 `playerMessage` 不同)。
`commands` 两种列表项

(1)纯字符串
- 等价:控制台执行、`when` 为 点选后立即。
- 不要写开头的 `/`,例如:`minecraft:give %player% bread 3`
(2)对象(Map)
必填说明
run命令正文,不要开头的 `/`
exec`console` / `server` / `c` → 控制台;`player` / `p` → 以玩家身份执行;`op` / `player_op` / `playerop` → 临时 OP 后代玩家执行(受 第九章 限制)
when默认点选立即。`onSelect` / `immediate` / `now` / `select` 等 → 立刻;`afterDialogue` / `after` / `end` / `onClose` 等 → 整段对话正常关闭 HUD 后再执行(可多行排队,有上限)

同一选项内可多行命令,按列表顺序执行;`afterDialogue` 与立即执行的命令分阶段执行。

九、`config.yml` → `dialogueCommands`(全局安全)
对 **所有** 执行方式(控制台 / 玩家 / OP)在真正分发前都会做:

作用
maxLineLength展开占位符后的命令最大长度,超出则拦截
blockedRegexJava 正则列表;对整条命令做 `matches` 整行匹配(不是子串 `find`)。需要“任意位置命中”请在正则里自己写 `.*...`
allowPlayerOp是否允许配置里使用 `exec: op`
requirePermissionForOpCommand为 `true` 时,OP 代执行还要求玩家拥有权限 `mistinteract.dialogue.opcommand`
opCommandPrefixWhitelist去掉前导 `/` 后转小写,命令必须以列表中某一非空前缀开头才允许 OP 执行;列表为空则不允许任何 OP 命令
maxDeferredPerSession单次对话会话中,`afterDialogue` 最多排队条数


管理命令(需 `mistinteract.admin`)
- 输入 `/mistinteract` 或 `/mistinteract admin`(无子命令)会提示完整帮助


常见问题
1. 列表/对话 HUD 全无

吐槽:是否安装并加载 ArcartX;后台是否提示主界面或对话界面注册失败
2. 主界面能用、对话不能
吐槽:看后台是否提示对话 HUD 未注册;检查 `ui/DialogHud.yml` 是否存在且可被 AX 加载
3. NPC 从不进列表
吐槽: `npcId` 是否与 Adyeshach 一致;`distance` 与 `scanDistance`;Adyeshach 是否可用
4. 改 yml 不生效
吐槽:是否放在 `npchud/` 根目录且扩展名 `.yml`;是否执行 `admin reload`
5. 对话结束界面还在
吐槽:终点选项是否 `close: true`;`next` 是否指向存在节点
6. OP 对话命令不执行
吐槽:`allowPlayerOp`、`opCommandPrefixWhitelist`、玩家权限 `mistinteract.dialogue.opcommand`、`blockedRegex`
7. 正则明明写了但不拦
吐槽:当前实现是 整行 matches;旧写法若只写了 `^op\s` 需改为如 `^op\s.*` 等
  • 1775812555887.webp
    1775812555887.webp
    317.2 KB · 查看: 127
  • 1775812575529.webp
    1775812575529.webp
    249.9 KB · 查看: 123
  • 1775812596644.webp
    1775812596644.webp
    211.4 KB · 查看: 122
作者
MistCloud
价格
500.00 金锭
下载
9
查看
444
首次发布
最后更新

评分

0.00 星 0 星

分享此资源

最新更新

  1. 添加对Citizens的支持

    更新了CitizensNPC的支持,用法跟ady一样,只需要在npcId填写CitizensNPC的ID即可
  2. 适配游戏版本

    1.兼容了1.20.x-1.21.x的游戏版本 2.优化了性能 3.对某些加载添加异步
  3. 修复问题-以及默认示例配置加载

    1.修复回车键可以确定问题 2.更新客户端可以修改键位功能 3.性能优化 4.解决UI触发异常问题