在开发Bukkit插件时,我遇到了一个Array问题。为什么这不起作用?它应该检查玩家是否已经放置了该块。它继续说“钻石!!”游戏中。
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e){
Player player = e.getPlayer();
String storage[] = new String[100];
int i = 0;
if(e.getBlock().getType() == Material.DIAMOND_BLOCK){
if(Arrays.asList(storage).contains(player.getName())){
player.sendMessage(ChatColor.BLUE + "You are on the list");
}else{
player.sendMessage(ChatColor.BLUE + "DIAMONDS!!");
storage[i] = player.getName();
i++;
}
}
}
答案 0 :(得分:0)
您的问题是,每次调用BlockPlaceEvent
事件时,都会创建一个全新的storage
数组。如果您希望在每次事件调用时都不重新创建storage
,则必须将其置于方法声明之外,如下所示:
String storage[] = new String[100];
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e) {
Player player = e.getPlayer();
int i = 0;
//The rest of your code below
}
答案 1 :(得分:0)
这是因为每次玩家放置一个块时你都会创建一个新的storage
数组:
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e){
Player player = e.getPlayer();
String storage[] = new String[100];
所以你永远不会有完整的球员名单。要解决此问题,您应该在方法之外声明Array
:
String storage[] = new String[100];
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e) {
Player player = e.getPlayer();
int i = 0;
if(e.getBlock().getType() == Material.DIAMOND_BLOCK){
if(Arrays.asList(storage).contains(player.getName())){
player.sendMessage(ChatColor.BLUE + "You are on the list");
}
else{
player.sendMessage(ChatColor.BLUE + "DIAMONDS!!");
storage[i] = player.getName();
i++;
}
}
}