public List<Object> getAbilityComponents(MOB mob, String componentID, String doingWhat, int autoGenerate)
	{
		if(autoGenerate>0) return new LinkedList<Object>();

		final List<AbilityComponent> componentsRequirements;
		if(componentID.trim().startsWith("("))
		{
			final Map<String, List<AbilityComponent>> H=new TreeMap<String, List<AbilityComponent>>();
			final String error=CMLib.ableMapper().addAbilityComponent("ID="+componentID, H);
			if(error!=null)
				Log.errOut(ID(),"Error parsing custom component: "+componentID);
			componentsRequirements=H.get("ID");
		}
		else
			componentsRequirements=CMLib.ableMapper().getAbilityComponentMap().get(componentID.toUpperCase());
		if(componentsRequirements!=null)
		{
			final List<Object> components=CMLib.ableMapper().componentCheck(mob,componentsRequirements);
			if(components!=null)
			{
				return components;
			}
			final StringBuffer buf=new StringBuffer("");
			for(int r=0;r<componentsRequirements.size();r++)
				buf.append(CMLib.ableMapper().getAbilityComponentDesc(mob,componentsRequirements,r));
			mob.tell(_("You lack the necessary materials to @x1, the requirements are: @x2.",doingWhat.toLowerCase(),buf.toString()));
			return null;
		}
		return new LinkedList<Object>();
	}