无线接入器
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | 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)。
配对流程
用 无线设置工具 右键接入器:
- 第一次:工具 NBT 尚无
loc→ 记录坐标与维度,聊天提示「已绑定到 x,y,z」(ItemWirelessKit.scala:142-153) - 第二次(工具已绑定)→ 校验后连接:
- 目标方块必须是
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),颜色存 NBTColor(AEColorordinal) - 重命名:手持
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),不做体积检测、不可旋转拆除、没有控制器方块。