数组问题

时间:2014-04-05 16:44:12

标签: java bukkit

在开发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++;
        }
    }
}

2 个答案:

答案 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++;
        }
    }
}
相关问题