@Override
 public boolean isValid(Game game) {
   if (!super.isValid(game)) return false;
   // we need a good location
   if (newLocation == null) {
     invalidMessage = "Location can't be null";
     return false;
   }
   // Make sure the player does not put robber or pirate on the edge of the
   // map,
   // which is forbidden
   if (game.board().hexes().isAtEdge(newLocation)) {
     invalidMessage = "putting robber on the edge is not allowed";
     return false;
   }
   // TODO: check if a previous action included rolling a 7,
   // or playing a soldier development card
   // Player may not leave the robber on the same location
   if (game.robber().location().equals(newLocation)) {
     invalidMessage = "putting robber back onto same location is not allowed";
     return false;
   }
   Hex hex = game.board().hexes().get(newLocation);
   if (!hex.isRobberPlaceable()) {
     invalidMessage = "Can't place robber or pirate on a " + hex.getName();
     return false;
   }
   return super.isValid(game);
 }
 @Override
 public void perform(Game game) {
   game.robber().setLocation(newLocation);
   // TODO: fix message
   // _Message = String.Format("{0} put the robber on the {1}",
   // xmlGame.GetPlayer(Sender).XmlPlayer.Name,
   // Location.ToString(xmlGame.Board));
   super.perform(game);
 }