@Override
	public boolean tick(Tickable ticking, int tickID)
	{
		if(!(affected instanceof MOB))
			return super.tick(ticking,tickID);

		final MOB mob=(MOB)affected;

		if(tickID!=Tickable.TICKID_MOB) return true;
		if(!proficiencyCheck(null,0,false)) return true;

		if((!mob.isInCombat())
		&&(CMLib.flags().isSleeping(mob)))
		{
			roundsHibernating++;
			final double man = ( ( mob.charStats().getStat( CharStats.STAT_INTELLIGENCE ) + mob.charStats().getStat( CharStats.STAT_WISDOM ) ) );
			mob.curState().adjMana( (int)Math.round( ( man * .1 ) + ( ( mob.phyStats().level() + ( 2.0 * super.getXLEVELLevel( invoker() ) )  ) / 2.0 ) ),
									mob.maxState() );
			mob.curState().setHunger(oldState.getHunger());
			mob.curState().setThirst(oldState.getThirst());
			final double move = mob.charStats().getStat( CharStats.STAT_STRENGTH );
			mob.curState().adjMovement( (int)Math.round( ( move * .1 ) + ( ( mob.phyStats().level() + ( 2.0 * super.getXLEVELLevel( invoker() ) )  ) / 2.0 ) ),
										mob.maxState() );
			if(!CMLib.flags().isGolem(mob))
			{
				final double hp=mob.charStats().getStat( CharStats.STAT_CONSTITUTION );
				if(!CMLib.combat().postHealing( mob,
												mob,
												this,
												CMMsg.MASK_ALWAYS|CMMsg.TYP_CAST_SPELL,
												(int)Math.round( ( hp * .1 ) + ( ( mob.phyStats().level() + ( 2.0 * super.getXLEVELLevel( invoker() ) ) ) / 2.0 ) ),
												null ) )
					unInvoke();
			}
		}
		else
		{
			unInvoke();
			return false;
		}
		return super.tick(ticking,tickID);
	}