网络封包

基本信息

属性 值
通道名 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)。

相关条目