spatial.setLocalTranslation(location.add(0, 0, -4));
Vector3f vectorDifference = new Vector3f(cam.getLocation().subtract(spatial.getWorldTranslation()));
spatial.setLocalTranslation(vectorDifference.addLocal(spatial.getLocalTranslation()));
Quaternion worldDiff = new Quaternion(cam.getRotation().subtract(spatial.getWorldRotation()));
spatial.setLocalRotation(worldDiff.addLocal(spatial.getLocalRotation()));
if (spatial.getName().equals("gun")) {
spatial.move(cam.getDirection().mult(3));
spatial.move(cam.getUp().mult(-0.8f));
spatial.move(cam.getLeft().mult(-1f));
spatial.rotate(0.3f, FastMath.PI, 0);
} else if (spatial.getName().equals("apple")) {
spatial.move(cam.getDirection().mult(3));
} else {
spatial.move(cam.getDirection().mult(2));
spatial.move(cam.getUp().mult(-1.5f));
spatial.move(cam.getLeft().mult(-1f));
spatial.setLocalRotation(spatial.getLocalRotation().mult(new Quaternion().fromAngles(FastMath.PI - 0.3f, 0, -0.2f)));
}
}