Slick2d | Detecção de colisão de entidades

O problema:

Eu sei que isso foi perguntado muitas vezes, mas eu não encontrei nenhuma boa resposta.
Então eu tenho algumas entidades para o meu jogo, agora qual é a melhor maneira de verificar colisões?

Links:

O jogo (terminado)

Explicação de código:
Eu tenho uma lista de entidades na minha classe mundial:

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

Eu os atualizo com este código (somente se dentro do intervalo de visão):

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

Então agora eu quero verificar a colisão dentro do método de atualização de entidades.

Eu tentei isso como meu método de atualização:

@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

E este é o método atual 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

Atualmente, o método de interseções sempre retorna true. Mas por que?

questionAnswers(1)

yourAnswerToTheQuestion