• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PvP Zone vereinfachen

petomka

Redstoneengineer
Registriert
8 Oktober 2012
Beiträge
41
Alter
26
Diamanten
322
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.
 
Oben