У меня проблема с массивом при разработке плагина 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++;
}
}
}
Это потому, что вы создаете новый массив 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++;
}
}
}
Ваша проблема в том, что каждый раз, когда 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
}
storage[i] = player.getName()
всегда имеет значение i равным 0. Это может быть перезапись имен игроков, которые вы хотите проверить за?LinkedList
будет работать так же хорошо (и вы не будете конвертировать его в список каждый раз)