/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):

  1. 把参数逆序压入 argStack(DatapackCommand.java:70-72)
  2. 参数为空 → 打印帮助并返回
  3. gpu-debug 在查找世界之前被提前处理,因为它不需要世界或数据包状态(DatapackCommand.java:80-84)
  4. 其余子命令:取 DimensionManager.getWorld(0)(恒为主世界,DatapackCommand.java:86)→ 由 world.getSaveHandler().getWorldDirectory() 取得世界存档目录 → DatapackLoader.loadDatapacks(DatapackLoader.discoverCandidates(saveDir)) 加载包列表 → worldInfo.db$syncPackDeltas(packs) 把存档里的启用/排序状态与磁盘实际存在的包对齐
  5. 进入 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>。此处以源码行为为准。

相关条目