getOnlinePlayers

Discussion in 'Plugin Development' started by Badwolf330, Nov 12, 2015.

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

    Badwolf330

    Code:
    package nl._Jackasss_.Magie_ban;
    
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener  {  
       
      public void onEnable() {
          getCommand("menu").setExecutor(new Ban());
          getServer().getPluginManager().registerEvents(new Ban(), this);
      }
    }
    
    Code:
    package nl._Jackasss_.Magie_ban;
    
    import java.util.HashMap;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryCloseEvent;
    import org.bukkit.event.player.PlayerKickEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class Ban implements Listener, CommandExecutor {
    
        private HashMap<String, String> inv = new HashMap<String, String>();
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            if (!(sender instanceof Player)){
                sender.sendMessage(ChatColor.RED + "This command i only for a player!");
            }
            Player p = (Player)sender;
            if (p.hasPermission("menu.menu")) {
                if (cmd.getName().equalsIgnoreCase("menu")){
                this.openInv(p);
                return false;
                }
            }
            return false;
        }
       
        @EventHandler
        public void onClick(InventoryClickEvent e){
            if (e.getSlot() == e.getRawSlot()) {
                Player p = (Player) e.getWhoClicked();
                if (this.inv.containsKey(p.getName())) {
                    if (this.inv.get(p.getName()).equals("Menu")){
                        e.setCancelled(true);
                        p.updateInventory();
                        ItemStack item = e.getCurrentItem();
                        if (item != null){
                            String name = ChatColor.stripColor(item.getItemMeta().getDisplayName());
                            Player p_ = Bukkit.getPlayerExact(name);
                            if (p_ != null){
                                p.teleport(p_);
                            }
                            this.closeInv(p);
                        }
                    }
                }
            }
        }
       
        @EventHandler
        public void onClose(InventoryCloseEvent e){
            this.closeInv((Player) e.getPlayer());
        }
       
        @EventHandler
        public void onKick(PlayerKickEvent e){
            this.closeInv(e.getPlayer());
        }
       
        @EventHandler
        public void onQuit(PlayerQuitEvent e){
            this.closeInv(e.getPlayer());
        }
           
        public void openInv(Player p){
            int lines = 0;
            Player[] players = Bukkit.getOnlinePlayers();
            while (lines * 9 < players.length -1) {
                lines++;
            }
            if (lines > 6) {
                lines = 6;
            }
            Inventory inv = Bukkit.createInventory(null, lines * 9, "Menu");
            int slot = 0;
            for (int i = 0; i < players.length; i++){
                Player p_ = players[i];
                if (p_ != p){
                    ItemStack item = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
                    ItemMeta meta = item.getItemMeta();
                    meta.setDisplayName("&7" + p_.getName());
                    item.setItemMeta(meta);
                    inv.setItem(slot, item);
                    slot++;
                }
            }
            p.openInventory(inv);
            this.inv.put(p.getName(), "Menu");
        }
       
        public void closeInv(Player p){
            if (this.inv.containsKey(p.getName())) {
                p.closeInventory();
                this.inv.remove(p.getName());
            }
        }
    }
    
    hey this part its working
    Code:
    Player[] players = Bukkit.getOnlinePlayers();
    can someone help????
     
  2. Offline

    timtower Administrator Administrator Moderator

  3. Offline

    grrocks

  4. Offline

    Badwolf330

    if i change who can i get the length of the online players? .size?
     
  5. Offline

    timtower Administrator Administrator Moderator

    Ninja strikes again!
    List<Player> has a size() method.
     
  6. Offline

    Badwolf330

    @timtower like this?

    Code:
    package nl._Jackasss_.Magie_ban;
    
    import java.util.Collection;
    import java.util.HashMap;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryCloseEvent;
    import org.bukkit.event.player.PlayerKickEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class Ban implements Listener, CommandExecutor {
    
        private HashMap<String, String> inv = new HashMap<String, String>();
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            if (!(sender instanceof Player)){
                sender.sendMessage(ChatColor.RED + "This command i only for a player!");
            }
            Player p = (Player)sender;
            if (p.hasPermission("menu.menu")) {
                if (cmd.getName().equalsIgnoreCase("menu")){
                this.openInv(p);
                return false;
                }
            }
            return false;
        }
       
        @EventHandler
        public void onClick(InventoryClickEvent e){
            if (e.getSlot() == e.getRawSlot()) {
                Player p = (Player) e.getWhoClicked();
                if (this.inv.containsKey(p.getName())) {
                    if (this.inv.get(p.getName()).equals("Menu")){
                        e.setCancelled(true);
                        p.updateInventory();
                        ItemStack item = e.getCurrentItem();
                        if (item != null){
                            String name = ChatColor.stripColor(item.getItemMeta().getDisplayName());
                            Player p_ = Bukkit.getPlayerExact(name);
                            if (p_ != null){
                                p.teleport(p_);
                            }
                            this.closeInv(p);
                        }
                    }
                }
            }
        }
       
        @EventHandler
        public void onClose(InventoryCloseEvent e){
            this.closeInv((Player) e.getPlayer());
        }
       
        @EventHandler
        public void onKick(PlayerKickEvent e){
            this.closeInv(e.getPlayer());
        }
       
        @EventHandler
        public void onQuit(PlayerQuitEvent e){
            this.closeInv(e.getPlayer());
        }
           
        public void openInv(Player p){
            int lines = 0;
            Collection<? extends Player> players = Bukkit.getOnlinePlayers();
            while (lines * 9 < players.size() -1) {
                lines++;
            }
            if (lines > 6) {
                lines = 6;
            }
            Inventory inv = Bukkit.createInventory(null, lines * 9, "Menu");
            int slot = 0;
            for (int i = 0; i < players.size(); i++){
                Player p_ = players[i];
                if (p_ != p){
                    ItemStack item = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
                    ItemMeta meta = item.getItemMeta();
                    meta.setDisplayName("&7" + p_.getName());
                    item.setItemMeta(meta);
                    inv.setItem(slot, item);
                    slot++;
                }
            }
            p.openInventory(inv);
            this.inv.put(p.getName(), "Menu");
        }
       
        public void closeInv(Player p){
            if (this.inv.containsKey(p.getName())) {
                p.closeInventory();
                this.inv.remove(p.getName());
            }
        }
    }
    
    
     
  7. Offline

    timtower Administrator Administrator Moderator

    @Badwolf330 You are accessing it as an array, read some stuff on lists and collections.
     
  8. Offline

    grrocks

    use this List<Player> players = .....
     
  9. Offline

    Badwolf330

    @grrocks

    Code:
     List<Player> players = Bukkit.getOnlinePlayers();
    its working

    error
    Code:
    Player p_ = players[i];
     
  10. Offline

    mcdorli

    I don't think you can use _ in variable names
     
  11. Offline

    Badwolf330

    @mcdorli thats not the problem (that works)

    The type of the expression must be an array type but it resolved to List<Player>
     
  12. Offline

    mcdorli

    Yeah, it probably returns an array

    Player[] players = Bukkit.getOnlinePlayers()
     
  13. Offline

    Badwolf330

    @mcdorli
    can you help me :p i got no idee to fix this :p
     
  14. Offline

    mcdorli

    I'm currently helping you...? I said a possible answer above.


    I have a joke for this, but I really don't want to anger you...
     
  15. Offline

    Scimiguy

    @mcdorli
    And you won't like him when he's angry....
    He goes wild and mutates.. he goes from TimTower to TimSkyscraper!!!
     
    teej107 and mythbusterma like this.
  16. Offline

    Badwolf330

    @mcdorli i not mad :p but i from holland :p but you did edit that post :p

    but Player[] player = Bukkit.getOnlinePlayers() isnt working
    Type mismatch: cannot convert from Collection<capture#1-of ? extends Player> to Player[]
     
  17. Offline

    CraftCreeper6

    @mcdorli
    I want to know the joke ;p
     
  18. Offline

    mcdorli

    Then it does return list of players, I don't kbkw why it said it is wrong
     
  19. Offline

    I Al Istannen

    @Badwolf330 "Bukkit.getOnlinePlayers()" retuns a List. So you should react accordingly. You can't access a List item with "listName[index]". Use "listName.get(index)" instead.
     
  20. Offline

    CraftCreeper6

  21. Offline

    mcdorli

    PG-13 and PG-timtower

    Please timtower, do not read this.

    Joke (open)

    @timtower Wow, you're fast, the girls probably hate you.
     
  22. Offline

    Badwolf330

    @mcdorli i did fix it

    Code:
    package nl._Jackasss_.Magie_ban;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.List;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryCloseEvent;
    import org.bukkit.event.player.PlayerKickEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class Ban implements Listener, CommandExecutor {
    
        private HashMap<String, String> inv = new HashMap<String, String>();
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            if (!(sender instanceof Player)){
                sender.sendMessage(ChatColor.RED + "This command i only for a player!");
            }
            Player p = (Player)sender;
            if (p.hasPermission("menu.menu")) {
                if (cmd.getName().equalsIgnoreCase("menu")){
                this.openInv(p);
                return false;
                }
            }
            return false;
        }
       
        @EventHandler
        public void onClick(InventoryClickEvent e){
            if (e.getSlot() == e.getRawSlot()) {
                Player p = (Player) e.getWhoClicked();
                if (this.inv.containsKey(p.getName())) {
                    if (this.inv.get(p.getName()).equals("Menu")){
                        e.setCancelled(true);
                        p.updateInventory();
                        ItemStack item = e.getCurrentItem();
                        if (item != null){
                            String name = ChatColor.stripColor(item.getItemMeta().getDisplayName());
                            Player p_ = Bukkit.getPlayerExact(name);
                            if (p_ != null){
                                p.teleport(p_);
                            }
                            this.closeInv(p);
                        }
                    }
                }
            }
        }
       
        @EventHandler
        public void onClose(InventoryCloseEvent e){
            this.closeInv((Player) e.getPlayer());
        }
       
        @EventHandler
        public void onKick(PlayerKickEvent e){
            this.closeInv(e.getPlayer());
        }
       
        @EventHandler
        public void onQuit(PlayerQuitEvent e){
            this.closeInv(e.getPlayer());
        }
           
        public void openInv(Player p){
            int lines = 0;
            List<Player> onlinePlayers = new ArrayList<Player>(Bukkit.getOnlinePlayers());
            while (lines * 9 < onlinePlayers.size() -1) {
                lines++;
            }
            if (lines > 6) {
                lines = 6;
            }
            Inventory inv = Bukkit.createInventory(null, lines * 9, "Menu");
            int slot = 0;
            for (int i = 0; i < onlinePlayers.size(); i++){
                Player p_ = onlinePlayers.get(i);
                if (p_ != p){
                    ItemStack item = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
                    ItemMeta meta = item.getItemMeta();
                    meta.setDisplayName(p_.getName());
                    item.setItemMeta(meta);
                    inv.setItem(slot, item);
                    slot++;
                }
            }
            p.openInventory(inv);
            this.inv.put(p.getName(), "Menu");
        }
       
        public void closeInv(Player p){
            if (this.inv.containsKey("" + p.getName())) {
                p.closeInventory();
                this.inv.remove(p.getName());
            }
        }
    }
    
    
    thanks for your help and joke's :p
     
  23. Offline

    mcdorli

    Some things : your package name is awful, it shouldn't contain _-s, and you don't own the _jackass_.nl domain
     
  24. Offline

    timtower Administrator Administrator Moderator

    Girls? Where?

    @Badwolf330 Looks good,
    Code:
    new ArrayList<Player>(Bukkit.getOnlinePlayers());
    can be replace by just Bukkit.getOnlinePlayers()
     
    mcdorli likes this.
  25. Offline

    Zombie_Striker

    Packages should be lower case

    The main class (You shouldn't name classes main) does not have any events, so it doesn't need the Listener

    Either A) You will send that message no matter what command it is or B) for a command that can only be "menu", you are checking if the command "menu" equals "menu" (redundant)

    Return false ONLY if it's not the command you're checking for. Return TRUE if you know that it is the command you're checking for (Such as Menu)

    OnlinePlayers returns a Collections. You can either A) Convert your OnlinePlayers to an Array/List or B) Loop through the OnlinePlayers and add it to the array/list.
     
  26. Offline

    HenkDeKipGaming

    Um doesn't this just work:

    Code:
    for(Player p: Bukkit.getOnlinePlayers()) {
        p.sendMessage("Test");
    }
    
    EDIT: And for the length:

    Code:
    for(Player p: Bukkit.getOnlinePlayers()) {
        p.sendMessage(Bukkit.getOnlinePlayer().length() + "");
    }
    
     
    Last edited: Nov 14, 2015
    Zombie_Striker likes this.
  27. Offline

    timtower Administrator Administrator Moderator

    Removed offtopic conversation.
    Lets keep it with the things that are important.
     
  28. Offline

    Xerox262

    How is that comment more on topic than what we were talking about?
    Especially since this is solved.

    So that this isn't off topic I'll add this

    Change this
    Code:
    Player[] players = Bukkit.getOnlinePlayers();
    to
    Code:
    List<Player> players = Bukkit.getOnlinePlayers();
    and instead of something like
    Code:
    Player player = players[i];
    use something like
    Code:
    Player player = players.get(i);
    P.S. @Badwolf330 Seeing as how this comment is now on topic I will say, ignoring people that are trying to help you/did help you will present problems in the future. Like @mcdorli's suggestion to change the package name when he is trying to help you follow basic Java conventions.
     
    Last edited: Nov 15, 2015
    mcdorli likes this.
Thread Status:
Not open for further replies.

Share This Page