Combining meshes opengl and libgdx

I am having some problems with lighting when combining meshes. I am creating what I call a mesh batch and creating a mesh from vertices and generated indices. My problem is that the normals seem to be wrong. Here is my mesh batch code: http://www.java-gaming.org/?action=pastebin&id=92. Vertices are passed into addmesh in the same order as the generated mesh, namely three coords, the color for that vertex, and then the normals. Why am I getting this result with my lighting? Here are some screenshots illustrating my problem:

With combined:

http://s18.postimage.org/i0glkfcx1/screen1.jpg

Without combined:

http://s13.postimage.org/cm417ilj7/good_lighting.jpg

Can I have some help? I really need to fix this. When I disable the combined mesh altogether the lighting looks like it does without the combined mesh.

you do a lot, a lot!, of redudant work.
casting, copying, sorting and so on and so on.

Let me quickly clean up your code a bit, then I take a look.

Thanks, I do prototyping first and cleanup afterwards. I like to know how to do something before I make it pretty.

so I change a little bit in your code
here: http://www.java-gaming.org/?action=pastebin&id=96
I added some hopefully useful comments and also fixed your bug I think.

You based your index offset on the highest previous index which can be wrong.
You have to base it on the existing vertex count;

Ok, different question. Is there any way that the amount of lighting on one object can effect the amount on another? If so how, and how could my a combined mesh be causing it?

The vertices look good. After a bit of debugging I got this: http://www.java-gaming.org/?action=pastebin&id=97. These are the values sent into the mesh. Normals appear to be good. Can anyone see anything wrong with these? The order is 3 floats for vertices, 1 for color, and 3 more for normals. The pastebin might have cut off some of the data.

Would it help if I gave Renderer.render(Mesh m)?

public void render(Mesh m) {
		Matrix3 nm = makeNormalMatrix(model);
		model.idt();
		model.rotate(new Vector3(1.0f,0.0f,0.0f), xrot);
		model.rotate(new Vector3(0.0f,1.0f,0.0f), yrot);
		model.translate(new Vector3(x, y, z));
		shader.begin();
		shader.setUniformMatrix("u_pv", Camera.getInstance().get());
		shader.setUniformMatrix("u_m", model);
		shader.setUniformMatrix("u_nm", nm, true);
		float l1[],l2[],l3[],l4[];
		if(cache == null) {
			l1 = LightManager.getInstance().updateAndGetLights(0);
			l2 = LightManager.getInstance().getLights(1);
			l3 = LightManager.getInstance().getLights(2);
			l4 = LightManager.getInstance().getLights(3);
		}
		else {
			l1 = cache.asFloat(0);
			l2 = cache.asFloat(1);
			l3 = cache.asFloat(2);
			l4 = cache.asFloat(3);
		}
		//System.out.println(l1[0]+" "+l1[1]+" "+l1[2]+" "+l1[3]);
		shader.setUniformf("ulight[0]", l1[0],l1[1],l1[2],l1[3]);
		shader.setUniformf("ulight[1]", l2[0],l2[1],l2[2],l2[3]);
		shader.setUniformf("ulight[2]", l3[0],l3[1],l3[2],l3[3]);
		shader.setUniformf("ulight[3]", l4[0],l4[1],l4[2],l4[3]);
		m.render(shader,GL10.GL_TRIANGLES);
		shader.end();
	}

Basicly it binds the shader, sets a few attributes and uniforms, and renders it. LightCache is a cached version of the 4 closest lights.

I seem to have fixed it. By rendering the tiles as meshbatches the rendering seems to work. Can anyone guess how this works?