2017-10-09 7 views
1

광산 크래프트 java 서버 플러그인을 만들고 있는데, 권한이 있거나 배열에 포함 된 모든 플레이어에게 메시지를 보내려고합니다. 명부. 루프 설정이 있지만 온라인으로 플레이어가있는 것처럼 여러 번 메시지를 보내는 것으로 보입니다. 어떻게 방지/수정합니까? 미리 감사드립니다! :)Bukkit (Java) 사람들이 온라인 상태 일 때 메시지 보내기

public void checkStart() { 
    HashSet<Player> listToSet = new HashSet<Player>(this.plugin.pInGame); 
    ArrayList<Player> pInGameNoDup = new ArrayList<Player>(listToSet); 

    //^changing the ArrayList to a Hashset then back to Arraylist to avoid duplicates (maybe this is the issue?) 

    int sizeCheck = pInGameNoDup.size(); 
    if (sizeCheck >= 2) { 
     for (Player p : Bukkit.getOnlinePlayers()) { 
      if (pInGameNoDup.contains(p) || p.isOp()) { 
       p.sendMessage(label + "The Game of DeathTag has begun! Now chosing who will be it..."); 
       randomIt(); 
       p.sendMessage(label + this.plugin.it.getName() + " has been randomly chosen to be it!"); 
      } 
     } 
    } else { 
     for (Player p : Bukkit.getOnlinePlayers()) { 
      if (p.hasPermission("tag.join") || p.isOp()) { 
       p.sendMessage(label + "Not Enough People have joined, the game will not start"); 
       setDefault(); 
      } 
     } 
    } 
} 
+0

내가 처음을 변경 루프, 그러나 두 번째 루프가 모든 온라인 플레이어를 통과하여 모든 사람들이 게임이 시작되지 않는다는 것을 알 수 있도록해야합니다. – Squiddie

+0

'의 Bukkit.getOnlinePlayers'통해 반복하고 –

답변

-1

Ah! 다른 코드에서 버그를 발견했습니다. 그것은 같은 것을 보았다 :

for (Player p : Bukkit.getOnlinePlayers()) { 
    checkStart(); 
    } 

내가 루프에서 어떤 이유로 그것을 호출했다 : 나는

당신은()`대신 pInGameNoDup`
+0

질문에 코드의 나머지 부분을 포함 시키십시오. 이런 식으로하면 미래의 사용자는 당신을 이해할 수 없습니다! – Kerooker

+0

예! 미안해, 그냥 내가 바보가되어서 내가 제공 한 루프의 일부라고 생각했다. –