code: public void forcedMove (final int placeId)
      {
          // if we're in the middle of a move, we can't abort it or we will screw everything up, so
          // just finish up what we're doing and assume that the repeated move request was the
          // spurious one as it would be in the case of lag causing rapid-fire repeat requests
          if (movePending()) {
              if (_pendingPlaceId == placeId) {
                  log.info("Dropping forced move because we have a move pending",
                      "pendId", _pendingPlaceId, "reqId", placeId);
              } else {
                  log.info("Delaying forced move because we have a move pending",
                      "pendId", _pendingPlaceId, "reqId", placeId);
                  addPendingForcedMove(new Runnable() {
                      public void run () {
                          forcedMove(placeId);
                      }
                  });
              }
              return;
          }
  
          log.info("Moving at request of server", "placeId", placeId);
          // clear out our old place information
          mayLeavePlace();
          didLeavePlace();
          // move to the new place
          moveTo(placeId);
      }
docs: documentation inherited from interface