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)。

相关条目