高级无线设置工具

基本信息

属性 值
注册名 ae2stuff:AdvWirelessKit
英文名 Advanced Wireless Setup Kit
中文名 无中文翻译(lang/zh_CN.lang 缺该键,见下方缺陷)
实现 net.bdew.ae2stuff.items.AdvWirelessKit(SimpleItem + AdvItemLocationStore)
最大堆叠 1(AdvWirelessKit.scala:32)
创造标签 itemGroup.bdew.ae2stuff

功能

高级无线设置工具是 无线设置工具 的队列版:NBT 里的 loc 从单个 Compound 变成 Compound 列表,可一次预置多个坐标。它有两种模式:

模式常量 值 行为
MODE_QUEUING 0 每次右键接入器入队一个坐标,连接后自动弹出队首
MODE_BINDING 1 退回单坐标行为,行为等同普通无线设置工具

模式切换

潜行 + 右键(onItemRightClick,AdvWirelessKit.scala:51-72):

  • 若此刻按下 模式切换按键 → 不切模式,而是清空整个队列(while (hasLocation(stack)) popLocation(stack)),并提示 ae2stuff.wireless.advtool.queueing.clear
  • 否则 toggleMode(stack) 在 MODE_QUEUING / MODE_BINDING 之间轮转((mode + 1) % 2,misc/AdvItemLocationStore.scala:122-133),并播报 ...queueing.activated 或 ...binding.activated

NBT 无 mode 键时 getMode 写入并返回 MODE_QUEUING,即默认是队列模式(AdvItemLocationStore.scala:111-120)。

NBT 结构

键 类型 含义
loc NBTTagList(COMPOUND) 坐标队列,队首 = 索引 0
dim int 维度 id,整个队列共用一个
mode int 0 = 队列,1 = 绑定

popLocation 弹出队首后,若列表空则同时移除 loc 与 dim(AdvItemLocationStore.scala:103-106)。

addLocation 有两条拒绝规则(AdvItemLocationStore.scala:23-46):

  1. 已有 dim 且与新维度不同 → 返回 false(但代码未 return,继续执行入队,见下方缺陷)
  2. 队列中已存在同坐标的非中枢接入器 → 返回 false

维度限制

与普通工具一致:不能跨维度。dim 字段是队列级单值,所以一次预置的坐标必须全在同一维度。

无序队列

getNextLocation 取索引 0(AdvItemLocationStore.scala:76-79),因此是先进先出。坐标被消费的顺序等于写入顺序。

配方:默认配置下无获取途径

recipes.cfg 全文只给 无线设置工具 一条配方(:50),没有 [I:ae2stuff:AdvWirelessKit] 的任何产出。Recipes.scala:11-14 那条无序配方是 AdvWirelessKit → AdvWirelessKit,只用于清除 NBT,无法从无到有。

在默认 tuning.cfg + recipes.cfg 下,本物品只能通过刷怪笼战利品、自定义配方或 /give 获得。

已知缺陷

  1. 缺中文翻译:src/main/resources/assets/ae2stuff/lang/zh_CN.lang 全文 49 行,缺 item.ae2stuff.AdvWirelessKit.name。en_US.lang:13 与 de_DE.lang:11 都有该键。中文环境下物品名显示为 item.ae2stuff.AdvWirelessKit.name
  2. addLocation 缺少提前返回:misc/AdvItemLocationStore.scala:31-33 维度不同时写的是 false 而非 return false,方法会继续走到 :42 完成入队并返回 true——跨维度检查实际不生效
  3. isHub 判定反了::38 的条件是 if (pos == loc && !isHub) return false,即只禁止把非中枢坐标重复入队,允许中枢重复入队