ServerPlugin Fragen zu ArrayList

Dieses Thema im Forum "Programmierung" wurde erstellt von Juliplayer00, 27. Oktober 2014.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Juliplayer00
    Offline

    Juliplayer00

    Registriert seit:
    30. November 2013
    Beiträge:
    56
    Minecraft:
    Juliplayer00
    Hallo zusammen,

    ich hab eine Frage zu den ArrayLists. Und zwar habe ich meine ArrayList in der Main wie folgt definiert:
    ArrayList<Player> team_blau = new ArrayList<Player>();

    An einer anderen Stelle füge ich einen Spieler der ArrayList hinzu:
    ... Player p = Player sender ...
    Main.team_blau.add(p);

    Nun möchte ich an einer anderen Stelle ALLE Spieler in dieser Arraylist zu einer bestimmten Position teleportieren.

    Meine Frage: Wie kriege ich ALLE Spieler der ArrayList in eine Variable, dass ich folgendes machen kann:
    p_blau.teleport(location);

    Danke schonmal für eure Antworten.

    Gruß
    Julian
     
    #1
  2. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Hallo Juliplayer,



    du kannst keine Arrays unter Bukkit teleportieren.

    Die schnellste möglichkeit wäre die List zu iterieren.

    Code (Text):
    1. Location loc;
    2.  
    3. for(Player p : team_blau){
    4.     p.teleport(loc);
    5. }
    6.  
    Nur als Tipp am Rande, Player zu "speichern" ist nicht gerade Leistungsschonend. Besser wäre, wenn du die Namen ( Strings ) bzw. zukünftig vllt. UUIDs zwischenspeicherst, und dann mit z.B: "Bukkit.getPlayerExact(String arg0);" arbeitest.



    Mit freundlichen Grüßen,

    Thalion
     
    #2
  3. Basti07711
    Offline

    Basti07711 Ehem. Teammitglied

    Registriert seit:
    2. August 2012
    Beiträge:
    714
    Ort:
    Hinter dir
    Minecraft:
    Basti07711
    Du musst eine for-Schleife machen.
    Siehe:
    Code (Text):
    1. for(Player target : Main.team_blaau){
    2.    target.teleport(location);
    3. }
     
    #3
  4. Juliplayer00
    Offline

    Juliplayer00

    Registriert seit:
    30. November 2013
    Beiträge:
    56
    Minecraft:
    Juliplayer00
    Ok. Wenn ich das mache, werden die Spieler aber nicht an die Position geporter, sodern an eine Zufällige im Umkreis.

    Gruß
    Julian
     
    #4
  5. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Hallo @Juliplayer00 zeig uns doch mal bitte deinen gesamten Code auf pastebin.com oder in CODE Tags, damit wir effektiver Fehler suchen können. Außerdem wäre die latest.log praktisch.
     
    #5
  6. Basti07711
    Offline

    Basti07711 Ehem. Teammitglied

    Registriert seit:
    2. August 2012
    Beiträge:
    714
    Ort:
    Hinter dir
    Minecraft:
    Basti07711
    Nein werden sie nicht. Du musst die Location definieren mit dem hier z.B:
    Code (Text):
    1. Location loc = new Location(<Welt>, <x>, <y>, <z>);
    2.  
    Wenn du dann die for-Schleife nimmst, wird jeder Spieler einzeln aus der ArrayList() da hin teleportiert.
     
    #6
  7. Juliplayer00
    Offline

    Juliplayer00

    Registriert seit:
    30. November 2013
    Beiträge:
    56
    Minecraft:
    Juliplayer00
    Ok. Ich versuche nachher noch ne andere Methode und wenns dann immernoch nicht geht, schick ich euch den Code und den Loh.

    Gruß
    Julian
     
    #7
  8. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Falsch. Es wir nicht der komplette Spieler gespeichert, sondern nur eine Referenz zu dem Spieler, also die Adresse zum Speicherort des Spielerobjektes.
    Wenn wir schon bei Performance sind, dann möchte ich nur erwähnen, dass ein HashSet schneller ist, als eine ArrayList, zumindest, wenn du auch "Collection#contains()" benutzt, da bei dem HashSet, wie der Name schon sagt, ein Hashverfahren benutzt wird, bei dem es keine Rolle spielt, wie viele Spieler es gibt. Bei einer ArrayList wird jeder Index durchlaufen und geprüft, ob der Spieler, der vorhanden sein soll (oder auch nicht) gleich dem Spieler an dem Index ist. Das ganze hat also eine schlechtere Performance.
     
    #8
    [Dev] iTzSasukeHDxLP gefällt das.
  9. Juliplayer00
    Offline

    Juliplayer00

    Registriert seit:
    30. November 2013
    Beiträge:
    56
    Minecraft:
    Juliplayer00
    So hat es jetzt funktioniert:

    List<String> playerlist = new ArrayList<String>();

    //add a Player ( z.B. )
    playerlist.add(p.getName());

    //remove a Player ( z.B. )
    playerlist.remove(p.getName());

    //iterieren ( z.B. )
    for(String pn : playerlist) {
    Bukkit.getPlayerExact(pn).teleport(location);
    }


    Gruß und Dank :)
    Julian
     
    #9
  10. matteoderva
    Offline

    matteoderva Ehem. Teammitglied

    Registriert seit:
    8. November 2013
    Beiträge:
    148
    Ort:
    Irgendwo in Oberbayern
    Minecraft:
    matteoderva
    -> Closed, siehe oben.
     
    #10
Status des Themas:
Es sind keine weiteren Antworten möglich.