Different Players!
So it turns out that most soccer players don't all do the same things, they play in different positions and all have different roles. I decided to factor this in to my games by creating a subclass of AI entities that are designed to do different jobs. Currently I have three different positions, defenders whose job is to get in between the ball and the goal they are defending, midfielders who are meant to chase the ball and knock it towards the goal they are attacking, and attackers whose job is to try and deflect the ball into the goal when it is on their side of the field, or to try and disturb the other teams defender when the ball is not on their side of the field.
These positions decide what they are going to do via the use of a finite state machine however in the future i may decide to use a decision tree to make these decisions.