I'm a huge fan of fluent interfaces and like the idea of being able to call more than one function on an object without having to reference it by its name over and over again. Sometimes I don't even have to give that object a name which makes it even more appealing to me.
http://en.wikipedia.org/wiki/Fluent_interface
Introducing fluent interfaces should not break any existing code[1] and make the usage of all different kind of objects easier.
e.g.:
PointLight light = new PointLight();
light.setLocation(new Vector3f(0, 0, 100));
light.setAmbient(new ColorRGBA(0.3f, 0.3f, 0.3f, 1.0f));
light.setDiffuse(new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f));
light.setSpecular(new ColorRGBA(0.5, 0.5f, 0.5f, 1.0f));
LightState ls = new LightState();
ls.attach(light);
could also be written as:
LightState ls = new LightState()
.attach(new PointLight()
.setLocation(new Vector3f(0, 0, 100))
.setAmbient(new ColorRGBA(0.3f, 0.3f, 0.3f, 1.0f))
.setDiffuse(new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f))
.setSpecular(new ColorRGBA(0.5, 0.5f, 0.5f, 1.0f))
);
I'm a bit undecided if non-setter functions like attach() should be fluent too. Since the fluent style is not mandatory but can rather be seen as an addition to the "original style" I think this could help JME3 to become even sexier than it already is.
The fluent interface can be used to produce ugly and unreadable code, but that is true for non-fluent interfaces as well so I don't consider this a real issue.
[1] It could break existing code that utilizes reflections to introspect the return value of setters, but that's very unlikely and since JME3 is still alpha should be simple to fix in the applications using JME3 that way.