Slick2d | Detección de colisión de entidad

El problema:

Sé que esto se me ha pedido muchas veces, pero no encontré ninguna buena respuesta.
Así que tengo algunas entidades para mi juego, ¿cuál es la mejor manera de verificar las colisiones?

Campo de golf:

El juego (terminado)

Explicación del código:
Tengo una lista de entidades en mi clase mundial:

List<Entity> entities = new ArrayList<Entity>();
// The list in the World class

Los actualizo con este código (solo si está dentro del rango de vista):

public void update(GameContainer gc, int delta) {
    for (int i = 0; i < entities.size(); i++) {
        entities.get(i).update(gc, delta);
    }
}
// Update entities

Así que ahora quiero verificar la colisión dentro del método de actualización de entidades.

Intenté esto como mi método de actualización:

@Override
public void update(GameContainer gc, int delta) {
    for (Entity entity : world.entities) {
        if (intersects(entity)) {
           // world.remove(this);
        }
    }
}
// The update method of an entitiy

Y este es el método actual de instersects:

public boolean intersects(Entity entity) {
    if (entity instanceof Player) {
        // Do nothing
    } else {
        if (shape != null) {
            return this.getShape().intersects(entity.getShape());
        }
    }

    return false;
}
// The intersects method of the abstract Entity class

Actualmente el método intersects siempre devuelve true. ¿Pero por qué?

Respuestas a la pregunta(1)

Su respuesta a la pregunta