package com.hypixel.hytale.protocol.io.netty;
import com.hypixel.hytale.protocol.CachedPacket;
import com.hypixel.hytale.protocol.Packet;
import com.hypixel.hytale.protocol.io.PacketIO;
import com.hypixel.hytale.protocol.io.PacketStatsRecorder;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import javax.annotation.Nonnull;
@ChannelHandler.Sharable
public class PacketEncoder extends MessageToByteEncoder<Packet> {
public PacketEncoder() {
}
protected void encode(@Nonnull ChannelHandlerContext ctx, @Nonnull Packet packet, @Nonnull ByteBuf out) {
Class<? extends Packet> packetClass;
if (packet instanceof CachedPacket<?> cached) {
packetClass = cached.getPacketType();
} else {
packetClass = packet.getClass();
}
PacketStatsRecorder statsRecorder = (PacketStatsRecorder)ctx.channel().attr(PacketStatsRecorder.CHANNEL_KEY).get();
if (statsRecorder == null) {
statsRecorder = PacketStatsRecorder.NOOP;
}
PacketIO.writeFramedPacket(packet, packetClass, out, statsRecorder);
}
}