/sl_channel 指令
基本信息
| 属性 | 值 |
|---|---|
| 类 | com.gtnewhorizon.structurelib.command.CommandConfigureChannels |
| 指令名 | sl_channel |
| 权限等级 | 0(所有玩家) |
| 注册位置 | StructureLib.serverStarting,服务端指令 |
功能
/sl_channel 管理存储在手持 Constructable Trigger 上的子通道数据。子通道是键值对,键为全小写字符串、值为正整数,用来告诉多方块"用哪个变体"。数量本身由物品堆叠数(主通道)承载,子通道则存在物品 NBT 的 channels 复合标签里。
前置条件
按 processCommand 的检查顺序:
- 至少要有一个参数,否则抛出用法错误
- 发送者必须是
EntityPlayerMP,否则报must be a player - 玩家主手必须手持
ItemConstructableTrigger,否则报must hold a hologram
语法
/sl_channel wipe
/sl_channel getall
/sl_channel get <channel name>
/sl_channel unset <channel name>
/sl_channel set <channel name> <value>
<channel name> 可以包含空格:get/unset 会把第 2 个及之后的参数全部用空格拼回通道名,set 则把中间若干个参数拼成通道名、最后一个参数作为数值。
各子命令行为
| 子命令 | 参数要求 | 行为 |
|---|---|---|
wipe |
无 | ChannelDataAccessor.wipeChannelData 清除全部子通道 |
getall |
无 | 若无子通道输出 No subchannel;否则先输出子通道数量,再逐行输出 键: 值 |
get |
通道名 | 存在则输出 键 value: 值,否则输出 键 value: N/A |
set |
通道名 + 数值 | 数值必须是正整数(<= 0 报 <value> not a valid value),写入后同步背包变更并回显 |
unset |
通道名 | 见下方"已知缺陷" |
已知缺陷:unset 不会生效
processCommand 使用了两层 switch。第一层 switch 把 get 和 unset 合并处理,二者都只是跳出到第二层 switch;但第二层 switch 只匹配 get、clear、set 三个分支,没有 unset 分支。
因此 /sl_channel unset <name> 会被参数校验通过、通道名也会被正确拼接,但落到第二层 switch 时没有任何 case 命中,静默无任何效果(不报错、不提示)。
同样地,第二层的 clear 分支虽然存在,但它在第一层 switch 中不可达——第一层只接受 getall、wipe、get/unset、set,clear 会在第一层就落入 default 分支抛出用法错误。
unset 的实际清除逻辑仍然存在于 ChannelDataAccessor.unsetChannelData,只是指令层没有把它接上;玩家应改用 GUI 中的 Remove 按钮完成清除。
Tab 补全
第一个参数从 get、set、unset、wipe、getall 五个子命令中补全;其余参数位置返回 null(无补全)。
相关条目:通道系统、Constructable Trigger。