Make a treemap array , when you generate a tree you add its spawn x and spawn y to the map maybe even just make it a boolean array. Then use a trial and error type pathfinding system to get to the tree.
That is a really good idea, going to do that for sure. the performance will be better!
Your naming shows a lack of familiarity with Java. Most methods are in the form set<Property>, get<Property>, is<Boolean Result>, to<Alternative Type>, and <imperative verb>. Such as getColor, setColor, isVisble, toString, sort, etc. Your code just looks like a lump of if statements and variable assignments. There is no self documenting naming, no separation of concerns, and no modularity.
I was used to programm (when I was younger, 5-3 years ago), to use GML (Game-maker language). I am still using the same naming and never thaught of changing it.
That is not A*. Where is the open list? the closed list? The heuristic? The cost function? A* cannot get stuck on a uniform grid and will tell you if there is no path to a goal.
The A* pathfinding was in an other topic and it is really in-efficient. If you wish to view it: Pastebin
The problem where this code will get stuck most times is the path it is returning.
and in the Villager tick() there is just a small code walking to the path array.