PacketEncoder.java

net.minecraft.network.PacketEncoder

信息

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

    TODO

字段/常量

  • LOGGER

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

      TODO

  • protocolInfo

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

      TODO

内部类/嵌套类型

构造器

public PacketEncoder(ProtocolInfo<T> protocolInfo) @ L16

  • 构造器名:PacketEncoder
  • 源码定位:L16
  • 修饰符:public

参数:

  • protocolInfo: ProtocolInfo

说明:

TODO

方法

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

protected void encode(ChannelHandlerContext ctx, Packet<T> packet, ByteBuf output) @ L20

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

参数:

  • ctx: ChannelHandlerContext
  • packet: Packet
  • output: ByteBuf

说明:

TODO

代码

public class PacketEncoder<T extends PacketListener> extends MessageToByteEncoder<Packet<T>> {
    private static final Logger LOGGER = LogUtils.getLogger();
    private final ProtocolInfo<T> protocolInfo;
 
    public PacketEncoder(ProtocolInfo<T> protocolInfo) {
        this.protocolInfo = protocolInfo;
    }
 
    protected void encode(ChannelHandlerContext ctx, Packet<T> packet, ByteBuf output) throws Exception {
        PacketType<? extends Packet<? super T>> packetId = packet.type();
 
        try {
            this.protocolInfo.codec().encode(output, packet);
            int writtenBytes = output.readableBytes();
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug(
                    Connection.PACKET_SENT_MARKER,
                    "OUT: [{}:{}] {} -> {} bytes",
                    this.protocolInfo.id().id(),
                    packetId,
                    packet.getClass().getName(),
                    writtenBytes
                );
            }
 
            JvmProfiler.INSTANCE.onPacketSent(this.protocolInfo.id(), packetId, ctx.channel().remoteAddress(), writtenBytes);
        } catch (Throwable var9) {
            LOGGER.error("Error sending packet {}", packetId, var9);
            if (packet.isSkippable()) {
                throw new SkipPacketEncoderException(var9);
            }
 
            throw var9;
        } finally {
            ProtocolSwapHandler.handleOutboundTerminalPacket(ctx, packet);
        }
    }
}

引用的其他类