PacketBundlePacker.java

net.minecraft.network.PacketBundlePacker

信息

  • 全限定名:net.minecraft.network.PacketBundlePacker
  • 类型:public class
  • 包:net.minecraft.network
  • 源码路径:src/main/java/net/minecraft/network/PacketBundlePacker.java
  • 起始行号:L11
  • 继承:MessageToMessageDecoder<Packet<?>>
  • 职责:

    TODO

字段/常量

  • bundlerInfo

    • 类型: BundlerInfo
    • 修饰符: private final
    • 源码定位: L12
    • 说明:

      TODO

  • currentBundler

    • 类型: BundlerInfo.Bundler
    • 修饰符: private
    • 源码定位: L13
    • 说明:

      TODO

内部类/嵌套类型

构造器

public PacketBundlePacker(BundlerInfo bundlerInfo) @ L15

  • 构造器名:PacketBundlePacker
  • 源码定位:L15
  • 修饰符:public

参数:

  • bundlerInfo: BundlerInfo

说明:

TODO

方法

下面的方法块按源码顺序生成。

protected void decode(ChannelHandlerContext ctx, Packet<?> msg, List<Object> out) @ L19

  • 方法名:decode
  • 源码定位:L19
  • 返回类型:void
  • 修饰符:protected

参数:

  • ctx: ChannelHandlerContext
  • msg: Packet<?>
  • out: List

    说明:

    TODO

    private static void verifyNonTerminalPacket(Packet<?> msg) @ L41

    • 方法名:verifyNonTerminalPacket
    • 源码定位:L41
    • 返回类型:void
    • 修饰符:private static

    参数:

    • msg: Packet<?>

    说明:

    TODO

    代码

    public class PacketBundlePacker extends MessageToMessageDecoder<Packet<?>> {
        private final BundlerInfo bundlerInfo;
        private BundlerInfo.@Nullable Bundler currentBundler;
     
        public PacketBundlePacker(BundlerInfo bundlerInfo) {
            this.bundlerInfo = bundlerInfo;
        }
     
        protected void decode(ChannelHandlerContext ctx, Packet<?> msg, List<Object> out) throws Exception {
            if (this.currentBundler != null) {
                verifyNonTerminalPacket(msg);
                Packet<?> bundlePacket = this.currentBundler.addPacket(msg);
                if (bundlePacket != null) {
                    this.currentBundler = null;
                    out.add(bundlePacket);
                }
            } else {
                BundlerInfo.Bundler bundler = this.bundlerInfo.startPacketBundling(msg);
                if (bundler != null) {
                    verifyNonTerminalPacket(msg);
                    this.currentBundler = bundler;
                } else {
                    out.add(msg);
                    if (msg.isTerminal()) {
                        ctx.pipeline().remove(ctx.name());
                    }
                }
            }
        }
     
        private static void verifyNonTerminalPacket(Packet<?> msg) {
            if (msg.isTerminal()) {
                throw new DecoderException("Terminal message received in bundle");
            }
        }
    }

    引用的其他类