not sure why you even use collision… as i see from first your screenshot, you need to know when enemy or character is in vision range. Why you cant just calculate distance from player <-> enemy?
to even optimize it, you can from time to time (for example for each 10 seconds) calculate what enemies are below some distance, to not compare ALL world enemies each second, but only part of them.
myself i even mapped map to HashMap grid like, so i know in what part of map are enemies, so i can compare close enemies or know what enemies should see on “visible map - not fog of war”
about pathfinding, depends what you want to achieve. If this gonna be a big world, i would suggest doing something like “road points” to calculate small pathfinding to closest road point first, then go road, and when near target, again small pathfinding from road to target place.
if small world, then you can simply do pathfinding using library.
Please note i got for example 10000 NPC in world and it even dont take 0.01 second to manage them all. ofc depends on processor/ram imo, but it should not take much.
myself i would have other question to JME community. How to do best optimized way to calculate when character is on ground(terrain or object like house, not just terrain) and calculate what position is “on ground”(again not just terrain) having x/z pos?