Проблема с массивами

1

У меня проблема с массивом при разработке плагина Bukkit. Почему это не работает? Предполагается, что игрок уже разместил блок. Он продолжает говорить "Бриллианты !!" в игре.

@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], потому что каждый раз, когда вы вызываете метод, storage[i] = player.getName() всегда имеет значение i равным 0. Это может быть перезапись имен игроков, которые вы хотите проверить за?
  • 0
    Почему вы даже используете массив для этой цели, когда что-то вроде LinkedList будет работать так же хорошо (и вы не будете конвертировать его в список каждый раз)
Теги:
bukkit

2 ответа

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++;
        }
    }
}
0

Ваша проблема в том, что каждый раз, когда BlockPlaceEvent событие 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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню