Solved /list? - Listing all online players

Discussion in 'Plugin Development' started by HyrulesLegend, Nov 22, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    HyrulesLegend

    Hey everyone, I know this seems like a stupid question, but I've been trying for awhile now, and I can't seem to get a /list command working! The command executes and displays a message, but it displays it twice, one for the 2 online players, here's my code:
    Code:java
    1. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    2. if(cmd.getName().equalsIgnoreCase("list")){
    3. Player p = (Player)sender;
    4. for (Player list : Bukkit.getOnlinePlayers()) {
    5. p.sendMessage(ChatColor.GOLD + "Currently Online Players: " + "" + Bukkit.getServer().getOnlinePlayers().length + "/120");
    6. p.sendMessage(ChatColor.GREEN + "" + list.getDisplayName());


    Any idea on how to go about fixing this?
     
  2. Offline

    hanahouhanah

    This:
    Code:
    p.sendMessage(ChatColor.GOLD + "Currently Online Players: " + "" + Bukkit.getServer().getOnlinePlayers().length + "/120");
    Will display for whatever number of online players there are on the server. To fix your problem, simply throw that somewhere above your loop.
    Such as:
    Code:java
    1. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    2. if(cmd.getName().equalsIgnoreCase("list")){
    3. Player p = (Player)sender;
    4. p.sendMessage(ChatColor.GOLD + "Currently Online Players: " + "" + Bukkit.getServer().getOnlinePlayers().length + "/120");
    5. for (Player list : Bukkit.getOnlinePlayers()) {
    6. p.sendMessage(ChatColor.GREEN + "" + list.getDisplayName());
     
  3. Offline

    HyrulesLegend

    hanahouhanah Ty! Now, there's on last problem, for every new player online, it puts the next name on another line. Ex:
    Currently Online Players: 2/120
    Hydrations
    friend12
    superguy
    randomguy
     
  4. Offline

    hanahouhanah

    My tired brain is telling me to just put the list of players into an arraylist and have the list be sent to the player. Otherwise... Not sure; sorry.
     
  5. Offline

    HyrulesLegend

    hanahouhanah Here's what it looks like: http://gyazo.com/27392651a47e3089d8394271a1fcbcc5

    Array list:
    Code:java
    1. public ArrayList<String> blist = new ArrayList<String>();
    2.  


    Command:
    Code:java
    1. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    2. if(cmd.getName().equalsIgnoreCase("list")){
    3. Player p = (Player)sender;
    4. p.sendMessage(ChatColor.GOLD + "Currently Online Players: " + "" + Bukkit.getServer().getOnlinePlayers().length + "/120");
    5. for (Player blist : Bukkit.getOnlinePlayers()) {
    6. p.sendMessage(ChatColor.GREEN + "" + blist.getName());
    7.  
    8. }
    9.  
    10. }
    11. return false;

    I want them to both be on the same line, any ideas?
     
  6. Offline

    kreashenz

    Use a StringBuilder to easily put commas into the list, it's actually really easy.
     
  7. Offline

    hanahouhanah

    You aren't adding the players to your arraylist.
    Instead of your loop, do:
    blist.add(Bukkit.getOnlinePlayers());
    p.sendMessage(ChatColor.GREEN + "" + blist);
    There's a better way to do this, but I'm not sure how. :L
     
  8. Offline

    HyrulesLegend

    hanahouhanah You can't add Bukkit.getOnlinePlayers() into an array list.

    EDIT: Still doesn't fix the main thing i'm trying to fix, which is the string-per-line that I don't want.
     
  9. Offline

    kreashenz

    Code:java
    1. StringBuilder str = new StringBuilder();
    2. for(Player ps : Bukkit.getOnlinePlayers()){
    3. if(str.length() > 0){
    4. str.append(", ");
    5. }
    6. str.append("§6" + ps.getName() + "§7");
    7. }
    8. s.sendMessage(str.toString()); // s = CommandSender
     
  10. Offline

    xTrollxDudex

    Max_The_Link_Fan
    PHP:
    blist.addAll(Bukkit.getServer().getOnlinePlayers());

    SringBuilder sb = new StringBuilder();
    for(
    Player p Bukkit.getServer().getOnlinePlayers()) {
        
    sb.append(p.getName()).append(", ");
    }
    Edit: kreashenz D:
     
    kreashenz likes this.
  11. Offline

    HyrulesLegend

    Works now! Thanks to everyone who helped! :)

    kreashenz Is there a way to set the color of a player's name to ___ if their op?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
  12. Offline

    xTrollxDudex

    Max_The_Link_Fan
    Put this in your loop:
    PHP:
    if(ps.isOp) {
        
    // append the name with the color
        
    continue;
    }
    // everything else
     
  13. Offline

    HyrulesLegend

    xTrollxDudex This is what I've got, it's not working. (Probs an easy mistake, I'm really tired right now)
    Code:java
    1. StringBuilder str = new StringBuilder();
    2. for(Player ps : Bukkit.getOnlinePlayers()){
    3. if(str.length() > 0){
    4. str.append(", ");
    5. }
    6. if(ps.isOp()) {
    7. str.append("§9" + ps.getName() + "§7");
    8. } else {
    9. str.append("§a" + ps.getName() + "§7");
    10.  
    11. }
    12. }
    13. p.sendMessage(str.toString());
     
  14. Offline

    xTrollxDudex

  15. Offline

    HyrulesLegend

    Nevermind! IT was working, I'm stupid. :3 (Told ya im tired xD)
     
  16. Offline

    JPG2000

    hanahouhanah Or do it this way:
    Code:java
    1. String list;
    2.  
    3. int count = 0;
    4.  
    5. for (Player p: Bukkit.getOnlinePlayers()) {
    6. count++;
    7.  
    8. list += p.getName() + ", ";
    9. }


    In my mind, simpler and better then a string builder :)
     
  17. Offline

    cummo15

Thread Status:
Not open for further replies.

Share This Page