Spigot Java: Player-Inventory einer Welt bekommen?
Seid gegrüßt liebe GuteFrage.net-Community,
eigentlich kann ich mit ein bisschen Rumwühlen in der Spigot-API selbst eine Lösung finden, aber vorerst frage ich hier, weil ich lange keine Fragen mehr gestellt habe :P
Ich dachte anfangs an World#getPlayers(). Aber ich weiß nicht, ob mir das nur die Spieler, die gerade in der Welt sind gibt oder auch die, die zum Beispiel offline sind.
Ich möchte nämlich, dass ich von jedem, egal ob on- oder offline, das Inventar bekommen kann. Die Beschreibung dieser Methode in der Spigot-API lautet in etwa: "Returns all players who are currently residing this world."
Wie bekomme ich also von jedem Spieler, die je auf dieser Welt waren, das Inventar (wenn möglich, ohne Tracking der Spieler).
Ich danke im Voraus!
2 Antworten
Hey,
mit World#getPlayers() erhältst Du die Spieler, die gerade auf der Welt online sind. Von diesen kannst Du auch einfach das Inventar bekommen. Bei Spielern, die sich gerade nicht auf dem Server befinden, funktioniert das rein über die Spigot-API nicht, da Du nicht auf das Inventar von offline Spielern zugreifen kannst.
Um eine solche Funktion zu realisieren müsstest Du das Inventar eines Spielers beim Verlassen in einer Datenbank zwischenspeichern und dann über diese das Inventar abfragen. Beim Betreten des Servers musst Du dann auch das alte Inventar des Spielers überschreiben.
PS: Falls Du das Inventar von allen online Spielern auf dem gesamten Server erhalten möchtest und nicht nur von einer Welt, das geht über Bukkit.getOnlinePlayers().getInventory();
LG
Danke für deine Antwort. Fast wie erwartet, dass das nicht mit der Spigot-API möglich ist. Ich schaue noch ein bisschen, ob ich nicht vielleicht doch noch irgendeine bessere Variante finde.
Hey um das Inventar eines Offline Spielers zu bekommen würde ich das Inventar erstmal beim quitten in einer File oder in einer Datenbank speichern als Base64 String speichern. Nun müssen die Item Stacks jedoch noch serialized sein. Jedoch wurde dafür schon eine API geschrieben, welches dir ermöglicht nicht alle meta Daten extra in einem serialized Objekt zu speichern und sogar gleich das einlesen und auslesen von Base64 ermöglicht ->
(https://gist.github.com/graywolf336/8153678)
Jetzt musst du nur noch den Base64 String in einer File oder Datenbank speichern und beim Server starten wieder am besten in eine Map einlesen