简体中文
EmakiDungeon
EmakiDungeon 是一款组队副本玩法插件: 你和队友组好队伍, 选好难度, 一起进入一份专属的副本世界打通关拿奖励
- 每支队伍挑战时都会拿到一份从模板克隆出来的独立世界, 不同队伍互不干扰, 打完立即销毁
- 副本自带完整的挑战流程: 先选难度与掉落分配模式, 再做准备确认, 等世界准备倒计时结束, 就能进入副本
- 次数限制按 日 / 周 / 月 三层管理, 支持可挑战时段, 周几, 月周次与冷却
- 局内走分配的奖励先进入暂存区, 通关才发放; 中途退出或挑战失败则全部作废, 玩家状态按进入前的快照回滚
- 自带队伍系统 (邀请/申请/踢人/队伍频道), 副本内聊天默认与外界隔离, 你随时可以切回全局收听
- 内置地图编辑器: 你在游戏里圈选区域, 放标记, 填方块, 测试开局, 保存后直接回写模板
- 流程由
flow.yml描述: 房间, 波次, 门禁, 分支选项, 触发区, 计时, 击杀目标等 22 类功能模块 - 支持 GraalJS 副本脚本与 CoreLib 动作管道, 你可以按副本生命周期挂自定义逻辑
基本信息
| 项目 | 值 |
|---|---|
| 模块版本 | 1.0.2 |
| 构建产物 | EmakiDungeon-1.0.2.jar |
| API 坐标 | emaki.jiuwu.craft:emaki-dungeon-api:1.0.1 (只给开发者编译用, 不要放进 plugins/) |
| 主命令 | /edg (别名 /dungeon, /edungeon) |
| 必需依赖 | EmakiCoreLib (required: true, join-classpath: true) |
| 可选依赖 | MythicMobs, WorldGuard (不装也能用, 只是对应联动停用) |
| 权限节点 | emakidungeon.play, emakidungeon.dungeon.*, emakidungeon.bypass.limit, emakidungeon.bypass.escape, emakidungeon.script, emakidungeon.editor, emakidungeon.admin, emakidungeon.* |
| 支持的平台 | Paper 26.1+, 支持 Folia (folia-supported: true) |
NOTE
每个副本还有一个按名字动态注册的权限 emakidungeon.dungeon.<副本ID>, 默认所有玩家可进入; 如果你想把某个副本设为特权内容, 把它的默认值改成只有指定权限组持有即可
功能页面
| 页面 | 内容 |
|---|---|
| 命令与权限 | 玩家命令, 队伍子命令, 编辑器会话命令, 管理命令与权限表 |
| 配置详解 | 全局 config.yml, 副本级 config.yml, 奖励箱界面三份配置的全部键 |
| 挑战与奖励 | 进入流程, 次数限制, 队伍规则, 奖励暂存与发放, 失败回滚 |
| 流程与触发器 | flow.yml 的 21 类功能模块, 编辑器用法, 生命周期动作与脚本 |
| API 与集成 | 给开发者: emaki-dungeon-api 门面与全部事件 |
核心能力
| 能力 | 说明 |
|---|---|
| 实例世界池 | 每个副本按"克隆模板"准备世界, 池中常驻 1 个备用世界, 上限可配 (pool.max-worlds, 全局 limit.max-instances); 世界随打随建, 打完卸载删除, 插件重启会自检清理残留 |
| 挑战流程 | 队长发起 → 难度选择 → 掉落分配模式选择 → 全员准备确认 (超时作废) → 世界准备等待 (bossbar 或聊天条, 可取消) → 进入并计入次数 |
| 三层次数限制 | 每日 / 每周 / 每月各配次数与可挑战窗口, 判定顺序 月 > 周 > 日, 另有独立冷却; 计数按服务器时区或 general.timezone 分桶 |
| 奖励暂存与发放 | 局内产出先暂存, 通关时按掉落分配模式结算进奖励箱或背包; 未通关全部作废, 玩家状态按进入前快照还原 |
| 队伍与聊天隔离 | 队伍人数与邀请模式可配; 副本内消息默认实例内闭环, /edg globalchat on 可切回全服互通, 队伍频道独立 |
| 命令管控 | 副本内命令按黑名单/白名单模式过滤, 逃逸类命令 (如 /tp *) 单独黑名单且不可被放行豁免; 越界自动拉回出生点 |
| 地图编辑器 | 独立编辑世界, 支持两点圈选, 6 类标记, 区域填充, 面板改字段, 测试开局 (不计次数, 不上榜), 保存才回写模板 |
| 评分与排行 | 伤害/击杀/治疗/死亡/防御五项权重算分, 副本排行榜与个人战绩查询 |
| 生命周期动作 | 11 个生命周期段 (dungeon_enter 到 dungeon_destroy) 走 CoreLib 动作管道, 可挂全服广播, 音效等自定义逻辑 |
| 运行监控 | MSPT P95, 堆内存斜率, 写队列积压三项阈值告警 (阈值 <= 0 关闭), 告警进控制台与审计日志 |
默认配置目录
text
plugins/EmakiDungeon/
├── config.yml ← 主配置 (全局开关与限流)
├── world/
│ └── <副本ID>/
│ ├── config.yml ← 副本配置 (缺失时按模板自动生成)
│ ├── flow.yml ← 流程定义 (缺失时按模板自动生成)
│ └── region/ ← 副本地图的区块存档
├── gui/
│ └── rewardbox.yml ← 奖励箱界面 (页数与容量)
├── scripts/ ← 副本 GraalJS 脚本, 文件名 = <副本ID>.js (可选)
├── instances.yml ← 运行时实例记录 (自动生成, 不要手改)
├── parties.yml ← 队伍快照 (自动生成, 不要手改)
└── lang/副本模板就是 world/ 下的一个文件夹, 文件夹名就是副本 ID. 插件在启动和执行 /edg admin reload 时扫描该目录, 缺 config.yml 或 flow.yml 会自动按内置模板补上, 已有的不会被覆盖
典型工作流
- 先在
plugins/EmakiDungeon/world/下新建一个文件夹当作副本 ID (例如my_dungeon), 把你的地图区块放进其中 (或先建空目录, 用编辑器搭) - 重启服务器或执行
/edg admin reload, 缺失的config.yml与flow.yml会自动生成 - 执行
/edg editor my_dungeon打开编辑器, 圈区域, 放标记, 搭流程; 改完点"保存并回写模板" - 再手工调
config.yml里的难度, 次数限制与掉落分配, 调完再次执行/edg admin reload - 玩家用
/edg list看有哪些副本, 用/edg enter my_dungeon发起挑战; 队长选难度, 全员准备后进入 - 打完开箱领奖 (
/edg rewards), 或在配置里关掉奖励箱让产出直接进背包
与其他模块的关系
| 模块 | 协作方式 |
|---|---|
| EmakiCoreLib | 必需依赖: 调度, 消息, 配置检查与动作管道; 副本生命周期动作由 CoreLib 的动作段执行 |
| EmakiMobs | 流程刷怪点可用 emakimobs: 前缀引用 EmakiMobs 生物定义 (不装则只能用原版实体) |
| EmakiItem / EmakiLevel | 副本结算命令 settlement.commands 里可以直接调它们的命令发物品与经验 |
| MythicMobs / WorldGuard | 可选依赖, 未安装时插件正常运行, 对应联动停用 |