I figured it out, turns out whatever transform you do in vecmath is in row-major order, so switching the near and far plane fixed it.
+ new ProjectionTransformComponent(this, Projection.createPerspective(40, (float) Window.getWidth() / Window.getHeight(), 100, 0.01f));
- new ProjectionTransformComponent(this, Projection.createPerspective(40, (float) Window.getWidth() / Window.getHeight(), 0.01f, 100));
wooho