private int getPathToCellValidity(final FightMap fightMap, final Point3 cell) {
   fightMap.setIgnoreAllMovementObstacles(true);
   final PathFinder pathFinder = PathFinder.checkOut();
   int path = -1;
   try {
     pathFinder.setMoverCaracteristics(
         this.m_caster.getHeight(),
         this.m_caster.getPhysicalRadius(),
         ((BasicCharacterInfo) this.m_caster).getJumpCapacity());
     pathFinder.setTopologyMapInstanceSet(fightMap);
     pathFinder.addStartCell(this.m_caster.getPosition());
     pathFinder.setStopCell(cell);
     final PathFinderParameters parameters = new PathFinderParameters();
     parameters.m_maxPathLength = fightMap.getHeight() + fightMap.getWidth();
     parameters.m_searchLimit = 2048;
     pathFinder.setParameters(parameters);
     path = pathFinder.findPath();
   } catch (Exception e) {
     EnutrofDepositPlacement.m_logger.error((Object) "Exception levee", (Throwable) e);
   } finally {
     pathFinder.release();
     fightMap.setIgnoreAllMovementObstacles(false);
   }
   return path;
 }
 private Point3 getRandomCellInEffectArea(final FightMap fightMap) {
   final AreaOfEffect areaOfEffect = ((WakfuEffect) this.m_genericEffect).getAreaOfEffect();
   if (areaOfEffect.getType() == AreaOfEffectEnum.EMPTY) {
     return fightMap.getInsideRandomCell();
   }
   final Direction8 dir = this.m_caster.getDirection();
   final Point3 casterCell = this.m_caster.getPosition();
   final Iterable<int[]> iterable =
       ((WakfuEffect) this.m_genericEffect)
           .getAreaOfEffect()
           .getCells(
               this.m_targetCell.getX(),
               this.m_targetCell.getY(),
               this.m_targetCell.getZ(),
               casterCell.getX(),
               casterCell.getY(),
               casterCell.getZ(),
               dir);
   final ArrayList<int[]> cells = new ArrayList<int[]>();
   for (final int[] next : iterable) {
     final int cellX = next[0];
     final int cellY = next[1];
     if (!fightMap.isInMap(cellX, cellY)) {
       continue;
     }
     if (!fightMap.isInside(cellX, cellY)) {
       continue;
     }
     final short cellHeight = fightMap.getCellHeight(cellX, cellY);
     if (cellHeight == -32768) {
       continue;
     }
     cells.add(next);
   }
   if (cells.isEmpty()) {
     EnutrofDepositPlacement.m_logger.error(
         (Object)
             ("Pas de cellule trouvee pour le spawn d'un gisement " + areaOfEffect.getType()));
     return null;
   }
   return new Point3(cells.get(MathHelper.random(cells.size())));
 }
 private Point3 getRandomCell(final FightMap fightMap) {
   Point3 cell = null;
   for (int i = 0; i < 3; ++i) {
     cell = this.getRandomCellInEffectArea(fightMap);
     if (cell != null) {
       cell.setZ(fightMap.getCellHeight(cell.getX(), cell.getY()));
       final int path = this.getPathToCellValidity(fightMap, cell);
       if (path == -1) {
         cell = null;
       } else {
         if (this.cellAlreadyContainsCasterDeposit(cell)) {
           cell = null;
         }
         if (cell != null) {
           return cell;
         }
       }
     }
   }
   return cell;
 }