Skip to content

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 会自动按内置模板补上, 已有的不会被覆盖

典型工作流 ​

  1. 先在 plugins/EmakiDungeon/world/ 下新建一个文件夹当作副本 ID (例如 my_dungeon), 把你的地图区块放进其中 (或先建空目录, 用编辑器搭)
  2. 重启服务器或执行 /edg admin reload, 缺失的 config.yml 与 flow.yml 会自动生成
  3. 执行 /edg editor my_dungeon 打开编辑器, 圈区域, 放标记, 搭流程; 改完点"保存并回写模板"
  4. 再手工调 config.yml 里的难度, 次数限制与掉落分配, 调完再次执行 /edg admin reload
  5. 玩家用 /edg list 看有哪些副本, 用 /edg enter my_dungeon 发起挑战; 队长选难度, 全员准备后进入
  6. 打完开箱领奖 (/edg rewards), 或在配置里关掉奖励箱让产出直接进背包

与其他模块的关系 ​

模块协作方式
EmakiCoreLib必需依赖: 调度, 消息, 配置检查与动作管道; 副本生命周期动作由 CoreLib 的动作段执行
EmakiMobs流程刷怪点可用 emakimobs: 前缀引用 EmakiMobs 生物定义 (不装则只能用原版实体)
EmakiItem / EmakiLevel副本结算命令 settlement.commands 里可以直接调它们的命令发物品与经验
MythicMobs / WorldGuard可选依赖, 未安装时插件正常运行, 对应联动停用