J'essaie de faire des canaux de causerie et ai des problèmes avec des listes. Im en ajoutant un élément à la liste lors de l'exécution de la commande et plus tard, j'essaie de vérifier si l'élément est ajouté sur la liste, mais il montre toujours que ce n'est pas.Bukkit ArrayList contient ne peux pas trouver l'élément
Voici mon code:
public class RpChat implements CommandExecutor, Listener {
private ArrayList<Player> ooc = new ArrayList<Player>();
private ArrayList<Player> ic = new ArrayList<Player>();
private ArrayList<Player> shout = new ArrayList<Player>();
private ArrayList<Player> whisper = new ArrayList<Player>();
public boolean onCommand(CommandSender cs, org.bukkit.command.Command cmnd, String string, String[] strings) {
Player s = (Player) cs;
if (cmnd.getName().equalsIgnoreCase("ooc")) {
s.sendMessage("Debug: OOC");
ooc.add(s);
if (ic.contains(s))
ooc.remove(s);
if (shout.contains(s))
ooc.remove(s);
if (whisper.contains(s))
ooc.remove(s);
}
return false;
}
@EventHandler
public void onPlayerChatEvent(AsyncPlayerChatEvent event) {
Player p = event.getPlayer();
Bukkit.getScheduler().scheduleSyncRepeatingTask(Dungeon.getPlugin(), new Runnable() {
public void run() {
if (ooc.contains(p)) {
event.setFormat(ChatColor.RED + "[OOC] " + ChatColor.WHITE + "%s" + ": " + "%s");
p.sendMessage("Debug Player = " + ooc.contains(p));
}
else{
p.sendMessage("Debug Player = " + ooc.contains(p));
}
}
}, 0, 40);
}
Dans le jeu im obtenir Debug: OOC message Retour si ooc.add (s) devrait être ok, mais le deuxième message d de mon auditeur retourne toujours faux et jamais obtient dans si déclaration. Je pensais que cela pouvait être dû au fait de lancer Sender to Player, c'est pourquoi j'ai aussi essayé de le faire sur Strings Arrays, et les deux messages de débogage de comand et listener renvoyaient exactement le même nom de fichier mais le contenu était toujours faux. Voici également du code avec une tentative de chaîne.
public class RpChat implements CommandExecutor, Listener {
private ArrayList<String> ooc = new ArrayList<String>();
private ArrayList<String> ic = new ArrayList<String>();
private ArrayList<String> shout = new ArrayList<String>();
private ArrayList<String> whisper = new ArrayList<String>();
public boolean onCommand(CommandSender cs, org.bukkit.command.Command cmnd, String string, String[] strings) {
Player p = (Player) cs;
String s = p.getName();
if (cmnd.getName().equalsIgnoreCase("ooc")) {
p.sendMessage("Debug: OOC: Plaer Name: "+ s);
if (ic.contains(s))
ic.remove(s);
if (shout.contains(s))
shout.remove(s);
if (whisper.contains(s))
whisper.remove(s);
ooc.add(s);
}
return true;
}
@EventHandler
public void onPlayerChatEvent(AsyncPlayerChatEvent event) {
Player p = event.getPlayer();
String s = p.getName();
Bukkit.getScheduler().scheduleSyncRepeatingTask(Dungeon.getPlugin(), new Runnable() {
public void run() {
if (ooc.contains(s)) {
event.setFormat(ChatColor.RED + "[OOC] " + ChatColor.WHITE + "%s" + ": " + "%s");
p.sendMessage("Debug Player = " + ooc.contains(s)+ " Plaer Name: "+ s);
}
else{
p.sendMessage("Debug Player = " + ooc.contains(s)+ " Plaer Name: "+ s);
}
}
}, 0, 40);
}
S'il vous plaît me dire ce qui ne va pas avec elle provoque im déjà hors de mon esprit, et désolé pour mon pauvre anglais/
Peut-être rendre les listes statiques? Je pense que l'accès est différent dans les gestionnaires d'événements. Vérifiez si votre liste contient quelque chose sur votre événement, AKA les imprimer – Kerooker
Où est le code pour 'Player'? Implémente-t-il 'equals' correctement? –
Oh faire des tableaux statiques a aidé beaucoup merci :), –