PacketDecoder.java

net.minecraft.network.PacketDecoder

信息

  • 全限定名:net.minecraft.network.PacketDecoder
  • 类型:public class
  • 包:net.minecraft.network
  • 源码路径:src/main/java/net/minecraft/network/PacketDecoder.java
  • 起始行号:L14
  • 继承:ByteToMessageDecoder
  • 实现:ProtocolSwapHandler
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L15
    • 说明:

      TODO

  • protocolInfo

    • 类型: ProtocolInfo<T>
    • 修饰符: private final
    • 源码定位: L16
    • 说明:

      TODO

内部类/嵌套类型

构造器

public PacketDecoder(ProtocolInfo<T> protocolInfo) @ L18

  • 构造器名:PacketDecoder
  • 源码定位:L18
  • 修饰符:public

参数:

  • protocolInfo: ProtocolInfo

说明:

TODO

方法

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

protected void decode(ChannelHandlerContext ctx, ByteBuf input, List<Object> out) @ L22

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

参数:

  • ctx: ChannelHandlerContext
  • input: ByteBuf
  • out: List

    说明:

    TODO

    代码

    public class PacketDecoder<T extends PacketListener> extends ByteToMessageDecoder implements ProtocolSwapHandler {
        private static final Logger LOGGER = LogUtils.getLogger();
        private final ProtocolInfo<T> protocolInfo;
     
        public PacketDecoder(ProtocolInfo<T> protocolInfo) {
            this.protocolInfo = protocolInfo;
        }
     
        @Override
        protected void decode(ChannelHandlerContext ctx, ByteBuf input, List<Object> out) throws Exception {
            int readableBytes = input.readableBytes();
     
            Packet<? super T> packet;
            try {
                packet = this.protocolInfo.codec().decode(input);
            } catch (Exception var7) {
                if (var7 instanceof SkipPacketException) {
                    input.skipBytes(input.readableBytes());
                }
     
                throw var7;
            }
     
            PacketType<? extends Packet<? super T>> packetId = packet.type();
            JvmProfiler.INSTANCE.onPacketReceived(this.protocolInfo.id(), packetId, ctx.channel().remoteAddress(), readableBytes);
            if (input.readableBytes() > 0) {
                throw new IOException(
                    "Packet "
                        + this.protocolInfo.id().id()
                        + "/"
                        + packetId
                        + " ("
                        + packet.getClass().getSimpleName()
                        + ") was larger than I expected, found "
                        + input.readableBytes()
                        + " bytes extra whilst reading packet "
                        + packetId
                );
            } else {
                out.add(packet);
                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug(
                        Connection.PACKET_RECEIVED_MARKER,
                        " IN: [{}:{}] {} -> {} bytes",
                        this.protocolInfo.id().id(),
                        packetId,
                        packet.getClass().getName(),
                        readableBytes
                    );
                }
     
                ProtocolSwapHandler.handleInboundTerminalPacket(ctx, packet);
            }
        }
    }

    引用的其他类

    • ProtocolInfo

      • 引用位置: 参数/字段
    • ProtocolSwapHandler

      • 引用位置: 实现/方法调用
      • 关联成员: ProtocolSwapHandler.handleInboundTerminalPacket()