跳到正文
烈焰甘蔗Wiki

/sl_channel 指令

基本信息

属性 值
类 com.gtnewhorizon.structurelib.command.CommandConfigureChannels
指令名 sl_channel
权限等级 0(所有玩家)
注册位置 StructureLib.serverStarting,服务端指令

功能

/sl_channel 管理存储在手持 Constructable Trigger 上的子通道数据。子通道是键值对,键为全小写字符串、值为正整数,用来告诉多方块"用哪个变体"。数量本身由物品堆叠数(主通道)承载,子通道则存在物品 NBT 的 channels 复合标签里。

前置条件

按 processCommand 的检查顺序:

  1. 至少要有一个参数,否则抛出用法错误
  2. 发送者必须是 EntityPlayerMP,否则报 must be a player
  3. 玩家主手必须手持 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。

浏览全部模组