615Power Posted January 5, 2015 Share Posted January 5, 2015 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 More sharing options...
boomer41 Posted January 5, 2015 Share Posted January 5, 2015 hashMap.get(Bukkit.getPlayer("Baustein")).equals("starter") Link to comment Share on other sites More sharing options...
Baustein Posted January 5, 2015 Share Posted January 5, 2015 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 More sharing options...
boomer41 Posted January 5, 2015 Share Posted January 5, 2015 (edited) 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 January 5, 2015 by boomer41 Link to comment Share on other sites More sharing options...
Baustein Posted January 5, 2015 Share Posted January 5, 2015 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 More sharing options...
boomer41 Posted January 5, 2015 Share Posted January 5, 2015 Wie gesagt HashMaps speichern nicht das Objekt doppelt sondern nur die Referenz. Du brauchst genauso viel Speicher wie davor, google Objektreferenz Link to comment Share on other sites More sharing options...
Baustein Posted January 6, 2015 Share Posted January 6, 2015 So halb richtig. Back to topic. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
615Power Posted January 6, 2015 Author Share Posted January 6, 2015 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 More sharing options...
idk.cpp Posted January 6, 2015 Share Posted January 6, 2015 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 More sharing options...
615Power Posted January 7, 2015 Author Share Posted January 7, 2015 http://pastebin.com/z1rgDbX3 In der anderen Klasse wird an der Stelle dir Location aus der Config geladen Link to comment Share on other sites More sharing options...
Baustein Posted January 7, 2015 Share Posted January 7, 2015 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 More sharing options...
615Power Posted January 7, 2015 Author Share Posted January 7, 2015 (edited) Bin leider gerade nicht am Pc. Aber müsste eigeneigentlich mit FileConfiguration cfg = Config.cfg; Config wird erstellt aber nicht beschrieben. Edited January 7, 2015 by 615Power Link to comment Share on other sites More sharing options...
idk.cpp Posted January 7, 2015 Share Posted January 7, 2015 Ich bin auch Bausteins Meinung. Ist zum Konstruktionszeitpunkt der Klasse AdminCMD in der Klasse Config der Member cfg schon initialisiert? Link to comment Share on other sites More sharing options...
615Power Posted January 7, 2015 Author Share Posted January 7, 2015 Ich glaube ich habs. Danke man ihr seit die besten. Ich meld mich dann Link to comment Share on other sites More sharing options...
Arcalio Posted January 8, 2015 Share Posted January 8, 2015 (edited) @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 January 8, 2015 by Arcalio Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now