if !hurt_anim_playing:
if Player.is_on_floor():
return STATES.IDLE
if Player.is_on_floor() == false:
return STATES.FALL
if Player.crouch_input == true:
return STATES.CROUCH
As far as I can tell, this will always return either STATES.IDLE or STATES.FALL, because Player.is_on_floor() must necessarily be either true or false. This means you can never switch from the HURT state back to the CROUCH state with your current code.
That aside, I can’t tell from this code why it would end up in the FALL state rather than IDLE. Does the "crouch_hurt" animation somehow lift the character slightly off the ground or something? You could try showing the value of Player.is_on_floor() on the screen along with the other debug information, to see if it even thinks it’s on the floor.