Frage von HowIMetYourMine, 94

Bukkit programmieren: Wie kann ich eine "Playerbezogene Klasse" erstellen?

Liebe Community, ich schreibe momentan an einem Vote-Plugin für meinen Server. Bei dem Plugin wird zum Beispiel geprüft ob der Spieler bereits für eine Map gevotet hat. Das geht natürlich nicht mit einer "public" Variable. Wie kann ich eine PLAYER-BEZOGENE Klasse generieren? Bzw. playerbezogene Variablen erzeugen? Danke im Voraus :)

Antwort
von Trackfreak, 45

Hi,

es gibt verschiedene Methoden, um an die UUID oder die Instanz eines Spielers zu kommen:

  1. Per Event: Wenn ein Spieler eine Nachricht im Chat schreibt, um zu voten wird ein Chat Event erzeugt. Dieses kannst du über einen Eventhandler abfangen. In den Argumenten des Events findet sich der Player.
  2. Die Namen von Spielern sollten nicht mehr genutzt werden um Spieler zu identifizieren, da sich Spieler sonst kurz aus- und dann wieder mit anderem Name einloggen könnten. Damit könnten die Spieler das Ergebnis der Abstimmung manipulieren. Stattdessen sollte man Spieler per UUID identifizieren. Diese kann man mittels https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/OfflinePlayer.html#getUnique...() ermitteln und den zugehörigen Player per Bukkit.getPlayer(uuid) bestimmen.

Um zu speichern welche Spieler bereits gevoted haben würde sich eine Liste oder HashMap anbieten, welche den Spieler, oder seine UUID zusammen mit seiner Stimme speichert. So kannst du immer überprüfen, ob ein Spieler schon abgestimmt hat.

MfG

Trackfreak

Antwort
von Trackfreak, 30

Nachtrag zu meiner Antwort:

Ich denke ich verstehe dein Problem erst jetzt so wirklich. Du kannst Variablen nicht so anlegen, dass sie sich automatisch auf einen Player beziehen.

Du musst die Variablen selbst dem Player zuordnen. Das geht beispielsweise mit einer HashMap: https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html Du nimmst als Key die UUID eines Players und kannst über diese dann den zugewiesenen Wert abrufen oder verändern.

Wenn du mehrere Werte speichern möchtest legst du einfach eine neue Klasse an, die alle benötigten Werte enthält und speicherst diese in der HashMap.

Ich hoffe, dass diese Antwort hilfreicher ist ;)

MfG

Trackfreak

Kommentar von HowIMetYourMine ,

Danke das hilft mir schon etwas mehr :)

Es wäre auch bei einem Scoreboard das gleiche Problem, wenn ich die Kills für jeden einzelnen Spieler abrufen möchte.

Würde das auch mit einer Hashmap gehen oder gäbe es eine einfachere Variante?

Antwort
von Spreax097, 39

Mit getname (er sucht glaib damit den spieler)

Kommentar von Spreax097 ,

Oder getplayer eines von beiden, sry hab das ma in irgend ein tutorial gesehen

Keine passende Antwort gefunden?

Fragen Sie die Community