Bukkit切换计分板

时间:2018-08-09 17:57:25

标签: java arrays arraylist minecraft bukkit

我想使用命令'/ sb toggle'在bukkit中切换记分板。但是我似乎无法使其工作,因为编译器不断循环遍历代码。因此,如果我从ArrayList中删除一个键,编译器将继续执行它不是我想要的。

srvyr

所以问题是它一直告诉我记分板已打开。真正应该在每次执行命令时在开和关之间切换的时间。

1 个答案:

答案 0 :(得分:1)

调用此方法时,其中的每一行将一一运行。

看看第一行,

ArrayList<UUID> toggle = new ArrayList<>();

每次运行该方法时,都会创建一个新的 ArrayList并将其分配给toggle。除了变量的范围之外,这是问题的根源。

一旦到达if语句,

if (toggle.contains(p.getUniqueId()))

toggle仍将引用刚刚分配给它的空ArrayList。它不包含任何内容,因此肯定不会包含p.getUniqueId()

此处的解决方法是为toggle提供比该方法更大的范围,而不是每次该方法运行时都重新分配它。可能看起来像这样:

public class MyClass{
    private ArrayList<UUID> toggle = new ArrayList<>();

    public void toggleScoreboard(Player p){
        if (toggle.contains(p.getUniqueId()))
        // Rest of your code here
    }
}

然后,每次方法运行时,它都引用相同的ArrayList,它将保留存储在其中的值。