Non, il n'est pas nécessaire de redéfinir equals, c'est même fortement déconseillé. En effet un enum peut se comparer avec == comme un entier, donc la seule implémentation logique de equals pour un enum c'est :
public boolean equals(Object obj) {
return this==obj;
}
C'est évidemment celle-ci qui est implémentée par défaut.
Pour ton problème, il suffit de décomposer ton traitement et voir sur quelle ligne l'exception apparaît.
c = terrains.get(coord);// NPE sur terrains, éventuellement sur coord
t = c.getTypeTerrain(); // NPE sur c
if (t != TypesTerrains.MER) {