跳转到内容

更新日志

本页记录 QueDP 本体的版本更新内容。图标含义:✨ 新增功能 · ⚡ 优化改进 · 🐛 问题修复 · 🔌 API / 附属开发。

  • ⚡ 适配 Paper 26.3:TabooLib 更新至 6.3.0-2765a28,新增 26.3 专用快速建世界和异步区块加载实现,保留 Java 25 工具链与 Java 21 字节码的跨版本打包方式。
  • 🐛 游戏规则兼容:修复新版注册表无法按旧驼峰名称查找规则的问题,doMobSpawning、keepInventory 等配置和脚本继续生效,并保留旧规则的值转换语义。
  • 🐛 26.3 世界存储与虚空地图:独立保存并关闭世界存储会话,使用实际存储目录准备数据文件夹,并正确传入虚空生成器。
  • ✨ 扫荡可以要求先通关:新增 sweep.require_clear_times,通关本副本满指定次数才开放扫荡,默认 1 次。编辑器的扫荡设置里可以直接调。
  • 🔌 扫荡奖励可由附属接管:新增 sweep.allow_external_reward,开启后发奖前触发可取消的 DungeonSweepRewardEvent,附属插件可以取消它改发自己的奖励,本体的门槛校验、入场成本和通关记录照常。同时开放 QueDPAPI.dungeons().sweep() 与无副作用的 sweepUnavailableReason()。
  • ⚡ 进本更快:出生点区块提前生成好:以前玩家传进副本时,出生点周围的区块要现场生成,Mohist 上要等 4~5 秒。现在做模板缓存时就把这些区块生成好存进盘里,进本只读盘,实测降到 2 秒左右。
  • ⚡ 混合端第一次开本不再卡:Mohist / Arclight 这类混合端要把插件类重映射一遍,以前这几秒卡顿落在第一次开本时。现在改为开服后在后台提前做完。
  • ⚡ 脚本引擎和建世界器开服就热好:开服时会真跑一段脚本把 GraalJS 整条执行链热起来,并提前找好当前版本的 NMS 建世界器,第一次开本不再付这两笔初始化开销。
  • ⚡ 兼容 BetterRTP:装了 BetterRTP 的服务器,quedp_* 副本、测试和编辑世界会自动被它当成禁用世界,不会被拉进随机传送队列,也不会去预生成安全点。服主自己配的禁用世界不受影响,没装 BetterRTP 则什么都不做。
  • ⚡ 预复制改为按热度自适应:以前每张图固定预备 3 份。现在插件记录每个副本近期的开本峰值,自动决定备几份:近 1 天的峰值全算,一周内的打对折,一周没人开就归零。周末冲高、工作日收缩,不用手填。备用目录关服不删、重启后按模板指纹认领,改过图的自动作废。world.prewarm 可调单图上限和总磁盘占用,详见 配置文件。
  • ⚡ 开本并发上限:新增 world.concurrent-limit,多支队伍同时开本时最多几个在建世界,超出的排队并提示排在第几位,轮到自动进入。默认 3,填 0 不限。
  • ⚡ 预复制等缓存就绪再开始:模板缓存还在构建时不再抢着复制世界;模板换过路径后,旧路径下的备用目录会自动清理。
  • ✨ 网页编辑器新增「宝箱奖励」:9×N 格子可视化摆放,点格子放奖励,下拉直接选 rewards.yml 里的奖励名(全局掉落库也在列表里),图标可以取游戏内手上拿的物品。保存只重写改过的箱子,其他节点和注释原样保留。
  • ✨ 网页编辑器新增「区域」「阶段」两个标签页:区域范围可以取当前站位的两点,点位用站位一键添加;阶段支持拖动排序、设入口、条件模板和分支表格。
  • ✨ 网页编辑器怪物 / 障碍物补齐增强字段:怪物组可设默认区域和重复生成,成员行展开后能填点位、区间数量、概率、延迟、Boss、条件;障碍物能填锚点、开启材质、默认关闭、自动切换。区域点位有下拉候选。
  • ✨ 阶段编辑器支持条件分支:游戏内阶段编辑器可以新增分支、改条件、换目标、排序和删除。
  • 🐛 修复网页编辑器保存会抹掉增强字段:此前在网页里保存怪物或障碍物,会把游戏内编辑器配好的新字段丢掉。
  • 🐛 修复基础设置里的死亡判定模式从未生效:网页编辑器写错了配置路径,改了也不起作用。
  • 🐛 修复扫荡被最小人数拦住:扫荡是单人操作,不该再检查副本的最小人数。
  • ✨ 玩法模块:在主配置或副本 modules 段按需开关,不开就和以前完全一样。详见 玩法模块。
    • 计时竞速:通关用时照旧进排行榜,新增分段计时和与个人最佳的实时对比。脚本 action.split('一王') 记分段,阶段 id 与分段同名时自动记;%quedp_speedrun_elapsed% / pb / delta / record 可放计分板。
    • 奖励加成:通关那一刻按 JS 条件算一次倍率,作用于 grant_reward 发的金钱、经验和物品数量;结算时聊天栏列出命中了哪些规则。
  • ✨ 编辑器主界面新增「玩法模块」入口,规则带模板;/dg admin module list 查看已启用的模块。
  • ✨ 每日进入次数:副本 requirements.daily_limit 限制每人每天能进几次,主配置 dungeon.daily_reset 定全服统一的重置时刻(默认 04:00)。没有定时任务,玩家进本时才比对日期。/dg admin daily 查看或重置,PAPI 变量 %quedp_dungeon_<id>_daily_used% / daily_left%。
  • ✨ 掉线保护:主配置 dungeon.reconnect.timeout 秒内重新上线的玩家会回到掉线时的位置继续打,可配一段重连后执行的脚本。等待期间该玩家不算存活也不算死亡,超时未回才正式移出。
  • ✨ 扫荡:副本 sweep 段配好后,通关过的玩家可用 /dg sweep <副本> [次数] 直接拿奖励,不建世界。消耗和正常进入完全一样(冷却 / 每日次数 / 体力 / 金币 / 门票),/dg admin sweep 可强制扫荡不扣资源。游戏内编辑器基础设置里新增每日次数和扫荡入口。详见 地牢配置。
  • ⚡ 奖励发放支持倍率:作用于金钱、经验和物品数量,扫荡与奖励加成都靠它。
  • ✨ 障碍物增强:新增 anchor 锚点 + 相对坐标(整体挪图只改一个点)、open_material 开启时的材质、default_state: closed 默认关闭、auto_toggle 定时自动开关。老配置一个字不用改。详见 增强字段。
  • ✨ 新增 action.toggle_obstacle 与 dungeon.isObstacleClosed(),脚本里可以直接翻转或查询障碍物开关状态。
  • ⚡ 障碍物铺方块改为分帧:每 tick 最多写 256 个方块、不触发物理更新,大面积障碍物不再卡服。因此 create_obstacle / remove_obstacle 变成异步动作,on_create / on_delete 会在铺完后才执行,副本结束会取消还没铺完的批次。
  • ✨ 编辑器:障碍物列表 Shift+左键进设置;设锚点时会自动把已有坐标换算成相对坐标。
  • ✨ 怪物组增强:成员可以指定命名点位 point、区间数量 "3-6"、出现概率 chance、延迟 delay、boss 标记,以及条件 when 不满足时用 replace_with 换成别的怪;组可以指定默认区域 zone 和带上限的重复生成 repeat。老配置一个字不用改。详见 增强字段。
  • ✨ Boss 击杀事件:标了 boss 的怪被击杀会触发 boss_kill 事件任务并推进阶段。新增 action.spawn_group('组', 2.0) 倍率生成、action.stop_repeat 停止重复,dungeon.getGroupSpawned / getGroupKilled / getRepeatCount / isBossKilled 查询。
  • ⚡ 生成前检查实体上限:超限的组跳过;单次要刷超过 32 只时自动分帧,不会一 tick 全刷出来。
  • ✨ 编辑器:怪物组详情里右键生成点进高级设置,怪物组设置新增「区域与重复」。
  • 🐛 修复怪物组详情「右键编辑」没反应。
  • ✨ 掉落保底:随机奖励可以加 保底 段,第 N 次必出指定项,支持软保底(越接近 N 概率越高)和跨副本的全局计数域,计数随玩家数据保存。详见 奖励配置。
  • ✨ 全局掉落库:plugins/QueDP/loot/ 下的 yml 可以被多个副本 引用,一套掉落配一次到处用;副本里同名奖励优先。详见 全局掉落库。
  • ✨ 编辑器主界面新增「掉落保底」;新增 dungeon.getPity()、%quedp_pity_*% / %quedp_pity_left_*% 变量,/dg admin pity 查看重置保底、/dg admin loot 查看重载掉落库。
  • 🐛 修复金钱奖励没有真正入账:此前只发「+N 金币」的提示,钱没进 Vault,现在会真的存进去。
  • ✨ 复活系统:副本 config.yml 新增 revive 段,自动倒计时、消耗道具、队友潜行读条三种复活方式,支持全队共享或各自独立的次数池,可配复活脚本和次数耗尽脚本,主配置可设全服默认。详见 复活配置。
  • ✨ 新增 add_revive / set_revive 动作,dungeon.getReviveLeft() 等查询、%quedp_revive_left% 变量、/dg admin revive 命令。
  • ✨ 编辑器基础设置新增「复活设置」,含一键预设。
  • ⚡ 配了 revive 的副本自动按宽松语义判全灭:会等复活机会都用完再判定。注意此时脚本里 action.revive('@trigger') 默认扣一次复活次数,不想扣写 action.revive('@trigger', false)。
  • ⚡ 旧配置缺 revive 段时启动会追加一段注释示例,不改变行为。
  • 🐛 修复默认死亡脚本把玩家卡在旁观者:示例副本和新建副本的 player_death 脚本只传送不复活。默认改为 3 次机会、5 秒自动复活。
  • 🐛 修复编辑器「波次防守」模板每波刷两次。
  • 🐛 修复编辑器套用场景模板会丢配置:NPC、箱子奖励、区域和阶段配置此前会被模板覆盖掉。
  • 🐛 修复 tasks.yml 时间点脚本写成多行字符串时读不到。
  • 🐛 清理示例副本:删掉含 # 注释的无效 boss_skill_demo 段,修正商人 NPC 引用的箱子名、新建副本默认脚本里的怪物组名和开始条件。
  • ✨ 阶段系统 stages.yml:把副本拆成一个个阶段,每个阶段有通关条件、超时、条件分支和三个阶段脚本。新增 complete_stage / goto_stage / restart_stage 动作和 %quedp_stage*% 变量。详见 阶段配置。
  • ✨ 编辑器主界面新增「阶段」入口,通关条件带模板。
  • ✨ 新增 dungeon.isGroupCleared() / isGroupActive() / getAliveMonsterCount() 查询。
  • 🐛 修复 condition 表达式一直判定为假:NPC 选项的显示条件和任务提交条件此前从未生效。升级后它们会开始按配置工作,请检查一下这些条件写得对不对。
  • ✨ 区域系统 zones.yml:给房间画边界,进出时跑脚本,还能定义命名点位。新增 enable_zone / disable_zone / teleport_zone / teleport_point 动作,dungeon.getZone() 等查询,%quedp_zone% / %quedp_zone_id% 变量。详见 区域配置。
  • ✨ 编辑器新增区域工具(木棍)和「区域」入口。
  • ⚡ 区域判定不加定时任务:纯事件驱动,和 ENTER_REGION 共用一次移动过滤。
  • 🐛 修复与其他 Kotlin 插件的类加载冲突:Paper 26.x NMS 模块改用 QueDP 自带的已重定位 Kotlin 运行时,发布包不再携带一份完整的 Kotlin 标准库,避免 ArcartX 等插件在玩家加入时因 kotlin.Lazy 重复加载而失效。
  • ⚡ 副本内死亡不再走原版死亡:致命伤害会被提前拦截,玩家不掉落背包、不弹重生界面,而是切换为旁观者模式留在原地等待 player_death 脚本复活。手持不死图腾时仍交由原版图腾链路处理。
  • 🐛 修复复活脚本没跑完就判定全灭:带倒计时或 action.wait() 的死亡脚本,此前最后一名玩家还没复活副本就已结束。现在会等死亡脚本执行完毕、且确实没人可复活后再判定。
  • ✨ death_check_mode 可选判定时机:strict(默认)全队死亡立即触发 all_death;lenient 等所有死亡脚本跑完、复活机会耗尽后再触发。all_death 只执行脚本,副本是否结束仍由脚本内的 action.fail(...) 决定。详见 地牢配置 与 死亡流程。
  • ⚡ action.revive 一步到位:复活时同时恢复生命值、退出旁观者模式回到生存,并按参数传送到副本出生点或死亡位置。
  • ✨ 新增 %player_worldoriginal%:%player_world% 在副本内会显示副本中文名,需要真实世界名(如做区域判断、调试)时改用该变量。详见 PlaceholderAPI 变量。
  • ⚡ 开本速度大幅提升:建世界流程整体异步化,开本接近瞬开,主线程不受影响。
  • ⚡ 副本实例预复制:开过的地图会在空闲时后台预备一份,下次开本直接取用。最多留 3 份,磁盘不足自动跳过,关服清理。
  • ⚡ Mohist 世界配置自动清理:mohist-config/worlds.yml 中的副本世界条目会随副本结束一并清理,不再累积。
  • ⚡ 脚本引擎开服预热:首次开本无需等待引擎初始化。
  • ✨ 副本内不死图腾开关:新增 dungeon.totem.enabled(默认开启),关闭后副本内图腾失效。同时修复图腾救人成功却仍被记为死亡的问题。
  • ✨ 离开副本世界即视为退出副本:被其它方式传送出副本后不再被实例记着,且留在原地不会被拽回。
  • 🐛 修复副本里飘着编辑器调试文字:编辑器的浮空字会被存进地图,跟着模板复制到每个副本。现在不再写入存档,已经存坏的地图升级后会自动清理,不用重做。
  • 🐛 修复队伍界面拖拽后点不动。
  • 🐛 修复长条障碍物两端不触发:此前只在靠近中心时才判定,现按实际范围判定。
  • 🐛 修复 NPC 对话编辑器长内容无法下拉:对话步骤超过可视高度后可正常滚动;普通新增步骤和任务向导生成步骤都会定位到当前编辑区域的新内容。
  • 🐛 修复在编辑器里保存地图会把地图存坏:保存时有几率只写进去半份地图文件,而且当时没有检查出来,坏掉的地图会被一直用下去。表现为服务端不停刷 Region file ... has an invalid sector at index 警告,缺失的地方会当场重新生成地形,服务器因此卡顿。现在保存后会核对每个文件是否完整,没存好会直接报错,不会再留下坏地图。
  • ✨ 地图坏了会主动提示:开本或加载地图时如果发现地图文件不完整,控制台会直接列出是哪张图、坏了多少,提示需要重新导入,不用再自己翻日志猜。
  • 🐛 区块修复器遇到坏文件不再中断:修复工具碰到已经存坏的文件会跳过继续修下一个,不会整个修复流程直接失败。
  • 🐛 修复 ENTER_REGION 交互区域的两点顺序敏感:min / max 现在按 X、Y、Z 三个轴分别归一化为下界与上界,两点写反或某个轴写反都不再导致区域判定失效。
  • 🐛 补上 remove_obstacle 脚本别名:该写法在配置示例中广泛使用,但此前并未注册,调用会被当作未知动作忽略。
  • 🐛 障碍物重复创建兜底:同一障碍物组在实例中已激活时再次创建会跳过并告警,避免原始方块状态被覆盖成障碍物方块本身、导致后续删除无法还原地形;同时补充了创建与删除的诊断日志。
  • ⚡ 不再刷 Multiverse 的副本世界提示:副本世界用完就删,本来就不需要被 MV 收录,MV 因此刷的「does not know about this world / 请 /mv import」三行提示已屏蔽。只在副本世界开关的那一瞬间生效,其他插件和其他世界的日志照常。
  • 🐛 修复 1.20.1 关闭副本世界时报错:副本结束卸载世界时会在控制台抛一段错误,已修复。
  • ✨ 命令权限细分:普通 /dg 命令从统一的 quedp.use 拆分为各一级子命令对应的 quedp.use.* 权限,并为 /npc_choice 增加 quedp.use.npcchoice 权限。
  • ✨ 新增队伍强制进入命令:/dg admin forceenterwithteam <玩家> <地牢ID> 可让目标玩家及其在线队员进入同一个副本,不扣入场费用和体力。
  • ✨ 新增交互区域脚本动作:加入 create_interact 与 delete_interact,可在脚本中按名称创建或删除 interacts.yml 中定义的交互区域。
  • ✨ 副本支持中文显示名称与颜色代码:dungeon.name 可填写中文和 & 颜色代码;/dg enter 可使用副本 ID 或去色后的中文名称进入,但会拒绝带 & / § 的命令参数。
  • ✨ 兼容 %player_world% 显示副本名称:安装 PlaceholderAPI 的 Player 扩展后,玩家处于正在运行的 QueDP 副本时,%player_world% 返回副本显示名称;普通世界及其他 %player_*% 变量保持 Player 扩展原行为。
  • ⚡ 副本世界使用安全技术名称:中文副本 ID 会转换为稳定的安全世界名组件,避免 Minecraft 世界目录对中文或颜色符号兼容不一致。
  • 🐛 修复进入副本后掉入虚空或地图区块缺失:进入副本、编辑世界和测试世界前会同步准备目标出生点周围区块,加载失败时重试或终止传送。
  • ✨ 新增队伍“仅队长拾取”模式:队长可在队伍设置界面切换该模式;生效范围内只有队长能够拾取掉落物,其他成员的拾取会被拦截,物品仍保留在原地。
  • ✨ 新增运行中副本查询命令:使用 /dg running 可查看当前准备中或进行中的副本实例,包括副本名称、模板 ID、状态、在线人数和运行时间。
  • ⚡ 同步更新中英文提示、队伍设置界面与命令文档。
  • ✨ 新增 Paper 26.1.2 / 26.2 支持:加入两个版本的专用 NMS 世界创建器,运行时会按服务端版本自动选择实现;Paper 26.x 需要 Java 25。
  • 🐛 修复 Paper 26.x 副本世界为空或区块路径错位:支持识别 dimensions/minecraft/overworld/ 目录结构,并在根目录与维度目录之间同步 region、entities、poi、data 数据。
  • 🐛 修复 Paper 26.1.2 世界创建和自动保存异常:为副本世界使用独立 SavedDataStorage,补齐 PrimaryLevelData、PaperLevelOverrides、服务器 Executor 等新版构造参数。
  • 🐛 修复 Paper 26.x NMS 初始化兼容性:不再直接依赖不稳定的 CraftWorld、GameRule、BiomeProvider 调用,并修正 Java 侧调用 NMS 日志工具时的方法签名。
  • ⚡ 升级 Paper 26.x 构建链:26.x 模块改为 Gradle 9 + JDK 25 独立构建,再于 TabooLib 处理完成后合入主发布包,避免新版字节码与旧模块构建冲突。
  • ⚡ 发布版本更新至 1.3.9,releaseObfuscated 会同时构建并合并 Paper 26.x 模块及所需 Kotlin 运行库。
  • 🐛 修复 1.12.2 无法创建副本世界:调整低版本 NMS 世界创建参数,恢复 1.12.2 专用创建器的正常加载与建世界流程。
  • ⚡ 玩家可见文本迁移至 i18n:命令、编辑器、队伍、仓库、副本确认、统计、更新器等界面的硬编码消息迁移到中英文语言文件,便于统一翻译和自定义。
  • ⚡ TabooLib 升级至 6.3.0-c6f096d,发布版本更新至 1.3.8。
  • 🐛 修复低版本地图在高版本服务器上的区块损坏:此前副本世界通过 NMS 快速创建时固定使用种子 0,导致地图中从未生成过的区块、或加载失败的区块会按错误地形重新生成(常见表现为地图中凭空出现一堵「海洋墙」)。现已改为读取地图自带的世界种子,缺失区块的补全地形与原图一致,行为对齐 Multiverse 等多世界插件。
  • 🐛 区块修复器不再误删数据:坐标修复工具在遇到无法解析的区块(如 1.20.5+ 的 LZ4 压缩区块、存放于外部 .mcc 文件的超大区块)时改为跳过并保留原始数据,不再当作损坏区块清除。
  • 🐛 修复编辑 / 保存副本时偶发的区块损坏:世界保存为异步落盘,此前保存后立即复制世界文件有几率拷到尚未写完的区块数据,表现为「有时损坏、过一会儿又正常」。现在保存后会强制等待数据落盘再复制,并调整缓存写入顺序(以 level.dat 作为完整性标记),杜绝复制到半份世界。
  • ⚡ 跨世界 NMS 传送:副本内的跨世界传送改用 NMS 直接执行,避免原生传送在多世界之间的卡顿。
  • 🐛 修复部分环境下 Mohist 建世界卡顿的问题。
  • 🔌 新增任务追踪刷新 API,附属插件可主动刷新玩家当前的任务追踪显示。
  • ✨ 副本进入条件支持 PlaceholderAPI 变量:可在进入条件中配置任意 PAPI 变量表达式作为准入门槛,且校验逻辑与入场扣费解耦——门槛校验(等级 / PAPI 等)与成本扣除(物品 / 金币)互相独立,门票单人入场时跳过扣费但仍会校验门槛。
  • ✨ PlaceholderAPI 脚本变量透传:新增 %quedp_var_<变量名>%,可在计分板/Tab 等任意位置读取玩家当前副本实例的持久脚本变量。脚本或附属插件写入的状态(如房间进度、词缀、评级)都能直接显示。详见 PlaceholderAPI 变量。
  • ✨ 兼容 Mohist 1.16.5:新增 1.16.5 专用 NMS 世界创建器,在该版本 Mohist 上也能秒级建出副本世界。
  • 🔌 新增 QueDPAPI.Script.instanceContext(instance),附属插件可访问与实例同生命周期的持久脚本上下文,写入的变量可被 track_task 与 %quedp_var_% 读取。
  • ✨ 副本防逃逸系统:拦截末影珍珠、紫颂果、传送门等非法逃出副本的手段。支持 BLOCK(拦截)/ TELEPORT_BACK(拉回出生点)/ FAIL(判负)三种模式,命令与插件传送不受影响。详见 配置文件 · 防逃逸。
  • ✨ 新增脚本动作 trigger_interact:按名称触发 interacts.yml 中定义的交互点,条件/once/脚本全部走本体原生逻辑。详见 地牢类动作。
  • ✨ spawn_npc 支持坐标覆盖:可在引用配置的同时传入实际生成坐标,适配程序化副本等动态世界。详见 NPC 类动作。
  • ✨ NMS 快速建世界支持自定义区块生成器,并新增虚空世界创建接口。
  • 🐛 修复纯商店 / 纯对话 NPC 点击无响应:脚本生成的 NPC 现在始终注册点击回调。
  • 🐛 修复路径穿越漏洞与副本创建时的并发隐患。
  • 🐛 修复队伍成员界面无法解析 PlaceholderAPI 变量的问题。
  • 🐛 启动横幅改为在插件启动阶段打印。
  • 🔌 新增 QueDPReloadEvent 重载完成事件,/dg admin reload 后触发,供附属插件联动重载自身配置。
  • 🔌 新增副本世界提供者 SPI 扩展点(DungeonWorldProvider),附属插件可接管副本世界的创建/销毁。
  • 🔌 API 回调统一改用 java.util.function 类型,避免 TabooLib 重定向后外部插件签名不匹配。
  • ✨ 队伍仓库开关:新增 party.storage.enabled 配置项,可整体关闭队伍仓库功能。
  • ✨ 强制副本内共享:新增 party.force-dungeon-only-share-scope,开启后队伍战利品/经验共享范围被强制锁定为「仅副本内」。
  • ⚡ revive 动作支持原地复活:传入 原地 / inplace 参数可在死亡位置复活,而非传送回出生点。详见 玩家类动作。
  • 🔌 新增怪物相关事件:DungeonMobSpawnEvent(怪物生成)、DungeonMonsterGroupStartEvent(怪物组即将启动,可取消用于跳波)。
  • 🔌 扩展对外 API 与选择器工具,新增 MythicMobs 集成接口。
  • ✨ BossBar 动态变色:boss_bar('update', ...) 新增 颜色=COLOR 参数,可在更新时动态改变进度条颜色。详见 特效类动作。
  • 🐛 副本清理时自动移除脚本创建的 BossBar,避免残留。
  • 🐛 修正 world_time 的 HH:MM 换算:现在与现实钟表一致(Minecraft 的 0 tick 对应 06:00)。详见 世界类动作。
  • ⚡ 完善 Wiki 文档:新增权限节点页面、补全体力/更新配置说明、补充 dungeon 对象方法列表与 NPC 动作文档。