私はチャットチャンネルを実行しようとしており、リストに問題があります。私はコマンドを実行するときにリストに1つの要素を追加し、後でその要素がリストに追加されているかどうかを確認しようとしていますが、常にそれがisntであることを示しています。ここでBukkit ArrayListにはcant findの要素が含まれています
は私のコードです:ゲームイムで
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);
}
デバッグ取得:OOCメッセージバック(S)そうooc.addは、[OK]をする必要がありますが、私のリスナーからの第2のDメッセージは常にfalseと決してを返していますif文に入ります。私は、SenderをPlayerにキャストして、なぜ私もStrings Arraysでそれをやろうとしたのですが、comandとlistenerからの両方のデバッグメッセージがまったく同じplayernameを返していましたが、containsは常にfalseでした。ここでは、文字列を使ったコードもあります。
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);
}
それは私の心のうち、すでにイムを引き起こすと間違っているものを私に教えてくれて、私の下手な英語のため申し訳ありませんしてください;/
おそらくリストを静的にするのでしょうか?イベントハンドラではアクセスが違うと思います。あなたのリストにあなたのイベントに何かが含まれていないか確認してください。 – Kerooker
'Player'のコードはどこですか? 'equals'を正しく実装していますか? –
ああ、静的な配列を静的にすることは助けになりました:) –