跳到正文
烈焰甘蔗Wiki

AbstractPacket(未使用的旧版包基类)

事实基准:harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。

概览

属性 值 来源
类 com.pam.harvestcraft.AbstractPacket AbstractPacket.java:10
修饰 public abstract class AbstractPacket.java:10
抽象方法 4 个,全部无实现 AbstractPacket.java:11-17
子类 5 个 见下表
实际使用 无 —— 详见"可达性" —

抽象方法

方法 签名 行
encodeInto void encodeInto(ChannelHandlerContext, ByteBuf) AbstractPacket.java:11
decodeInto void decodeInto(ChannelHandlerContext, ByteBuf) AbstractPacket.java:13
handleClientSide void handleClientSide(EntityPlayer) AbstractPacket.java:15
handleServerSide void handleServerSide(EntityPlayer) AbstractPacket.java:17

四个方法都是纯抽象(无方法体),且不带 @Override 以外的任何注解。

这个形状对应 Forge 1.7.10 之前的老式自定义 payload 写法:模组自建 FMLEmbeddedChannel,注册一个判别器 → AbstractPacket 子类的映射表,再手工在 ChannelHandler 里分派 handleClientSide / handleServerSide。

子类(全部为空壳)

子类 文件 行数 四个方法是否为空
PacketMarket PacketMarket.java 28 全部空
PacketAnimalTrap PacketAnimalTrap.java 28 全部空
PacketApairy PacketApairy.java 28 全部空
PacketFishTrap PacketFishTrap.java 28 全部空
PacketPresser PacketPresser.java 28 全部空

五个文件除类名外逐字节同构。逐个说明见 旧版空壳包。

可达性:整条继承链是死代码

AbstractPacket 与其 5 个子类在全模组范围内的引用点,只有:

  • 各自的 import com.pam.harvestcraft.AbstractPacket;
  • 各自的 extends AbstractPacket
  • AbstractPacket 自身的类声明

具体地,对 AbstractPacket 的引用共 11 处(com/pam/harvestcraft/ 下):5 个子类各 1 处 import + 1 处 extends = 10 处,加类声明 1 处。

没有任何一处出现 new PacketMarket() / new PacketPresser() 等实例化,没有任何 FMLEmbeddedChannel 字段,没有任何 sendTo 调用。

而真正在用的三个包(MessageMarketBrowse / MessageMarketBuy / MessageMarketClosed)实现的是 IMessage + IMessageHandler,完全不继承 AbstractPacket。

源码缺陷

  • 整条继承链(1 个抽象类 + 5 个实现,共 6 个类、约 175 行)是残留死代码。 它们对应的是 Pam’s HarvestCraft 1.6 时代(单块 FMLEmbeddedChannel)的包结构;1.7.10 移植时改用了 SimpleNetworkWrapper,旧类没有删除。
  • 保留它们不会产生运行时行为(CFR 反编译保留,new 指令存在但永不执行),但会让人误以为"诱捕机/蜂箱/鱼 Trap/压榨机/市场各有独立网络包"。实际上这 5 个机器没有任何自定义包——它们的容器/方块实体同步靠原版机制。

反编译伪影说明

这 6 个类的空方法体不是 CFR 伪影。判据:CFR 对有方法体的方法一定会输出方法体;这里 5 个子类的 20 个方法全部输出为 {\n},且 AbstractPacket 的 4 个方法被识别为 abstract(CFR 依据 class 文件的 ACC_ABSTRACT 标志得出,与方法体无关)。空方法体在 class 文件层面即为空(单条 return 指令)。

相关条目

浏览全部模组