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

ArrayList abfragen

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Hey,
ich möchte das wenn man einen Spieler tötet auf die Wanted liste Gesetz wird einer der die Permission hat kann diese abrufen und sehen wenn er suchen muss:
Registriert ist alles.
Javascript:
ArrayList<Player> polizei= new ArrayList<Player>();
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String arg2, String[] args) {
        Player p = (Player)sender;
        if(p.hasPermission("axt.polizei")) {
            if(args.length == 0) {
                p.sendMessage("§7[§???§7] /wanted list");
            } else if(args.length == 1) {
                if(polizei.isEmpty()) {
                    p.sendMessage("§7[§???§7] §cEs wird kein Spieler gesucht!");
                    return false;
                }
                int players = polizei.size();
                p.sendMessage("§7[§???§7] Es werden folgende Spieler gesucht:");
                p.sendMessage(""+players);
               
            } else {
                p.sendMessage("§7[§???§7] /wanted");
            }
        }else {
            p.sendMessage("§7[§???§7] §cKeine Berechtigung!");
        }
       
       
       
       
       
       
       
       
        return false;
    }

   
   
    @EventHandler
    public void onKill(PlayerDeathEvent e) {
        Player p = e.getEntity();
        Player killer = p.getKiller();
        if(polizei.contains(killer)) {
            return;
        }
        polizei.add(killer);
       
    }
}
 

moinless

Schafhirte
Registriert
4 Oktober 2013
Beiträge
103
Diamanten
302
  • int players = polizei.size();
  • p.sendMessage("§7[§???§7] Es werden folgende Spieler gesucht:");
  • p.sendMessage(""+players);

Hiermit gibst du nur die Anzahl der Objekte in der ArrayListe an. Um nun alle Spieler zu erhalten, kannst du einen StringBuilder erstellen und eine for Schleife. In der for Schleife iterierst du durch "polizei" und fügst dem StringBuilder den Namen hinzu.

Desweiteren solltest du in der ArrayListe "polizei" die UUID eines Spielers, nicht den Spieler selbst speichern.
 

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Okay ich habe gemacht das die ArrayList die UUID speichert:
Javascript:
ArrayList<UUID> polizei= new ArrayList<UUID>();
StringBuilder erstellt:
Javascript:
StringBuilder sb = new StringBuilder();
for Schleife eintragen:
Javascript:
for(???)
Kannst du mir sagen was ich da hinschreiben soll :D
 

moinless

Schafhirte
Registriert
4 Oktober 2013
Beiträge
103
Diamanten
302
Habe ich dir oben geschrieben. Denk mal ein bisschen nach.

Aber ich will ja nicht so sein:
Code:
for (UUID uuid : polizei) {
    if (!sb.toString().isEmpty()) sb.append(", ");
    sb.append(Bukkit.getPlayer(uuid).getName());
}

EDIT: Die Variante von UnityGaming schreibt dir jetzt für jeden eingetragenen Spieler eine neue Nachricht, während meine eine "Liste" erstellt. Du kannst dir aussuchen, was dir besser gefällt.
 

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Javascript:
package de.axt.commands;

import java.util.ArrayList;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;

public class CMDWANTED implements CommandExecutor,Listener{

    ArrayList<UUID> polizei= new ArrayList<UUID>();
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String arg2, String[] args) {
        Player p = (Player)sender;
        if(p.hasPermission("axt.polizei")) {
            if(args.length == 0) {
                p.sendMessage("§7[§???§7] /wanted list");
            } else if(args.length == 1) {
                if(polizei.isEmpty()) {
                    p.sendMessage("§7[§???§7] §cEs wird kein Spieler gesucht!");
                    return false;
                }
                StringBuilder sb = new StringBuilder();
                for(UUID uuid : polizei) {
                    p.sendMessage("§7[§???§7] Es werden folgende Spieler gesucht:");
                    p.sendMessage(Bukkit.getOfflinePlayer(uuid).getName());
                }
               
               
               
            } else {
                p.sendMessage("§7[§???§7] /wanted");
            }
        }else {
            p.sendMessage("§7[§???§7] §cKeine Berechtigung!");
        }
       
       
       
       
       
       
       
       
        return false;
    }

   
   
    @EventHandler
    public void onKill(PlayerDeathEvent e) {
        Player p = e.getEntity();
        Player killer = p.getKiller();
        UUID uuid = killer.getUniqueId();
        if(polizei.contains(killer)) {
            return;
        }
        polizei.add(uuid);
       
    }
}
Es steht immer noch da wenn man einen Killt das kein Spieler gesucht wird :(
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Sicher, dass dein Event auch abgerufen wird?
Außerdem könnte es glaube zu ner NPE kommen, wenn das DeathEvent feuert, aber der Spieler nicht getötet wurde sondern z.B. in Lava geschwommen ist.

Dann müsste getKiller() null zurückgeben.

Pack mal eine debug message in die Event Methode.
 

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Javascript:
public class CMDWANTED implements CommandExecutor,Listener{

    ArrayList<UUID> polizei= new ArrayList<UUID>();
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String arg2, String[] args) {
        Player p = (Player)sender;
        if(p.hasPermission("axt.polizei")) {
            if(args.length == 0) {
                p.sendMessage("§7[§???§7] /wanted list");
            } else if(args.length == 1) {
                if(polizei.isEmpty()) {
                    p.sendMessage("§7[§???§7] §cEs wird kein Spieler gesucht!");
                    return false;
                }
                StringBuilder sb = new StringBuilder();
                for(UUID uuid : polizei) {
                    p.sendMessage("§7[§???§7] Es werden folgende Spieler gesucht:");
                    p.sendMessage(Bukkit.getOfflinePlayer(uuid).getName());
                }
               
               
               
            } else {
                p.sendMessage("§7[§???§7] /wanted");
            }
        }else {
            p.sendMessage("§7[§???§7] §cKeine Berechtigung!");
        }
       
       
       
       
       
       
       
       
        return false;
    }

   
   
    @EventHandler
    public void onKill(PlayerDeathEvent e) {
        Player p = e.getEntity();
        Player killer = p.getKiller();
        UUID uuid = killer.getUniqueId();
        if(polizei.contains(uuid)) {
            return;
        }
        polizei.add(uuid);
       
       
    }
}
Bitte
 

Baba43

Ehem. Teammitglied
Ehem. Teammitglied
Registriert
5 November 2012
Beiträge
869
Diamanten
60
Minecraft
baba43
Und dein Problem ist, dass auch nach einem Kill die Liste leer ist?
Wo ist denn der Teil, der die Events registrieren soll?
Hast du mal eine Debug-Meldung in onKill eingebaut um zu sehen, ob die Methode überhaupt aufgerufen wird?

Ich kann mir aber schon vorstellen, wo dein Problem liegt:
Wenn du diese Klasse 2x erstellst (einmal für das Event und einmal für den Befehl), dann haben diese logischerweise unterschiedliche ArrayListen.
 

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Wie oben schon erwähnt ist alles in der Main registriert und wie oben erwähnt Funktioniert auch eine Debug Message das Event wird erkannt und die Message ausgegeben bei einen Kill nur wenn ich /wanted list eingebe kommt das nicht.
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
@gmb32 - Poste hier einmal deine Main. Vermutlich sieht das aber in deiner Main so aus:
Code:
public void onEnable() {
     getCommand("wanted").setExecutor(new CMDWANTED());
     Bukkit.getPluginManager().registerEvents(new CMDWANTED(), this);
}

Das funktioniert nicht, weil du zwei Klassen CMDWANTED erstellst, welche unterschiedliche ArrayLists haben.
Richtig wäre es:
Code:
    public void onEnable() {
        CMDWANTED cmdwanted = new CMDWANTED();
        getCommand("wanted").setExecutor(cmdwanted);
        Bukkit.getPluginManager().registerEvents(cmdwanted, this);
}
 
Oben