Get all online players and put in map/list

Discussion in 'Plugin Development' started by Woobie, Oct 21, 2012.

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

    Woobie

    Having trouble getting all the online players and putting them in a map.
    This is what I tried
    Code:
    Player[] onlinePlayerList = Bukkit.getServer().getOnlinePlayers();
    int i = 0;
    for(Player player : onlinePlayerList){
    i++;
      playerMap.put("target" + i , player);
    Any easier ways to do this?

    EDIT: Here is my full, messy code
    Code:
    package me.woobie.mcd;
     
    import java.util.HashMap;
    import java.util.logging.Logger;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.AsyncPlayerChatEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Main extends JavaPlugin implements Listener{
        HashMap<String , Player > playerMap = new HashMap<String , Player >();
        public Logger log = Logger.getLogger("Minecraft");
     
        public void onEnable(){
            log.info("[MCD] Plugin Enabled");
            this.getServer().getPluginManager().registerEvents(this, this);
         
        }
     
        public void onDisable(){
            log.info("[MCD] Plugin Disabled");
         
        }
     
        public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] arg) {
            Player p = (Player) sender;
                    if(cmd.getName().equalsIgnoreCase("mchatenable")){
                        Player[] onlinePlayerList = Bukkit.getServer().getOnlinePlayers();
                        if(!(p.hasPermission("mchat.bypass"))){
                        int i = 0;
                        for(Player player : onlinePlayerList){
                            i++;
                            playerMap.put("target" + i , player);
                            Bukkit.getServer().broadcastMessage(ChatColor.RED+ "The chat has been disabled!");
                        }
                         
                        } else {
                            if(playerMap.containsKey(p)){
                                playerMap.remove(p);
                            }
                        }
                            if(cmd.getName().equalsIgnoreCase("mchatdisable")){
                                if(playerMap.containsKey(Bukkit.getOnlinePlayers())){
                                    playerMap.remove(Bukkit.getOnlinePlayers());
                                    Bukkit.getServer().broadcastMessage(ChatColor.GREEN+ "The chat has been enabled!");
                                }
                            }
                        }
                 
                    return false;
                 
                    }
                     
                        @EventHandler
                        public void onChat(AsyncPlayerChatEvent e){
                            Player p = e.getPlayer();
                            if(playerMap.containsKey(p)){
                                e.setCancelled(true);
                                p.sendMessage(ChatColor.RED+ "The chat is disabled!");
                            }
                        }
                    }
                    
    Only thing that works is this
    Code:
    Bukkit.getServer().broadcastMessage(ChatColor.RED+ "The chat has been disabled!");
    No errors, this
    Code:
     if(cmd.getName().equalsIgnoreCase("mchatenable")){
    just logs a message "Woobie issued command /mchatenable" or something, I did register the event, as you can probably see.
    I can still talk, even if I dont have permission for it, and the chat is disabled.
     
  2. Offline

    Georgeto

    Do you really need the Player Objects, or would it be enough to save the playernames?
    Saving Player Objects could end in serious memory leaks...

    Arrays.asList(Bukkit.getServer().getOnlinePlayers());
     
  3. Offline

    Woobie

    I know, I used that just for now, since I was only testing the plugin if it works.
     
  4. Offline

    Georgeto

    I hava rewritten your code, i hope this fixes your problem ;)
    Code:java
    1.  
    2. package me.woobie.mcd;
    3.  
    4. import java.util.HashMap;
    5. import java.util.logging.Logger;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.entity.Player;
    12. import org.bukkit.event.EventHandler;
    13. import org.bukkit.event.Listener;
    14. import org.bukkit.event.player.AsyncPlayerChatEvent;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16.  
    17. public class Main extends JavaPlugin implements Listener {
    18. private boolean chatDisabled = false;
    19. public Logger log = Logger.getLogger("Minecraft");
    20.  
    21. public void onEnable() {
    22. log.info("[MCD] Plugin Enabled");
    23. this.getServer().getPluginManager().registerEvents(this, this);
    24.  
    25. }
    26.  
    27. public void onDisable() {
    28. log.info("[MCD] Plugin Disabled");
    29.  
    30. }
    31.  
    32. public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] arg) {
    33. Player p = (Player) sender;
    34. if (cmd.getName().equalsIgnoreCase("mchatenable")) {
    35. chatDisabled = true;
    36. Bukkit.getServer().broadcastMessage(ChatColor.RED + "The chat has been disabled!");
    37. } else if (cmd.getName().equalsIgnoreCase("mchatdisable")) {
    38. chatDisabled = false;
    39. Bukkit.getServer().broadcastMessage(ChatColor.GREEN + "The chat has been enabled!");
    40. }
    41. return false;
    42. }
    43.  
    44. @EventHandler
    45. public void onChat(AsyncPlayerChatEvent e) {
    46. Player p = e.getPlayer();
    47. if (chatDisabled) {
    48. if (!p.hasPermission("mchat.bypass")) {
    49. e.setCancelled(true);
    50. p.sendMessage(ChatColor.RED + "The chat is disabled!");
    51. }
    52. }
    53. }
    54. }
    55.  
     
  5. Offline

    gomeow

    Could this be the plugin I compiled for you?
    btw, it worked
     
  6. Offline

    Woobie

    Awesome, and yeah this is. I always do everything in the hard way, I dont know why I didnt use booleans earlier -_-
     
    Ravada likes this.
  7. Offline

    xXSniperzzXx_SD

    Code:
    for(Player all:getServer().getOnlinePlayers()){
    list.add(all.getName();
    }
     
    fritzcat12 and Huffmanbran like this.
  8. Offline

    ajs333

    gomeow
    I tried to use the coding and it has a few errors.. What is wrong? The error is where it says " public void onChat(AsyncPlayerChatEvent e) {" The error is with the "()"
    Code:
    if (cmd.getName().equalsIgnoreCase("chatenable")) {
                    chatDisabled = true;
                    Bukkit.getServer().broadcastMessage(ChatColor.RED + "The chat has been disabled! Only staff can chat now!");
                } else if (cmd.getName().equalsIgnoreCase("chatdisable")) {
                    chatDisabled = false;
                    Bukkit.getServer().broadcastMessage(ChatColor.GREEN + "The chat has been enabled for everyone!");
                }
                return false;
                }
           
                @EventHandler
                public void onChat(AsyncPlayerChatEvent e) {
                Player p = e.getPlayer();
                if (chatDisabled) {
                    if (!p.hasPermission("skits.mod") || !p.hasPermission("skits.tmod")) {
                    e.setCancelled(true);
                    p.sendMessage(ChatColor.RED + "The chat is disabled!");
                        }
                    }
                }
     
  9. ajs333
    I find it funny how you bumped an old thread created by me on my old account, and now I'm kind of answering my own question. What is the error?
     
  10. Offline

    ajs333

    Assist
    I never bumped your old thread but I fixed it!
     
  11. ajs333
    Yes you did, check the last post date (Oct 23, 2012), over a year ago. Also, Woobie is my old account, so yes, you did bump my thread. :p
     
Thread Status:
Not open for further replies.

Share This Page