vPhaseReport.addElement(r);
addReport(r);
    private void doEntityDisplacement(Entity entity, Coords src, Coords dest,                                      PilotingRollData roll) {        Report r;        if (!game.getBoard().contains(dest)) {            // set position anyway, for pushes moving through and stuff like            // that            entity.setPosition(dest);            if (!entity.isDoomed()) {                game.removeEntity(entity.getId(),                        IEntityRemovalConditions.REMOVE_PUSHED);                send(createRemoveEntityPacket(entity.getId(),                        IEntityRemovalConditions.REMOVE_PUSHED));                //entity forced from the field                r = new Report(2230);                r.addDesc(entity);                vPhaseReport.addElement(r);                // TODO: remove passengers and swarmers.            }            return;        }        final IHex srcHex = game.getBoard().getHex(src);        final IHex destHex = game.getBoard().getHex(dest);        final int direction = src.direction(dest);        // Handle null hexes.        if ( srcHex == null || destHex == null ) {            System.err.println( "Can not displace " + entity.getShortName() +                                " from " + src +                                " to " + dest + "." );            return;        }        int fallElevation = entity.elevationOccupied(srcHex) - entity.elevationOccupied(destHex);        if (fallElevation > 1) {            if(roll == null)                roll = entity.getBasePilotingRoll();            doEntityFallsInto(entity, src, dest, roll);            return;        } else {            //move the entity into the new location gently            entity.setPosition(dest);            entity.setElevation(entity.elevationOccupied(destHex) - destHex.surface());            Entity violation = Compute.stackingViolation(game, entity.getId(), dest);            if (violation == null) {                // move and roll normally                r = new Report(2235);                r.indent();                r.subject = entity.getId();                r.addDesc(entity);                r.add(dest.getBoardNum(), true);                vPhaseReport.addElement(r);            } else {                // domino effect: move & displace target                r = new Report(2240);                r.indent();                r.subject = entity.getId();                r.addDesc(entity);                r.add(dest.getBoardNum(), true);                r.addDesc(violation);                vPhaseReport.addElement(r);            }            // trigger any special things for moving to the new hex            doEntityDisplacementMinefieldCheck(entity, src, dest);            doSetLocationsExposure(entity, destHex, false, entity.getElevation());            if (roll != null) {                game.addPSR(roll);            }            // Update the entity's postion on the client.            entityUpdate( entity.getId() );                        if(violation != null) {                doEntityDisplacement(violation, dest, dest.translated(direction), new PilotingRollData(violation.getId(), 0, "domino effect"));                // Update the violating entity's postion on the client,                // if it didn't get displaced off the board.                if ( !game.isOutOfGame(violation) ) {                    entityUpdate( violation.getId() );                }            }        }    }