java IDE没有给出错误,但ArrayList无法工作
我在包com.mcvigor
中的名为RuneCraft
的主类中有这个:
public static ArrayList<String> prospPlayers = new ArrayList<String>();
在另一个名为MiningListener
的类中,我在包com.mcvigor.listeners
中有这个:
` public void playerRClickOre(PlayerInteractEvent event) { //Ore Interactions
final Player p = event.getPlayer();
if(event.getPlayer().isOp()) return;
if(RuneCraft.prospPlayers.contains(p.getName())) return;
if(isClickedBlockMineral(event) && event.getAction() == Action.LEFT_CLICK_BLOCK && !hasPickaxe(p)) { //block is mineral, player left clicked it, no pickaxe
p.sendMessage(ChatColor.DARK_RED + "You need a pickaxe to mine this."); // ADD CHECKS FOR PICKAXE REQUIRED LEVEL 2 USE
}
if(isClickedBlockMineral(event) && event.getAction() == Action.RIGHT_CLICK_BLOCK) {
switch(event.getClickedBlock().getType()) {
case CLAY: //clay
RuneCraft.prospPlayers.add(p.getName());
p.sendMessage(ChatColor.DARK_RED + "You examine the rock for ores...");
Bukkit.getScheduler().runTaskLater(plugin, new Runnable(){
public void run() {
p.sendMessage(ChatColor.GRAY + "This rock contains" + ChatColor.DARK_RED + " clay" + ChatColor.GRAY + ".");
}
}, 3*20L); // TODO: Change time
RuneCraft.prospPlayers.remove(p.getName());
break;`
下面还有其他东西,但这并不重要。问题是,当我勘探或检查岩石中的矿石时,它应该将我添加到列表中,如果我尝试再次这样做,它不会让我完成勘探(它会将我的名字从ArrayList中删除)
为什么会这样
是问题吗
# 1 楼答案
看看下面的代码:
在添加名称并表示已开始检查后,您将立即删除该名称。你只想在检查完后移除它,对吗?因此,您需要在“以后的任务”执行时移动
remove
调用:诚然,无论如何我都会尽量避免使用静态变量,但那是另一回事