public static void RegisterPackets(PacketEndPoint endPoint, PacketUsage packetUsage)
        {
            Assembly assembly = Assembly.GetExecutingAssembly ();

            IEnumerable<Type> possiblePackets =
                assembly.GetTypes ().Where(a => a.GetCustomAttributes<PacketUsageAttribute> ().Any());

            foreach (Type item in possiblePackets)
            {
                var usage = item.GetCustomAttribute<PacketUsageAttribute> ();
                if ((usage.PacketUsage & packetUsage) == packetUsage)
                {
                    var packet = (Packet) Activator.CreateInstance(item);

                    endPoint.RegisterPacket(packet.Code, item);
                }
            }
        }
 public static void RegisterGeneralPackets(PacketEndPoint endPoint)
 {
     if (endPoint == null) throw new ArgumentNullException("endPoint");
     endPoint.RegisterPacket<KeepAlive>(0x00);
     endPoint.RegisterPacket<ChatPacket>(0x03);
     endPoint.RegisterPacket<EntityEquipment>(0x05);
     endPoint.RegisterPacket<Respawn>(0x09);
     endPoint.RegisterPacket<PlayerDigging>(0x0E);
     endPoint.RegisterPacket<PlayerBlockPlacement>(0x0F);
     endPoint.RegisterPacket<HoldingChange>(0x10);
     endPoint.RegisterPacket<Animation>(0x12);
     endPoint.RegisterPacket<EntityAction>(0x13);
     endPoint.RegisterPacket<PickupSpawn>(0x15);
     endPoint.RegisterPacket<EntityPainting>(0x19);
     endPoint.RegisterPacket<StanceUpdate>(0x1B);
     endPoint.RegisterPacket<EntityVelocity>(0x1C);
     endPoint.RegisterPacket<EntityHeadLook>(0x23);
     endPoint.RegisterPacket<AttachEntity>(0x27);
     endPoint.RegisterPacket<EntityMetadata>(0x28);
     endPoint.RegisterPacket<EntityEffect>(0x29);
     endPoint.RegisterPacket<RemoveEntityEffect>(0x2A);
     endPoint.RegisterPacket<Experience>(0x2B);
     endPoint.RegisterPacket<BlockChange>(0x35);
     endPoint.RegisterPacket<Explosion>(0x3C);
     endPoint.RegisterPacket<SoundEffect>(0x3D);
     endPoint.RegisterPacket<InvalidState>(0x46);
     endPoint.RegisterPacket<OpenWindow>(0x64);
     endPoint.RegisterPacket<CloseWindow>(0x65);
     endPoint.RegisterPacket<Transaction>(0x6A);
     endPoint.RegisterPacket<CreativeInventoryAction>(0x6B);
     endPoint.RegisterPacket<EnchantItem>(0x6C);
     endPoint.RegisterPacket<UpdateSign>(0x82);
     endPoint.RegisterPacket<AbilityPacket>(0xCA);
     endPoint.RegisterPacket<AutoCompletion>(0xCB);
     endPoint.RegisterPacket<IncrementStatistic>(0xC8);
     endPoint.RegisterPacket<PlayerListItem>(0xC9);
     endPoint.RegisterPacket<PluginMessage>(0xFA);
     endPoint.RegisterPacket<DisconnectPacket>(0xFF);
 }