Jump to content

HashMap<Player, String>


615Power
 Share

Recommended Posts

Moin,

Da mein letztes KitPVP Plugin zwar gut funktionierte aber grausamst gecodet war, da es auch mein erstes richtiges Plugin war mache ich nun ein recode. Damals habe ich alle Spieler als String in einer ArrayList gespeichert mit dem Namen des Kits. Dies brauchte aber verständlicherweise viel Rechenleistung, da man 7 ArrayLists hat. Nun habe ich vor eine HashMap<Player, String> zu benutzen. Wäre auch mit String, Integer gegangen aber ich machs nun so.

Bitte korrigiert mich wenn ich was falsch verstanden habe.

Das wäre dann ja so gespeichert:

615Power, "nokit"

Baustein, "starter"

Nun möchte ich abfragen ob der Spieler 615Power den String "starter" hat.

Wie mache ich das?

Und noch was wenn ich NameDerHashMap.size() mache ist das dann auch gleich die Spieleranzahl die in der HashMap gespeichert ist? Bei einer ArrayList ist es ja zumindest so. Habe ganz bewusst <Player, String> genommen da es einfacher ist als <String, String>

Link to comment
Share on other sites

1. Frage von boomer beantwortet.

2. hashmap.size() gibt die Anzahl der Einträge in der HashMap aus.

3. Warum ist das einfacher? "Player" brauchen eine weit größere Rechenleistung, und außerdem ist es gefährlich, sie zu nutzen.

Denn: Wenn du auf einen Player aus der HashMap zugreifst, der offline ist, dann gibt es NPEs über NPEs. Mach lieber eine HashMap<String, String> also beispielsweise gefüllt mit hashmap.put("Baustein", "starter");.

Wenn du dann noch weiter gehen willst, und auch das Speichern der Daten für längere Zeit in Erwägung ziehst, dann solltest du mit UUIDs arbeiten.

Liebe Grüße,

Baustein

Link to comment
Share on other sites

Warum brauchen die eine höhere Rechenleistung? Werden Objektreferenzen von Playern anders gespeichert als die von Strings?

Google mal was die Funktion equals macht. :)

Jenachdem wie diese gestaltet ist von der Interface-Player-implementierenden Klasse, können die UUIDs bzw Namen verglichen, nicht die Referenz selber.

Persönlich würde ich aber die von Baustein angesprochene Lösung verwenden, vor allem weil bei Strings sicher ist das der Inhalt verglichen wird, nicht die Referenz

Edited by boomer41
Link to comment
Share on other sites

Rechenleistung war vielleicht das falsche Wort. Ein String ist eine Zeichenkette. Ende. Ein Player, das ist eine Location, ein Inventar, ein Health-Wert, ein FoodLevel, ein XP-Level, vieles mehr, und dann noch der Name.

Jetzt kann man sich selber überlegen, was wohl freundlicher ist: Ein Name, wenn man einen Namen braucht, oder ein ganzer Haufen Müll plus besagter Name, obwohl man nur den Namen braucht.

Von den NPEs ganz zu schweigen.

Liebe Grüße,

Baustein

Link to comment
Share on other sites

Moin,

Noch eine Frage. Ich habe immer meine Spiele Stats in einer Config(yml) Datei gespeichert. Doch eine Config ist eigentlich ja zum Konfigurieren, und da diese Datei oft ausgelesen werden muss suche ich nun ein Alternatives Speicherdokument. Wie speichert ihr die Spielestats?

Hilfe....

Moin,

Jetzt kommt diese Fehler:

http://pastebin.com/jLmTNu8N

Iwie kann er die Config nicht auslesen bzw bearbeiten.

In der MainClass ist es im onEnable:

new Config(this);

Hier die Config:

http://pastebin.com/n4eE6qYx

Der Fehler kommt sowohl bei setspawn als bei join also beim TP zum GameSpawn

Link to comment
Share on other sites

Caused by: java.lang.NullPointerException

at de.mpgc.kit.AdminCMD.onCommand(AdminCMD.java:68) ~[?:?]

Caused by: java.lang.NullPointerException

at de.mpgc.kit.UserCMD.onCommand(UserCMD.java:76) ~[?:?]

Die oberen 4 Zeilen sagen mir, dass es interessant sein könnte sich AdminCMD und UserCMD anzuschauen

Link to comment
Share on other sites

Klasse "AdminCMD":


cfg.set("KitPvP+.locations.spawn.x", p.getLocation().getX());

Hier ist cfg vermutlich noch nicht initiiert, da sonst nichts null ergeben dürfte.

Schaue da nochmal, ob du der Variable schon vorher einen richtigen Wert zugewiesen hast.

Wird denn deine Datei "KitPvP+.yml" erstellt? Wenn ja, mit oder ohne Inhalt?

Liebe Grüße,

Baustein

Link to comment
Share on other sites

@615Power: Auch wenn es jetzt vielleicht funktioniert, empfehle ich dir, deinen Code auch mal ein wenig vernünftig zu überarbeiten :)

Es ist zwar nicht schlecht, dir für die Config eine Wrapper-Klasse zu basteln, aber du musst viel mehr auf Variablensichtbarkeit und insbesondere auch auf die Verwendung von "static" achten! Das sind zum Teil große Fehlerquellen, falls du mehrere Config-Files nutzen möchtest (ansonsten würde so ein Wrapper-Objekt auch gar keinen Sinn machen ^^)

Liebe Grüße

Arcalio

Edited by Arcalio
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B