• 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
Mitglied seit
7 Januar 2018
Beiträge
4
Alter
22
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

BlackHole

Workaholic
Mitglied seit
1 Juli 2012
Beiträge
749
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<>();
 

Mey1337

Minecrafter
Mitglied seit
7 Januar 2018
Beiträge
4
Alter
22
Was muss ich dann bei "loc.put" ändern? Weil p kann dort doch denn nicht stehen bleiben oder?
(ich weiß was die UUID ist doch nicht wie ich sie hier anwenden kann)
 

BlackHole

Workaholic
Mitglied seit
1 Juli 2012
Beiträge
749
Minecraft
BlackHole
Wenn du eine Referenz zum Spieler in "p" gespeichert hast, dann kommst du mit "p.getUniqueId()" an seine UUID.
 

Mey1337

Minecrafter
Mitglied seit
7 Januar 2018
Beiträge
4
Alter
22
Problem bleibt bestehen. Noch andere Ideen?
(Habe auch beim erstellen UUID angegeben anstatt Player)
 

Anhänge

banyan

Redstoneengineer
Mitglied seit
25 Dezember 2014
Beiträge
34
Hast du denn die zwei Brackets bei der Hashmap entfernt?
Ansonsten würde man von dir bei "put" immernoch ein Array verlangen.
 

UnityGaming

Workaholic
Osterei Experte
Mitglied seit
25 Oktober 2015
Beiträge
509
Alter
19
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.
 

❤️可愛いちゃん️❤️

Threadripper
Osterei Experte
Mitglied seit
19 Mai 2014
Beiträge
1.242
Alter
2
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.
 

Mey1337

Minecrafter
Mitglied seit
7 Januar 2018
Beiträge
4
Alter
22
Habe das Problem jetzt verstanden und konnte es somit auch beheben! Vielen Dank an alle :) //close
 

Twitter

Allgemein
Hilfe Benutzer
    Matthias Matthias: Guten Morgen
    Oben