无线接入器

基本信息

属性 值
注册名 ae2stuff:Wireless
英文名 Wireless Connector(中枢形态:Wireless Hub)
中文名 无线接入器 / 无线中枢
TileEntity net.bdew.ae2stuff.machines.wireless.TileWireless
ItemBlock net.bdew.ae2stuff.machines.wireless.ItemBlockWireless
硬度 1(BlockWireless.scala:40)
材质 MachineMaterial
变体数 34 个 meta(0–33)
内部储能 无(只有可变待机功耗)
GUI 无(用 AE2 石英切割刀打开 AE2 重命名界面)

两种形态

无线接入器有「客户端」和「中枢(Hub)」两种角色,差别在于能否一对多:

形态 meta 范围 数量 作用
客户端(透明) 0 1 连 1 个中枢
客户端(染色) 1–16 16 连 1 个中枢,对应 AEColor 16 色
中枢(透明) 17 1 最多连 32 个客户端
中枢(染色) 18–33 16 最多连 32 个客户端

meta → 颜色/角色的映射见 BlockWireless.scala:132-147:放置时 itemDamage > 16 判为中枢,颜色 = AEColor(itemDamage - 18)(17 特判为 Transparent);itemDamage > 0 判为染色客户端,颜色 = AEColor(itemDamage - 1)。掉落与 getPickBlock 用同一套反向映射(BlockWireless.scala:44-70、:84-104)。

创意标签页枚举 0 to 33 共 34 个变体(BlockWireless.scala:77),图标注册 1 to 34 共 34 张(BlockWireless.scala:220)。

配对流程

用 无线设置工具 右键接入器:

  1. 第一次:工具 NBT 尚无 loc → 记录坐标与维度,聊天提示「已绑定到 x,y,z」(ItemWirelessKit.scala:142-153)
  2. 第二次(工具已绑定)→ 校验后连接:
    • 目标方块必须是 BlockWireless(否则 return false,工具不消耗)
    • 玩家必须对两端网格都有 SecurityPermissions.BUILD(ItemWirelessKit.scala:64-69、:88-97)
    • 必须同维度(ItemWirelessKit.scala:77-79)
    • 点同一块 → 清除绑定
    • 中枢已满(connectionsList.length == 32)或目标中枢满 → 拒绝
    • 中枢不能连中枢(ItemWirelessKit.scala:98-99)
    • 通过后把玩家设为两端方块的 setPlayerID 属主,调用 doLink

成功后无论成败都会 clearLocation(stack)(ItemWirelessKit.scala:135),即工具是一次性配对的。doLink 抛 FailedConnection(AE2 频道不足)时回滚 doUnlink 并把 e.getMessage 显示给玩家(ItemWirelessKit.scala:126-133)。

功耗公式

TileWireless.setupConnection(TileWireless.scala:118-131)在建立 AE2 网格连接后计算:

dist  = sqrt(dx² + dy² + dz²)          // 两接入器的欧氏距离(整数坐标)
power = PowerBase + PowerDistanceMultiplier * dist * ln(dist² + 3)

两端都设成该值;中枢另用 setHubPowerUse 累加到 hubPowerUsage(TileWireless.scala:153-156),断开时 setHubPowerUse(-getIdlePowerUsage) 减回(TileWireless.scala:173)。功耗值持久化在 NBT 的 _poweruse(grid/VariableIdlePower.scala:18-19),变化时发 MENetworkPowerIdleChange。

数值名 值
PowerBase 1
PowerDistanceMultiplier 0.1
中枢最大连接数 32(硬编码于 ItemWirelessKit.scala:71 与 :101,无配置项)

注意 dist² + 3 中的 +3 保证 dist = 0 时 ln(3) ≈ 1.0986 而非负无穷/NaN。

拆除

breakBlock 调 te.doUnlink()(BlockWireless.scala:106-118)。中枢会对所有客户端递归 doUnlink();客户端则 breakConnection() 并把对端置空。对端中枢的 connectionsList 清空后 meta 自动回到 0(TileWireless.scala:174-188)。

breakConnection 只在 connection != null 时 connection.destroy(),并把自身与对端 meta 归 0。

染色与重命名

  • 染色:实现 AE2 的 recolourBlock(TileWireless.scala:257-272),颜色存 NBT Color(AEColor ordinal)
  • 重命名:手持 ToolQuartzCuttingKnife 右键,打开 AE2 自己的 GuiBridge.GUI_RENAMER,GUI id 为 (GUI_RENAMER.ordinal << 5) | side(BlockWireless.scala:150-177)
  • 自定义名会同步到配对的对端(setCustomName,TileWireless.scala:282-286)
  • 旧存档缺 Color / isHub 键时补默认值(TileWireless.scala:236-241)

WAILA

注册 WailaWirelessDataProvider(waila/WailaWirelessDataProvider.scala),显示是否已连接、频道数与实时功耗。

配方

3×3(recipes.cfg:42-54),F = M:purifiedFluixCrystal(AE2 材质,纯净福鲁伊克斯水晶),P = M:calcProcessor(AE2 材质),W = M:wireless(AE2 材质),I = OD:ingotIron:

F P F
I W I
F P F

另有 33 条硬编码无序配方用于 meta 归一化与中枢/客户端互转(Recipes.scala:19-146):meta 1..16 → meta 0(去色客户端)、meta 17..33 → meta 17(任意中枢 → 透明中枢)。反方向(0 → 有色、17 → 有色中枢)没有配方,染色只能靠 AE2 的颜色小液囊 + 石英刀在世界里进行。

非多方块

无线接入器不是多方块结构。它由两个彼此远离的独立方块经 NBT 坐标配对 + AE2 IGridConnection 连通,doLink 只在「双方都不是中枢」或「仅一方是中枢」时成立(TileWireless.scala:75-93),不做体积检测、不可旋转拆除、没有控制器方块。