### Godot version

4.0.rc1

### System information

Windows 10

### Issue description

I'm not 100% sure what's causing it, but something in the blend tree of the animation tree doesn't play the correct animations when running. 

The problem happens when you jump for a 2nd time. It plays the fall animation for 1 loop before switching to the jump animation. It should only play the jump animation when moving upwards. Same effect happens rarely with the idle playing while jumping. 

![BlendTreeBug](https://user-images.githubusercontent.com/48493009/217973489-f5e84658-7fdc-4ba8-8a59-d23ab2611236.gif)



I think it has something to do with the transition nodes and some kind of blend between the 2 animations. Even though the xfade time is set to 0 on all transition nodes. Here's an image of the whole animation tree/ blend tree.

![AnimationTree](https://user-images.githubusercontent.com/48493009/217973509-c1c61888-a7a5-4d59-b2db-8f55d47f6679.PNG)



I have a simple script, mostly made of integrated/default code + a small amount I added for adjusting what animation to play in the blend tree. 3 animations. Idle, jump, and fall, shown below.

![bugProjectCode](https://user-images.githubusercontent.com/48493009/217973524-1931d8da-b0f7-46d3-9236-888c45712557.PNG)



### Steps to reproduce

open included project, start game, press jump button (space) twice. (it works like it should the first time. But only the first time)

### Minimal reproduction project

[BlendTreeBug.zip](https://github.com/godotengine/godot/files/10702792/BlendTreeBug.zip)

return autorestart_random_delay;
}
void AnimationNodeOneShot::set_mix_mode(MixMode p_mix) {
	mix = p_mix;
}
AnimationNodeOneShot::MixMode AnimationNodeOneShot::get_mix_mode() const {
	return mix;
}
String AnimationNodeOneShot::get_caption() const {
	return "OneShot";
}
bool AnimationNodeOneShot::has_filter() const {
	return true;
}
double AnimationNodeOneShot::process(double p_time, bool p_seek, bool p_is_external_seeking) {
	OneShotRequest cur_request = static_cast<OneShotRequest>((int)get_parameter(request));
	bool cur_active = get_parameter(active);
	double cur_time = get_parameter(time);
	double cur_remaining = get_parameter(remaining);
	double cur_time_to_restart = get_parameter(time_to_restart);
	set_parameter(request, ONE_SHOT_REQUEST_NONE);
	bool do_start = cur_request == ONE_SHOT_REQUEST_FIRE;
	if (cur_request == ONE_SHOT_REQUEST_ABORT) {
		set_parameter(active, false);
		set_parameter(time_to_restart, -1);
		return blend_input(0, p_time, p_seek, p_is_external_seeking, 1.0, FILTER_IGNORE, sync);
	} else if (!do_start && !cur_active) {
		if (cur_time_to_restart >= 0.0 && !p_seek) {
			cur_time_to_restart -= p_time;
			if (cur_time_to_restart < 0) {