/datapack
基本信息
| 属性 | 值 |
|---|---|
| 指令名 | datapack |
| 实现类 | databack.common.command.DatapackCommand |
| 基类 | net.minecraft.command.CommandBase(1.7.10 原版基类) |
| 注册位置 | CommonProxy.serverStarting → event.registerServerCommand(new DatapackCommand())(CommonProxy.java:120) |
| 权限等级 | 2(getRequiredPermissionLevel 返回 2,DatapackCommand.java:38-40) |
| 生效端 | 服务端注册(FMLServerStartingEvent),客户端可用但结果由服务端状态决定 |
| 子命令数 | 5 |
| Tab 补全 | 有(addTabCompletionOptions,DatapackCommand.java:222-317) |
功能
Databack 唯一的指令,用于管理当前世界的数据包(datapack)加载顺序与启用状态 —— 等价于 1.13+ 原版 /datapack 指令在 1.7.10 上的回移实现。
processCommand 的执行顺序(DatapackCommand.java:69-219):
- 把参数逆序压入
argStack(DatapackCommand.java:70-72) - 参数为空 → 打印帮助并返回
gpu-debug在查找世界之前被提前处理,因为它不需要世界或数据包状态(DatapackCommand.java:80-84)- 其余子命令:取
DimensionManager.getWorld(0)(恒为主世界,DatapackCommand.java:86)→ 由world.getSaveHandler().getWorldDirectory()取得世界存档目录 →DatapackLoader.loadDatapacks(DatapackLoader.discoverCandidates(saveDir))加载包列表 →worldInfo.db$syncPackDeltas(packs)把存档里的启用/排序状态与磁盘实际存在的包对齐 - 进入
switch分派;finally块关闭所有已打开的包源(DatapackCommand.java:210-218)
子命令
| 子命令 | 参数 | 权限 | 实际行为(源码) |
|---|---|---|---|
enable |
<pack name> |
2 | 若包在存档顺序表中,调用 worldInfo.db$enable(packName)(从 db$disabledDatapacks 移除)并回显 Enabled <name>;否则回显 Pack <name> does not exist(DatapackCommand.java:104-110) |
enable |
<pack name> first | last |
2 | 仅重排 db$getDatapackOrder()(remove 后 add(0, ...) / add(...)),回显 Moved <name> to the front/end of the list.(DatapackCommand.java:113-130) |
enable |
<pack name> before|after <existing> |
2 | 用 indexOf(relativeTo) 取基准包下标,基准包不存在则回显 Pack <existing> does not exist 并返回;否则 add(idx, ...) 或 add(idx + 1, ...)(DatapackCommand.java:131-168) |
disable |
<pack name> |
2 | 调用 worldInfo.db$disable(packName)(加入 db$disabledDatapacks)并回显 Disabled <name>(DatapackCommand.java:172-186) |
list |
无 | 2 | 先回显 Available data packs:;若 packs 为空额外回显 None。随后按 worldInfo.db$order(packs)(已应用禁用状态与存档排序)逐行输出 " - " + pack.getPackId(),被禁用的包追加 (disabled),并在输出后逐个 pack.getSource().close()(DatapackCommand.java:187-203) |
reload |
无 | 2 | 回显 Reloading data packs. 后调用 DatapackLoader.load(saveDir, world) 完整重载(DatapackCommand.java:204-208) |
gpu-debug |
无 | 2 | 在世界查找之前处理:调用 DFDebugWindow.open() 打开 GPU 密度函数调试窗口,回显 Opening GPU debug window.(DatapackCommand.java:80-84) |
无参数时调用 printHelp,输出用法行 Usage: /datapack [subcommand]. Valid subcommands: enable, disable, list, reload, gpu-debug. 以及每个子命令的多行说明(DatapackCommand.java:33-35、47-66)。
数值
| 数值名 | 值 |
|---|---|
| 权限等级 | 2(OP 级) |
| 子命令总数 | 5 |
| 定位排序关键字 | 4(first、last、before、after) |
| 目标世界 | 恒为 DimensionManager.getWorld(0),即主世界 |
交互
| 触发 | 行为 |
|---|---|
/datapack(无参数) |
打印帮助文本 |
/datapack list |
列出全部包;已禁用的包标注 (disabled) |
| 客户端执行 | 指令由服务端注册并在服务端执行;gpu-debug 会尝试在运行指令的那一侧打开 Swing 窗口 |
| 权限不足 | canCommandSenderUseCommand 委托原版 sender.canCommandSenderUseCommand(2, "datapack")(DatapackCommand.java:43-45) |
行为注意事项
printHelp 的帮助文本称 enable <pack name> first|last 为「Enables a datapack and moves it to the first or last position.」(DatapackCommand.java:52、54),但源码中带位置关键字的分支(DatapackCommand.java:112-169)只调用 db$getDatapackOrder() 的 remove/add 重排,从未调用 db$enable。即:对一个已被 /datapack disable 禁用的包执行 /datapack enable <name> first,只会改变它在顺序表中的位置,不会把它重新启用。需要真正启用必须单独执行不带位置关键字的 /datapack enable <name>。此处以源码行为为准。
相关条目
- 数据包资源类型 - 本指令管理的 19 类数据资源
- 数据包格式与优先级 -
list顺序与enable/disable生效范围的判定规则 - 密度函数 GPU 调试窗口 -
/datapack gpu-debug打开的界面