@Override
 protected void executeOverride(final RunningEffect linkedRE, final boolean trigger) {
   final ArrayList<RunningEffect> effectToRemove = new ArrayList<RunningEffect>();
   if (this.m_target == null) {
     StateDecurse.m_logger.warn(
         (Object) "[Effect] Impossible d'appliquer un desenvoutement car la cible est null");
     this.setNotified(true);
     return;
   }
   final RunningEffectManager effectManager = this.m_target.getRunningEffectManager();
   if (effectManager == null) {
     return;
   }
   int newStateLevel = 0;
   newStateLevel = this.computeEffectsToRemove(effectToRemove, effectManager, newStateLevel);
   if (effectToRemove.isEmpty()) {
     this.setNotified();
     return;
   }
   for (final RunningEffect anEffectToRemove : effectToRemove) {
     ((TimedRunningEffectManager) effectManager).removeEffect(anEffectToRemove, true);
   }
   this.notifyExecution(linkedRE, trigger);
   if (this.isValueComputationEnabled() && this.m_decreaseLevel && newStateLevel > 0) {
     this.applyNewState(newStateLevel, linkedRE);
   }
 }
 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())));
 }
 protected int computeEffectsToRemove(
     final ArrayList<RunningEffect> effectToRemove,
     final RunningEffectManager effectManager,
     int newStateLevel) {
   for (final RunningEffect effect : effectManager) {
     if (!(effect instanceof StateRunningEffect)) {
       continue;
     }
     final State state = ((StateRunningEffect) effect).getState();
     if (state.getStateBaseId() != this.m_value
         || (state.isInamovable()
             && !ApplyState.UNDECURSABLE_STATE.contains(state.getStateBaseId()))) {
       continue;
     }
     effectToRemove.add(effect);
     newStateLevel = state.getLevel() - this.m_levelToDecrease;
   }
   return newStateLevel;
 }