网络封包
基本信息
| 属性 | 值 |
|---|---|
| 通道名 | ThaumicTinkerer|B |
| 通道创建 | NetworkRegistry.INSTANCE.newSimpleChannel(LibMisc.MOD_ID + "|B"),ThaumicTinkerer.java:55 |
| 通道常量 | LibMisc.NETWORK_CHANNEL = MOD_ID(即 ThaumicTinkerer,不含 |B) |
| ID 区间 | 142 – 151(共 10 个) |
| 注册方法 | TTCommonProxy.registerPackets(),TTCommonProxy.java:218-228 |
| 注册调用点 | TTCommonProxy.java:153(init() 生命周期) |
| 封包类数 | 9 个具体类(+ 1 个抽象基类 PacketTile) |
LibMisc.NETWORK_CHANNEL(LibMisc.java:22)与实际通道名并不相同:前者是 ThaumicTinkerer,后者在创建时追加了 |B 后缀。
数值
| ID | 封包类 | 方向 | 用途 |
|---|---|---|---|
| 142 | PacketSoulHearts |
CLIENT | 灵魂心条同步 |
| 142 + 1 | PacketToggleArmor |
CLIENT | 觉醒护甲形态切换同步 |
| 142 + 2 | PacketToggleArmor |
SERVER | 同一类的服务端方向 |
| 142 + 3 | PacketWarpGateButton |
SERVER | 传送门按钮 |
| 142 + 4 | PacketWarpGateTeleport |
SERVER | 传送门传送 |
| 142 + 5 | PacketEnchanterAddEnchant |
SERVER | 注魔器添加附魔 |
| 142 + 6 | PacketEnchanterStartWorking |
SERVER | 注魔器开始工作 |
| 142 + 7 | PacketMobMagnetButton |
SERVER | 生物磁石按钮 |
| 142 + 8 | PacketTabletButton |
SERVER | 动画板按钮 |
| 142 + 9 | PacketPlacerButton |
SERVER | 远程放置器按钮 |
10 次 registerMessage 调用对应 9 个不同的类 —— PacketToggleArmor 被注册两次(ID 142+1 客户端、142+2 服务端),这是 FML SimpleNetworkWrapper 的常规做法:同一消息类在两个方向各占一个 discriminator。
封包类所在目录:thaumic.tinkerer.common.network.packet(6 个)与 …packet.kami(4 个)。
功能
抽象基类 PacketTile
PacketTile<T extends TileEntity> 实现 IMessage(network/packet/PacketTile.java:25),携带 dim, x, y, z 四个定位字段与两个 transient 字段 tile / player。构造时从 TileEntity 读取坐标与维度:
this.x = tile.xCoord; this.y = tile.yCoord; this.z = tile.zCoord;
this.dim = tile.getWorldObj().provider.dimensionId;
(PacketTile.java:34-38)
serialVersionUID = -1447633008013055477L。它自身不被注册,仅作为 7 个具体封包的公共父类:
| 子类 | 泛型 TileEntity | 源码 |
|---|---|---|
PacketEnchanterAddEnchant |
TileEnchanter |
PacketEnchanterAddEnchant.java:24 |
PacketEnchanterStartWorking |
TileEnchanter |
PacketEnchanterStartWorking.java:19 |
PacketTabletButton |
TileAnimationTablet |
PacketTabletButton.java:20 |
PacketMobMagnetButton |
TileMobMagnet |
PacketMobMagnetButton.java:20 |
PacketPlacerButton |
TileRPlacer |
PacketPlacerButton.java:12 |
PacketWarpGateButton |
TileWarpGate |
PacketWarpGateButton.java:21 |
PacketWarpGateTeleport |
TileWarpGate |
PacketWarpGateTeleport.java:23 |
其余 2 个具体封包 PacketSoulHearts 与 PacketToggleArmor 直接实现 IMessage,不经 PacketTile。
注意
PacketPlacerButton绑定的是TileRPlacer—— 而BlockRPlacer的shouldRegister()恒为false,该方块永不注册,因此这个封包在正常游戏中没有可交互的方块目标(见 机器与功能方块)。
同步处理器
客户端 TTClientProxy 另有对应的处理逻辑(TTClientProxy.java)。服务端侧在 serverStarting()(TTCommonProxy.java:197)中注册 3 个命令并启动 PotionEffectHandlerServer(TTCommonProxy.java:201-207)。
相关条目
- 机器与功能方块 - 5 个封包对应的方块交互
- KAMI 维度与浮空装置 - 传送门 2 个封包
- 软依赖 - 封包对模组加载状态的依赖