Well when I place a lamp, I simply raycast all the blocks in-range and give the faces their correct lighting values, I store those floats in my Block class, and send the float to the shader, and there i calculate the light based on ambient, sun and torch with this fragment shader:
varying vec2 texture_coordinate;
varying vec3 normal;
varying float light;
uniform sampler2D texture;
void main()
{
vec3 lampColor = vec3(0.1f, 0.05f, 0.001f);
vec3 lightAdd = vec3((max(light, 0)*10) * lampColor);
vec3 textureColor = texture2D(texture, texture_coordinate).rgb;