Deine Herangehensweise ist prinzipiell nicht falsch, aber performant ist das ganze absolut nicht: Jedes Mal, wenn ein PlayerMoveEvent gefeuert wird, öffnest du eine Datei, lädst daraus eine Config, lädst aus dieser ob das überhaupt aktiviert ist, lädst dann 6 Koordinaten, überprüfst dann erst ob die Welt überhaupt die richtige ist, und dann erst kommst du zum Punkt, nämlich den Spieler deiner Liste hinzufügen oder entfernen.
Dadurch hast du zwar immer eine aktuelle Config, aber die Werte in der Klasse als Variablen zu speichern würde in diesem Fall mehr Sinn machen. Speichere die Koordinaten sowie die Instanz der Config in deiner Klasse; Wenn "PvP.enabled" nicht aktiviert ist, registriere den Listener gar nicht.
Ansonsten könntest du nicht bei jedem MoveEvent überprüfen, ob Spieler XY in der PvP-Zone ist, sondern nur bei jedem Angriff. Damit sparst du dir deine Liste komplett (und sogar den MoveEventListener), kannst dann aber keine Nachricht mehr beim Betreten oder Verlassen der Zone verschicken. Zudem solltest du beim "EntityDamageByEntityEvent" nicht einfach alle Entities ohne einen instanceof-check zum Spieler casten, da du sonst irgendwann eine ClassCastException bekommst.
Bei deiner isIn(Location, Location, Location) Methode könntest du auf ternäre Operator verzichten und die
Math#max(double, double) und
Math#min(double, double) Methoden der Math Klasse verwenden, da diese Klasse sowieso immer dabei ist.