Packet Channel
基本信息
| 属性 | 值 |
|---|---|
| 类 | gcewing.sg.packets.SGChannel(packets/SGChannel.java:23),共 71 行 |
| 父类 | gcewing.sg.packets.BaseDataChannel |
| 通道名 | Info.modID,即 SGCraft(SGCraft.java:134,字符串传入见 packets/SGChannel.java:27-30) |
| 创建时机 | init 阶段,channel = new SGChannel(Info.modID)(SGCraft.java:134) |
| 消息类型数 | 2(ConnectOrDisconnect、EnteredAddress) |
功能
BaseDataChannel 用字符串消息名做路由:NetworkRegistry.INSTANCE.newChannel(name, handler) 建立 FML 通道(packets/BaseDataChannel.java:38),收包时先读一个 UTF 消息名,再在 HandlerMap.SERVER 里查带 @ServerMessageHandler 注解的处理方法(packets/BaseDataChannel.java:75-80、packets/BaseDataChannel.java:87-91)。
SGChannel 只定义了两条客户端 → 服务端消息,都属于 GUI 操作:
| 消息 | 发送方法 | 处理方法 | 载荷 |
|---|---|---|---|
ConnectOrDisconnect |
sendConnectOrDisconnectToServer(packets/SGChannel.java:32-37) |
handleConnectOrDisconnectFromClient(:39-46) |
方块坐标 + 地址(UTF) |
EnteredAddress |
sendEnteredAddressToServer(:48-53) |
handleEnteredAddressFromClient(:55-61) |
方块坐标 + 地址(UTF) |
两条消息都用 writeCoords / readCoords 包装 TileEntity 坐标(packets/SGChannel.java:63-69),服务端收到后再用 SGBaseTE.at(world, pos) / DHDTE.at(world, pos) 定位方块,定位失败就静默丢弃(packets/SGChannel.java:43-45、:59-60)。
数值
| 项目 | 值 | 来源 |
|---|---|---|
| 通道消息名长度 | UTF,最大 32767 字符 | DataPacket.writeUTF |
| 未找到处理器的行为 | SGCraft.log.warn 记一条警告 |
packets/BaseDataChannel.java:78-79、:83-84 |
| 处理方法抛出异常 | 包成 RuntimeException 抛出,不吞掉 |
packets/BaseDataChannel.java:94-99 |
| 服务端 → 客户端业务消息 | 0 | SGChannel 中只有两个 openServer 调用 |
模组没有自己的服务端 → 客户端业务消息,星门状态同步靠 TileEntity 的 NBT 同步而非封包。
交互
- 在星门地址界面操作:客户端发
ConnectOrDisconnect,服务端te.connectOrDisconnect(address, player)。 - 在控制器地址界面输入:客户端发
EnteredAddress,服务端te.setEnteredAddress(address),只写入enteredAddress字段(guis/DHDTE.java:76-79)。
相关条目
- Stargate Base -
ConnectOrDisconnect的作用对象 - Stargate Controller -
EnteredAddress的作用对象 - 界面 - 这两条消息的触发界面