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

... komplette Frage anzeigen

3 Antworten

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#getUniqueId() 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 bewerten Vielen Dank für Deine Bewertung

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

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von HowIMetYourMine
06.01.2016, 11:58

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?

0

Mit getname (er sucht glaib damit den spieler)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Spreax097
06.01.2016, 03:07

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

0

Was möchtest Du wissen?