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

Fragen zu ArrayList

Status
Für weitere Antworten geschlossen.

Juliplayer00

Kuhfänger
Registriert
30 November 2013
Beiträge
54
Diamanten
0
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
 

Thalion

Minecrafter
Registriert
22 Juli 2014
Beiträge
26
Diamanten
5
Minecraft
Spartaner_v1
Hallo Juliplayer,



du kannst keine Arrays unter Bukkit teleportieren.

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

Code:
Location loc;

for(Player p : team_blau){
    p.teleport(loc);
}

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
 
Zuletzt bearbeitet:

HardSoul

Ehemaliges Teammitglied
Ehem. Teammitglied
Registriert
2 August 2012
Beiträge
759
Diamanten
251
Minecraft
HardS0ul
Nein werden sie nicht. Du musst die Location definieren mit dem hier z.B:
Code:
Location loc = new Location(<Welt>, <x>, <y>, <z>);
Wenn du dann die for-Schleife nimmst, wird jeder Spieler einzeln aus der ArrayList() da hin teleportiert.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
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.
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.
 

Juliplayer00

Kuhfänger
Registriert
30 November 2013
Beiträge
54
Diamanten
0
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
 
Status
Für weitere Antworten geschlossen.
Oben