2014-04-05 1 views
1

Bukkit 플러그인을 개발하는 동안 배열에 문제가 있습니다. 왜이 기능이 작동하지 않습니까? 플레이어가 이미 블록을 놓았는지 확인합니다. 그것은 계속해서 "다이아몬드!"라고 말하고 있습니다. ingame.배열 문제

@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] 때마다 당신이 방법, '스토리지를 호출하기 때문에 [내가] = 선수 스토리지에 선수 이름을 추가합니다 줄의 코드를 .getName()'은 항상 i가 0입니다. 확인하려는 플레이어 이름을 겹쳐 쓸 수 있습니까? – LadyBernkastel

+0

왜이 목적으로 배열을 사용하고 있습니까? LinkedList와 같은 것이 작동 할 때 (그리고 매번리스트로 변환하지 않을 때) – Rogue

답변

0

:

@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 이벤트가 호출 될 때마다이 완전히 새로운 storage 배열이 생성된다는 것이다. 당신이 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 
}