指令

基本信息

属性 值
指令总数 5(4 条服务端 + 1 条客户端)
权限基类 com.github.lunatrius.schematica.command.CommandSchematicaBase
权限等级 0(全部玩家可用,command/CommandSchematicaBase.java:9-12)
名称常量 Names.Command.*.NAME(reference/Names.java:93-155)

注册点(三处,覆盖全部 5 条):

注册位置 指令 前置条件
proxy/CommonProxy.java:70-72 /schematicaSave、/schematicaList、/schematicaRemove ConfigurationHandler.serversideSchematicsEnabled
proxy/ServerProxy.java:34 /schematicaDownload 同上
proxy/ClientProxy.java:357 /sblock 无(客户端命令,走 ClientCommandHandler)

功能

/schematicaSave

项 值
用法 /schematicaSave <startX> <startY> <startZ> <endX> <endY> <endZ> <name>
用法来源 Names.Command.Save.Message.USAGE;英文原文见 assets/schematica/lang/en_US.lang:160
参数数 至少 7,少于则抛 WrongUsageException(command/CommandSchematicaSave.java:30-32)
发送者限制 必须为 EntityPlayer,否则抛 CommandException(PLAYERS_ONLY)(:34-36)
配额检查 先调 Schematica.proxy.isPlayerQuotaExceeded(player),超限直接抛异常(:38-40)
写入位置 玩家私有目录 getPlayerSchematicDirectory(player, true)(:58)
文件名 String.format("%s.schematic", name)(:52)——恒为 .schematic 后缀,不受 useSchematicplusFormat 影响

⚠️ 与 CommandSchematicaDownload 不同,/schematicaSave 的文件名不随 useSchematicplusFormat 变化,而下载侧会按该配置拼 .schemplus 或 .schematic(command/CommandSchematicaDownload.java:74-78)。开启 schemplus 格式后保存与下载的后缀不一致。

/schematicaList

项 值
用法 /schematicaList [page](reference/Names.java:169)
参数 可选页码,非数字抛 WrongUsageException(command/CommandSchematicaList.java:53-55)
发送者限制 必须为 EntityPlayer(:41-43)
分页 每页 9 行,硬编码 int pageSize = 9(:57)
列表源 玩家私有目录下经 FileFilterSchematic 过滤的文件(:64、:78)

输出格式为 序号 (可读字节数): 文件名 [Remove][Download],两个方括号是 可点击的聊天链接:Remove 红色、Download 绿色,点击分别执行 /schematicaRemove <name> 与 /schematicaDownload <name>(:89-105)。页尾输出 --- Showing schematics page %d of %d --- 样式的页码头(:122-124)。

字节数经 FileUtils.humanReadableByteCount 转可读格式(:87)。

/schematicaRemove

项 值
用法 /schematicaRemove <name>(reference/Names.java:178)
发送者限制 必须为 EntityPlayer,否则抛 PLAYERS_ONLY(command/CommandSchematicaRemove.java:44-46)
文件名 String.format("%s.schematic", name)(:70)——同样恒为 .schematic,不受 useSchematicplusFormat 影响
路径穿越防护 FileUtils.contains(schematicDirectory, file)(:73)
删除结果 file.delete() 成功发 SCHEMATIC_REMOVED,失败抛 SCHEMATIC_NOT_FOUND(:80-85)

二次确认机制是 MD5 挑战应答(:48-68):首次调用(参数数 ≤ 1)时不删除,改为计算 md5(name, UTF-8) 的 32 位十六进制串,回复一条带红色可点击 “Yes” 链接的确认消息,链接执行的命令是 /schematicaRemove <name> <md5>(:87-99)。第二次调用若末参数长度为 32 且与重算的 MD5 相等才真正删除(:53-66)。

⚠️ 该机制依赖客户端点击回填命令,服务端不校验删除者是否发起者;且 name 由 Strings.join(arguments, " ") 拼成(:49、:58),蓝图名可含空格。

/schematicaDownload

项 值
用法 /schematicaDownload <name>(reference/Names.java:184)
发送者限制 必须为 EntityPlayerMP(command/CommandSchematicaDownload.java:69-71)
路径穿越防护 FileUtils.contains(directory, filename) 校验,不通过则记 error 日志并抛 DOWNLOAD_FAILED(:81-84)
补全 从玩家私有目录列出全部蓝图文件名(:42-61)
传输 读入后放入 DownloadHandler.INSTANCE.transferMap,交由分块协议推送(:89)

文件名后缀按 useSchematicplusFormat 决定:.schemplus 或 .schematic(:74-78)。

/sblock(客户端指令)

项 值
用法 /sblock <primary|target> <block_name> [meta](command/CommandSchematicaSetBlock.java:31)
权限等级 0,且 canCommandSenderUseCommand 无条件返回 true(:35-42)
别名 primary/p → 主方块;target/secondary/t/s → 目标方块(:52-55)
meta 缺省 0(:61)
补全 第一个参数补 primary、target;第二个参数遍历 GameData.getBlockRegistry().getKeys() 补全全量方块名(:104-115)

作用是把方块写入当前工具模式的 primaryBlock / secondaryBlock(:88-99),供 FILL 与 REPLACE_BLOCK 模式使用,详见 工具模式。

方块名查询失败时会自动补 minecraft: 前缀重试(:75-77),并对 minecraft:air 做二次判定(:73、:78)。

⚠️ /sblock 的聊天回执是硬编码英文 ChatComponentText(:90-99),不走语言文件,与本仓库其余 UI 的本地化方式不一致。

数值

数值名 值 来源
指令总数 5 三处注册点合计
服务端指令数 4 CommonProxy.java:70-72 + ServerProxy.java:34
客户端指令数 1 ClientProxy.java:357
权限等级 0(全 5 条) CommandSchematicaBase.java:11、CommandSchematicaSetBlock.java:36
列表分页大小 9 行/页 CommandSchematicaList.java:57
客户端最低准入版本 1.11.0 Schematica.java:35

交互

/schematicaList 输出的 Remove / Download 链接是客户端点击即发的 RUN_COMMAND 事件(command/CommandSchematicaList.java:93、:102),因此实际交互路径是「先 list 再点链接」,与直接输入指令等价。

Schematica.java:41-47 的 @NetworkCheckHandler 会拒绝版本号低于 1.11.0 的客户端连服(minimumClientJoinVersion,:35),以保证配置项两侧一致。⚠️ 该判定用完整版本号字符串与 1.11.0 比较(:44),而 mcmod.info 的 version 字段是 ${modVersion} 构建期占位符(src/main/resources/mcmod.info:5),dev 构建(版本号形如 0.0.0)会被误判为过旧。

相关条目

  • 配置项 - serversideSchematicsEnabled 是这 4 条服务端指令的注册开关
  • 网络封包 - /schematicaDownload 走 Begin→Chunk→End 分块协议
  • 工具模式 - /sblock 设置的方块由 FILL / REPLACE_BLOCK 模式消费