Ejemplo n.º 1
0
 @Override
 public void encode(ChannelHandlerContext ctx, Packet<PacketListener> packet, ByteBuf output)
     throws Exception {
   Channel channel = ctx.channel();
   EnumProtocol currentProtocol = channel.attr(currentStateAttrKey).get();
   final Integer packetId = currentProtocol.a(direction, packet);
   if (packetId == null) {
     throw new IOException("Can't serialize unregistered packet");
   }
   ClientBoundMiddlePacket<RecyclableCollection<PacketData>> packetTransformer =
       dataRemapperRegistry.getTransformer(currentProtocol, packetId);
   if (packetTransformer != null) {
     serverdata.clear();
     packet.b(serverdata);
     if (packetTransformer.needsPlayer()) {
       packetTransformer.setPlayer(ChannelUtils.getBukkitPlayer(channel));
     }
     packetTransformer.readFromServerData(serverdata);
     packetTransformer.setLocalStorage(storage);
     packetTransformer.handle();
     RecyclableCollection<PacketData> data = packetTransformer.toData(version);
     try {
       for (PacketData packetdata : data) {
         ByteBuf senddata = Allocator.allocateBuffer();
         senddata.writeByte(
             packetIdRegistry.getNewPacketId(currentProtocol, packetdata.getPacketId()));
         senddata.writeBytes(packetdata);
         ctx.write(senddata);
       }
       ctx.flush();
     } finally {
       for (PacketData packetdata : data) {
         packetdata.recycle();
       }
       data.recycle();
     }
   }
 }