Split the jumping state so that one half is part of the jumping state and the other half is part of the falling state to make it easier to check the direction of tile collision, instead of using vertical velocity. Hopefully, this fixed the issue.