• 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!

Problem mit Hashmap!

Mey1337

Minecrafter
Registriert
7 Januar 2018
Beiträge
4
Alter
28
Diamanten
300
Hey!,
Mein Problem handelt sich um das erstellen b.z.w um das benutzen einer Hashmap.
Ich schreibe ein Command zum speichern & abrufen einer Location von einem Player, diese Location möchte ich in einer
Hashmap speichern, doch stoße dabei auf dieses Problem! (siehe Screenshots)
Wenn ich mit der Maus über "put" fahre wird dieser Error angezeigt!

The method put(Player, Location[]) in the type HashMap<Player,Location[]> is not applicable for the arguments (Player, Location)

Bitte um Hilfe! Danke! :)
 

Anhänge

  • hm.PNG
    hm.PNG
    2,2 KB · Aufrufe: 296
  • hm2.PNG
    hm2.PNG
    1,2 KB · Aufrufe: 212

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Deine Map ist von Player auf Location[] (also ein Array von Locations). Du versuchst, zu einem Spieler eine einzelne Location zu speichern.

Du solltest die Map so abändern, dass die UUID einen Spielers auf eine einzelne Location abgebildet wird:
Code:
Map<UUID, Location> loc = new HashMap<>();
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Code:
public Map<UUID, Location> loc = new HashMap<>();
loc.put(p.getUniqueId(), p.getLocation());

Location und nicht Location[]
Die Brackets stehen nämlich für ein Array, anstatt eines einzelnen Objekts.

Eine Faustregel, die @BlackHole auch schon mit eingebracht hat:
- Niemals das Player Objekt direkt irgendwo speichern (z.B. in Maps, Lists, Sets etc.), sondern stets die UUID des Spielers (player.getUniqueId()).

Das Zwischenspeichern eines Player Objekts kann zu diversen Fehlern und sog. "Memory Leaks" führen, wenn sich dein gespeicherter Spieler z.B. ausloggt oder gekickt wird oder sonst was. Die UUID ist unabhängig von dem Player Objekt und hat einen konstanten Zustand.
Abgesehen davon, kannst du mithilfe der UUID auch spielerbezogene Daten permanent speichern, z.B. in Datenbanken oder Dateien.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Das Zwischenspeichern eines Player Objekts kann zu diversen Fehlern und sog. "Memory Leaks" führen, wenn sich dein gespeicherter Spieler z.B. ausloggt oder gekickt wird oder sonst was.
Die Strings in der HashMap zu lassen führt auch zu Speicherlecks. Ob du Spielerobjekte oder nur deren Namen/UUIDs speicherst ändert also nicht daran, dass du die Objekte beim disconnect aufräumen musst und wenn du das eh tust ist es auch wieder egal, wenn du das mit dem Spielerobjekt machst. Ich hab bisher noch keinen guten Grund gesehen nicht das Spielerobjekt zu speichern.

Interessant wird es dann, wenn du die Daten serialisiert speichern möchtest, weil du dann ggf. die HashMap direkt mit Gson oder anderen Tools in eine Datei schreiben kannst aber das benötigt dann eine Einzelfallbetrachtung. Das Argument, dass du aber ansonsten Speicherlecks hast, ist schlicht nicht haltbar, denn die hast du auch in allen anderen Fällen.
 
Oben