一个纯数据包的任务调度框架,全部用 mcfunction 写成。零 Mod,零外部库。
原版 /schedule 只能做一件事:过一会儿跑个函数。它不管是谁下的单,不会在你退出游戏后等着你回来,也没法取消或暂停。
这个包把这些都补上了:持久化队列、执行上下文冻结、玩家离线自动恢复、失败重试、暂停和恢复、UUID 追踪。
| 你的 MC 版本 | 下这个 |
|---|---|
| 1.21.9 – 26.3 | dist/doom.schedule-v2.3.1.zip |
| 1.21.5 – 1.21.8 | dist/doom.schedule-v2.3.1-mc1.21.5-1.21.8.zip |
两份命令层逐字节相同,只有 pack.mcmeta 的版本声明不同。
- 解压 zip,得到一个
doom.schedule/文件夹 - 整个文件夹放进
<存档>/datapacks/。服务器放world/datapacks/ - 进游戏跑
/reload
装好后跑 /function doom.schedule:__help__,聊天栏会列出全部命令。
三条命令先试一下(粘贴进聊天栏或命令方块都行):
/function doom.schedule:schedule {run:'say hello',time:5,unit:'s',id:'hello'}
/function doom.schedule:schedule_with_retry {run:'say hi',time:20,unit:'t',id:'rt',retry:3,retry_delay:5}
/function doom.schedule:cancel_one {id:'hello'}
删掉 datapacks/doom.schedule/,跑 /reload。
这个包不改原版任何东西,删了就干净了。队列数据留在 storage doom.schedule:data 里,想清干净就先跑 /function doom.schedule:clear 再删包。
dist/ 里每个 zip 的 sha256 都写在 dist/SHA256SUMS.txt,在 zip 所在目录里跑:
Linux / macOS: sha256sum -c SHA256SUMS.txt
Windows PowerShell: (Get-FileHash doom.schedule-v2.3.1.zip -Algorithm SHA256).Hash
输出 OK(或哈希与表里那串相等),说明下载完整。不等就别用,重新下。当前值:
| 文件 | sha256 |
|---|---|
doom.schedule-v2.3.1.zip(1.21.9–26.3) |
66e52def3e11a47edcbb3ad2ce1f9e2a1c293403e69b706cedade55db8bf7bf3 |
doom.schedule-v2.3.1-mc1.21.5-1.21.8.zip(1.21.5–1.21.8) |
0ba3105b9429f630f075a12d6b327c932d29a5664ba9398490798e5645586612 |
doom.schedule-v2.2.zip(旧版,已被取代) |
44b950445764d710de058f5b54ce49ed32c90919cd682cd9fafe9ead7d418482 |
GitHub 在每个 Release 附件右侧也会显示同一串,可直接对照。
doom.schedule-v2.2.zip 是历史版本,留下来给需要回退的人。它已被 v2.3.1 取代,新装请用上面那两个。
它的 pack.mcmeta 声明 supported_formats 48–82,下界写到了 48,而这份包的命令只在 1.21.5(格式 71)以上测过。v2.3.1 已经把区间收紧到实测边界。
| 文件 | 里面是什么 | 适合谁 |
|---|---|---|
dist/doom.schedule-v2.3.1.zip(主用成品 · 1.21.9–26.3) |
完整的 doom.schedule/ 数据包:36 个 mcfunction + 一组函数标签 + pack.mcmeta + 一份 mcdoc 补全定义 |
1.21.9 及更新的版本。命令层与 v2.2 逐字节相同,只是 pack.mcmeta 换成新式 |
dist/doom.schedule-v2.3.1-mc1.21.5-1.21.8.zip(1.21.5–1.21.8) |
同一套命令,pack.mcmeta 用旧式(sf 71–81) |
1.21.5 – 1.21.8。命令层与主用变体逐字节相同 |
原版 /schedule function 只能“到点触发一个函数名”。一旦要持久化、要认人、要能撤销,它就不够了:
| 需求 | 原版 /schedule |
doom.schedule |
|---|---|---|
| 服务端重启后任务还在 | 全丢 | 队列存在 storage,随存档持久化 |
| 任务属于哪个玩家/实体 | 只记函数名 | 入队时冻结 UUID(4 int → hex,execute as $(by) 匹配) |
| 执行时的位置/朝向/维度 | 无 | 入队时冻结 dim / posX..posZ / rotX,rotY |
| 目标掉线了怎么办 | 照跑或报错 | 进 offline[] 冻结,玩家上线自动恢复(10/tick) |
| 执行失败再来一次 | 失败就是失败 | schedule_with_retry,retry + retry_delay |
| 取消 / 暂停 / 恢复 | 发出去就收不回 | cancel_one / cancel_all / pause / resume |
| 外部依赖 | — | 无(不需要 Bookshelf、不需要 gu、不需要任何库) |
细节与设计取舍见 docs/20-架构与实现详解.md(原文 FEATURE.md)。
| MC 版本 | data format | 用哪份 | 实测 |
|---|---|---|---|
| 1.21.5 | 71 | dist/doom.schedule-v2.3.1-mc1.21.5-1.21.8.zip |
32/32 实测通过 |
| 1.21.6 | 80 | ...-mc1.21.5-1.21.8.zip |
未单独实测,按同区间外推 |
| 1.21.7 / 1.21.8 | 81 | ...-mc1.21.5-1.21.8.zip |
未单独实测,按同区间外推 |
| 1.21.9 / 1.21.10 | 88.0 | dist/doom.schedule-v2.3.1.zip |
32/32 实测通过(1.21.10) |
| 1.21.11 | 94.1 | dist/doom.schedule-v2.3.1.zip |
未单独实测,按同区间外推 |
| 26.1 / 26.1.1 / 26.1.2 | 101.1 | dist/doom.schedule-v2.3.1.zip |
未单独实测,按同区间外推 |
| 26.2 | 107.1 | dist/doom.schedule-v2.3.1.zip |
未单独实测,按同区间外推 |
| 26.3 | 121.0 | dist/doom.schedule-v2.3.1.zip |
32/32 实测通过 |
| 1.21.4 及更低 | ≤ 61 | 不支持 | — |
为什么必须拆两份:1.21.9 起 pack.mcmeta 强制要求 min_format/max_format,
且要和 supported_formats 范围逐值一致;而 1.21.5–1.21.8 不认这两个字段。
命令层两份逐字节相同,差异只在 pack.mcmeta(各 1 个文件)。
自称区间和实测覆盖区间对得上。两份 pack.mcmeta 都已收紧到各自的真实边界:v2.3.1 声明 88.0–121.0(1.21.9–26.3,纯新式),...-mc1.21.5-1.21.8 声明 71–81(1.21.5–1.21.8)。
其余两份变体的源码树在 variants/。
| 其他 | 能不能用 |
|---|---|
| 单人存档 / 服务器 | 都行;服务器放 world/datapacks/ |
| 实验性玩法 | 不需要开任何实验性玩法 |
完整的版本矩阵与升级/降级见 docs/13-兼容与版本.md。
这个包是手写的 mcfunction,没有生成器,所以仓库里没有 src/。源码本身就在数据包本体里。
| 你想看 | 去哪 |
|---|---|
| 每个函数的实现 | doom.schedule/data/doom.schedule/function/,36 个 .mcfunction,文件名就是它们干的事 |
| 函数清单与调用关系 | doom.schedule/README.md(包内自带的文件结构表) |
函数标签(load / tick / 可注册的自定义维度) |
doom.schedule/data/doom.schedule/tags/function/ |
| storage 结构定义(Spyglass / Misode mcdoc 补全) | doom.schedule/mcdoc/doom.schedule.mcdoc |
| 成品与其 sha256 | dist/ |
| 逐版变更 | CHANGELOG.md |
成品即源码:dist/doom.schedule-v2.3.1.zip 里的每个文件,都与仓库 doom.schedule/ 下同名文件逐字节相同(45/45 一致)。你从 Releases 下的 zip,和你在网页上点开的 mcfunction,是同一份东西,不存在“仓库里是旧版”的情况。
| 文档 | 讲什么 |
|---|---|
docs/10-安装与卸载.md |
单人 / 服务器两条安装路径、怎么确认装上了、怎么卸干净 |
docs/11-玩家手册.md |
全部 API:调度、重试、取消、暂停/恢复、快速调度、返回值 |
docs/12-配置与自定义维度.md |
时间单位、storage 布局、自定义维度注册、mcdoc 补全 |
docs/13-兼容与版本.md |
pack_format、版本矩阵、升级/降级、和其他调度包的对比 |
docs/14-致谢与许可.md |
许可(MIT)、第三方边界、致谢 |
docs/20-架构与实现详解.md |
四队列模型、入队流程、looper_exec 分流表、性能考量 |
docs/README.md |
文档索引 |
MIT:自用、游玩、改、转发、商用都可以,保留版权声明即可。