Spigot: Wie kann ich Online-Spieler für Spieler aus der ArrayList ausblenden?
Hallo,
ich bin aktuell dabei, ein Plugin für einen Freund zu coden. Ich bin dabei auf folgendes Problem gestoßen:
Ich programmiere einen Baumodus, wo Builder in Ruhe bauen können. Daher wollte ich andere Spieler die online sind oder joinen, ausblenden. Ich benutze dazu die player.hide(anotherplayer)-Methode, aber es funktioniert nicht mit einer ArrayList.
Ich habe eine ArrayList<Player>, die ich für den Baumodus benutze. Alle Spieler die den Baumodus für sich aktivieren, kommen auf die Liste. Das funktioniert, aber ich will es so machen, dass alle Spieler, die neu joinen auch versteckt werden. Aber es klappt leider nicht.
Danke im Voraus für alle Antworten.
MfG.
@EventHandler
public void onPlayerJoinEvent(final PlayerJoinEvent event) {
for (int i = 0; i < buildMode.size(); i++) {
Player builder = buildMode.get(i);
builder.hidePlayer(event.getPlayer());
}
}
2 Antworten
So wie du es schilderst, funktioniert hidePlayer in diesem Handler auf jeden Fall, sofern du die Methode über eine Instanz aufrufst, die nicht in deiner ArrayList steht.
Player somePlayer = // get certain player ...
somePlayer.hidePlayer(event.getPlayer());
Das Erste, was mir in diesem Zusammenhang auffällt (ich habe in der API einmal nachgeschlagen): Du verwendest eine veraltete Methode. Aktuell angedacht wäre diese Überladung.
Als Nächstes würde ich prüfen, ob der Schleifenrumpf überhaupt jemals betreten wird. Vielleicht ist die Liste zu diesem Zeitpunkt noch leer. Das kannst du via Debugger oder Logging herausfinden.
Nebenbei bemerkt könnte der Code gekürzt und die ArrayList ruhig mit einen passenden Namen versehen werden:
Player newPlayer = event.getPlayer();
for (Player builder : builders) {
builder.hidePlayer(newPlayer);
}
So am Rand wäre für mich ebenso die Frage, ob man den Fall, dass ein neuer Spieler ebenso schon auf der Liste steht, berücksichtigen muss.
Hallo, erstmals danke für die ausführliche Antwort,
falls ein neuer Spieler joint kann er zu diesem Zeitpunkt noch nicht auf der Liste stehen, weil Ich es so gemacht habe, dass wenn man quitet,
der Spieler von der Liste heruntergenommen wird und man muss um auf die Liste zu kommen einen Befehl ausführen.
Mfg.
Naja solltest Mal paper benutzen das klappt dann besser. Da kannste auch als 1. Parameter die instancr des Plugins nutzen und 2tens lern wie ne for each schleife Funktioniert
Ich sag ja 1. Ne for each 2. Das Event registrieren 3. Papermc nutzen
Ich weiss wie eine ForEach schleife funtkioniert nur dass was ich da im code habe habe ich von einem anderen Forum klappt aber auch nicht