private void applyNewState(final int newStateLevel, final RunningEffect linkedRE) {
   final int stateUniqueId =
       State.getUniqueIdFromBasicInformation((short) this.m_value, (short) newStateLevel);
   final StateRunningEffect stateRunningEffect =
       StateRunningEffect.checkOut(
           (EffectContext<WakfuEffect>) this.m_context,
           this.m_caster,
           (WakfuEffectContainer) this.m_effectContainer,
           stateUniqueId);
   if (stateRunningEffect == null) {
     StateDecurse.m_logger.error(
         (Object)
             ("Etat inconnu id "
                 + this.m_value
                 + ", level "
                 + newStateLevel
                 + ", effet correspondant : "
                 + ((this.m_genericEffect != null)
                     ? ((WakfuEffect) this.m_genericEffect).getEffectId()
                     : "null")));
     return;
   }
   final WakfuEffectExecutionParameters parameters =
       WakfuEffectExecutionParameters.checkOut(true, false, null);
   stateRunningEffect.setExecutionParameters(parameters);
   ((RunningEffect<FX, WakfuEffectContainer>) stateRunningEffect)
       .setEffectContainer((WakfuEffectContainer) this.m_effectContainer);
   ((RunningEffect<WakfuEffect, EC>) stateRunningEffect)
       .setGenericEffect(this.getStateRunningGenericEffect());
   stateRunningEffect.addEndTriggers(this.getListeningTriggerForUnapplication());
   stateRunningEffect.setParent(linkedRE);
   stateRunningEffect.applyOnTargets(this.m_target);
   stateRunningEffect.release();
 }
 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;
 }