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

Fehler bei HashMaps

Alphy

Miner
Registriert
20 Dezember 2013
Beiträge
167
Diamanten
0
Hallo Leute,

Ich habe gerade ein unerwartetes Problem. Wenn ich etwas in einer HashMap abspeichern will wird es von der HashMap nicht angenommen, blaib also leer.
Hier ist mein Code. In einem MoveEvent rufe ich alle sachen ab und lasse mir nachichten schiken und entitys spawn. Es wird aber nichts in der HashMap gespeichter und es kommt auch keine Fehlermeldung.
Könnt ihr mir vileicht helfen??


PHP:
    private HashMap<Player, Entity> entitys = new HashMap<>();
    private Message msg = new Message();

    public void spawnEntity(Player p, EntityType type)
    {
        if (entitys.containsKey(p) == true)
        {
            removeEntity(p);
        }

        Entity entity = p.getWorld().spawnEntity(p.getLocation(), type);

        entity.setCustomName(p.getName() + "'s Pet");
        entity.setCustomNameVisible(true);

        this.entitys.put(p, entity);

        p.sendMessage(msg.pets_create);
    }

    public void removeEntity(Player p)
    {
        if (!this.entitys.containsKey(p))
        {
            p.sendMessage(msg.pets_not_exist);
            return;
        }
        Entity entity = this.entitys.get(p);
        entity.remove();
        this.entitys.remove(p);
        p.sendMessage(msg.pets_remove);
    }

    public boolean hasEntity(Player p)
    {
        p.sendMessage("frage");
        if (this.entitys.get(p) != null)
        {
            p.sendMessage("frage ja");
            return true;
        }
        else
        {
            p.sendMessage("frage nein");
            p.sendMessage("" + entitys);
            return false;
        }
    }
}
 
Zuletzt bearbeitet:

MaxCode

Schafhirte
Registriert
29 Januar 2012
Beiträge
111
Diamanten
0
Minecraft
proskatermax
privateHashMap<Player, Entity> entitys = new HashMap<>();
Hier fehl eine Leertaste zwischen private und der HashMap. Kann sein das es daran liegt, aber ich denke das du dann ne Fehlermeldung bekommen würdest.

Könntest ja mal versuchen alle Methoden mit einem Befehl einzeln aufzurufen und dann schauen obs geht.

MFG
Max
 

Alphy

Miner
Registriert
20 Dezember 2013
Beiträge
167
Diamanten
0
privateHashMap<Player, Entity> entitys = new HashMap<>();
Hier fehl eine Leertaste zwischen private und der HashMap. Kann sein das es daran liegt, aber ich denke das du dann ne Fehlermeldung bekommen würdest.

Könntest ja mal versuchen alle Methoden mit einem Befehl einzeln aufzurufen und dann schauen obs geht.

MFG
Max

Jep da ist keine fehlermeldung war nur ein problem beim kopieren.
Die einzelenen methoden funktionieren auch alle fehlerfrei. Einzig und allei ist das problem, dass nichts in die HashMap gespeichert wird.
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
*hust* Keine Player in Collections/Maps *hust*

Bei hasEntity kannst du auch einfach prüfen ob der Key für den Spieler vorhanden ist (Map#contains()), da der Spieler (Sünde) ja sowieso nur drinsteht, wenn er ein Entity hat.

Die Mehrzahl von entity ist übrigens entities ;)

Bei 'p.sendMessage(msg.pets_create);' Würde ich mir übrigens wenn überhaupt einmal das Prinzip von Settern und Gettern ansehen.

Außerdem wäre der restlcieh Code toll, um dein Problem nachzuvollziehen.
 
Zuletzt bearbeitet:

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
*hust* Keine Player in Collections *hust*

Bei hasEntity kannst du auch einfach prüfen ob der Key für den Spieler vrohanden ist (Collection#contains()), da der Spieler (Sünde) ja sowieso nur drinsteht, wenn er ein Entity hat.
Eine Map ist keine Collection. Von daher muss die Methode Map#contains(K) benutzt werden, wobei in dem Beispiel K der Spieler ist.

@Kronos197 Woran erkennst du, dass die Map leer ist?
 

Alphy

Miner
Registriert
20 Dezember 2013
Beiträge
167
Diamanten
0
Eine Map ist keine Collection. Von daher muss die Methode Map#contains(K) benutzt werden, wobei in dem Beispiel K der Spieler ist.

@Kronos197 Woran erkennst du, dass die Map leer ist?

Ich lass sie mir in der hasEntity methode per message senden.
und diese ruf ich ab nachdem ich die createEntity methode aktiviert habe mit einem InteraktEvent aktiviere.

p.sendMessage("" + entitys);

so sied es ungefähr aus.

Bei 'p.sendMessage(msg.pets_create);' Würde ich mir übrigens wenn überhaupt einmal das Prinzip von Settern und Gettern ansehen.

Ja Ich weiß doch ich finde das Prinzip mit Settern und Gettern für mein Vorhaben unsinnig.
Auch wenn es vorteile hat.

Mein Programm ist zu klein um dafür extra setter und getter zu benutzen. Wenn ich große Programme/Plugins schreibe benutze ich auch setter und getter.

LG
Kronos197
 
Oben