Hub Bug

Discussion in 'Plugin Development' started by DividedByZero, Jan 26, 2014.

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

    DividedByZero

    I am currently creating a hub for my server with lobbies. There is an error that checks when to vanish people from the lobbies every 1 seconds ~.

    Here is the error.
    Code:
    java.lang.NullPointerException
            at org.hiros.plugin.Hub$2.run(Hub.java:212) ~[?:?]
            at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftTask.run(CraftTask.java
    :53) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.mainThreadHea
    rtbeat(CraftScheduler.java:345) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks
    ]
            at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:5
    87) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    [21:55:38 WARN]: [Hub] Task #110 for Hub v1.0 generated an exception
    java.lang.NullPointerException
            at org.hiros.plugin.Hub$2.run(Hub.java:212) ~[?:?]
            at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftTask.run(CraftTask.java
    :53) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.mainThreadHea
    rtbeat(CraftScheduler.java:345) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks
    ]
            at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:5
    87) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    [21:55:39 WARN]: [Hub] Task #110 for Hub v1.0 generated an exception
    java.lang.NullPointerException
            at org.hiros.plugin.Hub$2.run(Hub.java:212) ~[?:?]
            at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftTask.run(CraftTask.java
    :53) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftScheduler.mainThreadHea
    rtbeat(CraftScheduler.java:345) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks
    ]
            at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:5
    87) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    Here is my source code.
    Code:
    package org.hiros.plugin;
     
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
     
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    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.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Hub extends JavaPlugin implements Listener{
        String prefix = ChatColor.WHITE+"["+ChatColor.GREEN+""+ChatColor.BOLD+"Crystal"+ChatColor.DARK_GREEN+""+ChatColor.BOLD+"Craft"+ChatColor.RESET+""+ChatColor.WHITE+"] ";
       
        //Variable declartion
        public HashMap<Player, Boolean> preventHideSpam = new HashMap<Player, Boolean>();
        public HashMap<Player, Boolean> lobbyHidePlayers = new HashMap<Player, Boolean>();
        public int maxLobbies = 54;
        public HashMap<Player, Integer> currentLobby = new HashMap<Player, Integer>();
        public HashMap<Player, Integer> hub = new HashMap<Player, Integer>();
       
       
        @Override
        public void onEnable() {
            checkForConfig();
            this.getServer().getPluginManager().registerEvents(this, this);
        }
        @Override
        public void onDisable() {
            //Do stuff
        }
       
        public void checkForConfig() {
            if(this.getConfig().getBoolean("setup") != true) {
                this.getConfig().set("setup", true);
                this.saveConfig();
            }
        }
        //Commands
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(!(sender instanceof Player)) {
                getLogger().info("Please do not execute commands through the console.");
                return false;
            }
            if(cmd.getName().equalsIgnoreCase("hub")) {
                final Player player = (Player) sender;
                if(args.length == 0) {
                    joinHub(player, 0);
                    return false;
                }
                if(args[0].equalsIgnoreCase("menu")) {
                if(!(player.hasPermission("crystalcraft.hub.menu"))) {
                    player.sendMessage(prefix+ChatColor.DARK_RED+"You do not have permission");
                    return false;
                }
                IconMenu mainMenu = new IconMenu(9,ChatColor.GREEN+""+ChatColor.BOLD+"Hub Commands",new IconMenu.OptionClickEventHandler() {
                    @Override
                    public void onOptionClick(IconMenu.OptionClickEvent event) {
                        if(event.getName().equalsIgnoreCase(ChatColor.GOLD+""+ChatColor.BOLD+"Set Hub Spawn")) {
                            if(!(event.getPlayer().hasPermission("cyrstalcraft.hub.sethub"))) {
                                event.getPlayer().sendMessage(prefix+ChatColor.DARK_RED+"You do not have permission.");
                            } else {
                            setHubSpawn(event.getPlayer());
                            }
                        }
                        event.setWillClose(true);
                    }
                }, this);
                mainMenu.setOption(0, new ItemStack(Material.NETHER_STAR), ChatColor.GOLD+""+ChatColor.BOLD+"Set Hub Spawn", ChatColor.BLUE+"Stand where you want the hub spawn to be.");
                mainMenu.open(player);
                }
               
            }
            return false;
        }
        //Event Handlers
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent event) {
            if(this.getConfig().getBoolean("hub.setup") != true) {
                event.getPlayer().sendMessage(prefix+ChatColor.RED+"Please set the hub spawn. Type /hub menu.");
            } else {
                joinHub(event.getPlayer(), 0);
            }
        }
        @EventHandler
        public void onPlayerInteract(PlayerInteractEvent event) {
            Player player = event.getPlayer();
            if(player.getItemInHand().getType() == Material.WATCH && event.getAction().equals(Action.RIGHT_CLICK_AIR) || player.getItemInHand().getType() == Material.WATCH && event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
                if(lobbyHidePlayers.get(player) == false) {
                    if(preventHideSpam.get(player) == true) {
                        player.sendMessage(prefix+ChatColor.RED+"Please wait 15 seconds between each use.");
                    } else {
                lobbyHidePlayers.put(player, true);
                for(Player p : getServer().getOnlinePlayers()) {
                    player.hidePlayer(p);
                }
                player.sendMessage(prefix+ChatColor.AQUA+""+ChatColor.BOLD+"All players have been hidden.");
                preventHideSpam(player);
                    }
                } else {
                    if(preventHideSpam.get(player) == true) {
                        player.sendMessage(prefix+ChatColor.RED+"Please wait 15 seconds between each use.");
                    } else {
                    lobbyHidePlayers.put(player, true);
                    for(Player p : getServer().getOnlinePlayers()) {
                        player.hidePlayer(p);
                    }
                    player.sendMessage(prefix+ChatColor.AQUA+""+ChatColor.BOLD+"All players are now visible.");
                    }
                }
            }
            if(player.getItemInHand().getType() == Material.NETHER_STAR && event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || player.getItemInHand().getType() == Material.NETHER_STAR && event.getAction().equals(Action.RIGHT_CLICK_AIR)) {
                openLobbySelector(player);
            }
        }
       
       
       
        //Hub Api
        public void setHubSpawn(Player player) {
            double x = player.getLocation().getX();
            double y = player.getLocation().getY();
            double z = player.getLocation().getZ();
            float yaw = player.getLocation().getYaw();
            String world = player.getLocation().getWorld().toString();
            this.getConfig().set("hub.setup", true);
            this.getConfig().set("hub.spawn.x", x);
            this.getConfig().set("hub.spawn.y", y);
            this.getConfig().set("hub.spawn.z", z);
            this.getConfig().set("hub.spawn.yaw", yaw);
            this.getConfig().set("hub.spawn.world", world);
            this.saveConfig();
            this.reloadConfig();
            player.sendMessage(prefix+ChatColor.GOLD+"Hub location has been set.");
        }
        public void sendPlayerJoinMessage(Player player) {
            player.sendMessage(ChatColor.DARK_GREEN+""+ChatColor.BOLD+""+ChatColor.STRIKETHROUGH+"=========================");
            player.sendMessage(ChatColor.BOLD+""+ChatColor.WHITE+"Welcome to the "+ChatColor.GREEN+"Crystal"+ChatColor.DARK_GREEN+"Craft "+ChatColor.WHITE+"Hub!");
            player.sendMessage("");
            player.sendMessage(ChatColor.GOLD+"Hub Lobby: "+ChatColor.WHITE+""+currentLobby.get(player));
            Iterator<?> iteratora = hub.entrySet().iterator();
            int playersOnline = 0;
            while(iteratora.hasNext()) {
                @SuppressWarnings("unchecked")
                Entry<Player, Integer> entry = (Entry<Player, Integer>) iteratora.next();
                if(entry.getValue() == currentLobby.get(player)) {
                    playersOnline += 1;
                }
            }
            player.sendMessage(ChatColor.GOLD+"Players in Lobby: "+ChatColor.WHITE+""+playersOnline);
            player.sendMessage("");
            player.sendMessage(ChatColor.YELLOW+""+ChatColor.BOLD+"Right Click your compass to view the quick warp menu.");
            player.sendMessage(ChatColor.DARK_GREEN+""+ChatColor.BOLD+""+ChatColor.STRIKETHROUGH+"=========================");
        }
        public void getHubItems(Player player) {
            Inventory playerInv = player.getInventory();
            playerInv.clear();
            ItemStack compass = new ItemStack(Material.COMPASS);
            ItemMeta compassMeta = compass.getItemMeta();
            compassMeta.setDisplayName(ChatColor.GREEN+""+ChatColor.BOLD+"Quick Warp");
            compass.setItemMeta(compassMeta);
            playerInv.setItem(0, compass);
            ItemStack clock = new ItemStack(Material.WATCH);
            ItemMeta clockMeta = clock.getItemMeta();
            clockMeta.setDisplayName(ChatColor.AQUA+""+ChatColor.BOLD+"Hide Players");
            clock.setItemMeta(clockMeta);
            playerInv.setItem(1, clock);
            ItemStack star = new ItemStack(Material.NETHER_STAR);
            ItemMeta starMeta = star.getItemMeta();
            starMeta.setDisplayName(ChatColor.LIGHT_PURPLE+""+ChatColor.BOLD+"Lobby Selector");
            star.setItemMeta(starMeta);
            playerInv.setItem(8, star);
        }
        public void joinHub(final Player player, int hubid) {
            int randomLobby;
            if(hubid == 0) {
            randomLobby = (int)(Math.random()*maxLobbies);
            } else {
            randomLobby = hubid;
            }
            currentLobby.put(player, randomLobby);
            Location playerLoc = player.getLocation();
            playerLoc.setX(this.getConfig().getDouble("hub.spawn.x"));
            playerLoc.setY(this.getConfig().getDouble("hub.spawn.y"));
            playerLoc.setZ(this.getConfig().getDouble("hub.spawn.z"));
            player.teleport(playerLoc);
            hub.put(player, currentLobby.get(player));
            sendPlayerJoinMessage(player);
            getHubItems(player);
           
            //Hide the players in other lobbies
            for(Player p : getServer().getOnlinePlayers()) {
                player.hidePlayer(p);
            }
            getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
                public void run() {
                    for(Map.Entry<Player, Integer> entry : hub.entrySet()) {
                        Player tempPlayer = entry.getKey();
                        int tempLobby = entry.getValue();
                        player.sendMessage(""+lobbyHidePlayers.get(player).toString());
                    }
                }
            }, 20L, 20L);
        }
        public void preventHideSpam(final Player player) {
            preventHideSpam.put(player, true);
            getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                public void run() {
                    preventHideSpam.put(player, false);
                }
            }, 300L);
        }
        public void openLobbySelector(Player player) {
            IconMenu lobbyMenu = new IconMenu(54, ChatColor.LIGHT_PURPLE+""+ChatColor.BOLD+""+ChatColor.UNDERLINE+"Lobby Selector", new IconMenu.OptionClickEventHandler() {
                @Override
                public void onOptionClick(IconMenu.OptionClickEvent event) {
                    Player player = (Player) event.getPlayer();
                    String eventStr = event.getName();
                    eventStr = eventStr.replace(ChatColor.GOLD+""+ChatColor.BOLD+"Lobby #", "");
                    int lobbyNum = Integer.parseInt(eventStr);
                    joinHub(player, lobbyNum);
                   
                    event.setWillClose(true);
                }
            }, this);
            for(int i=0;i<maxLobbies;i++) {
                int tempi = i+1;
                int tempPlayersOnline = 0;
                boolean lobbyImIn = false;
                Iterator<?> iterator = hub.entrySet().iterator();
                while(iterator.hasNext()) {
                    @SuppressWarnings("unchecked")
                    Entry<Player, Integer> entry = (Entry<Player, Integer>) iterator.next();
                    if(entry.getValue() == tempi) {
                        tempPlayersOnline += 1;
                    }
                    if(entry.getKey() == player && entry.getValue() == tempi) {
                        lobbyImIn = true;
                    }
                }
                String onlineMessage = null;
                if(tempPlayersOnline == 1) {
                    onlineMessage = ChatColor.BLUE+"1 Player Online.";
                } else {
                    onlineMessage = ChatColor.BLUE+""+tempPlayersOnline+" Players Online.";
                }
                if(lobbyImIn == false) {
                    lobbyMenu.setOption(i, new ItemStack(Material.IRON_BLOCK, tempi), ChatColor.GOLD+""+ChatColor.BOLD+"Lobby #"+tempi, onlineMessage);
                } else {
                    lobbyMenu.setOption(i, new ItemStack(Material.GOLD_BLOCK, tempi), ChatColor.GOLD+""+ChatColor.BOLD+"Lobby #"+tempi, onlineMessage);
                }
            }
            lobbyMenu.open(player);
        }
    }
    
     
  2. Offline

    Niknea

    Looks like you get three ( of the same error, NPE ) on the same line. Here is a part of the error, think you can now figure it out?

    Code:
    java.lang.NullPointerException
            at org.hiros.plugin.Hub$2.run(Hub.java:212) ~[?:?]
     
  3. Offline

    DividedByZero

    Im rather new to plugin coding and I don't know how to really read errors
     
  4. Offline

    Codex Arcanum

    Link to a stickied post.
     
  5. Offline

    sockmonkey1

    1.) it will make it easier on us if you used
    Code:java
    1. code here
    because it adds line numbers.
    2.) learning how to read stacktraces will greatly increase your abilities. Which is the link above me.
    After adding it to my IDE (for line numbers) The problem is at line 212 which is
    Code:java
    1. Player tempPlayer = entry.getKey();

    So I would say that in this instance entry.getKey(); is null. Maybe adding a check that will cancel the method should one of them be null (if its okay for it to be null) and if its supposed to have something in it at all times, I suggest finding out why this is null.
     
Thread Status:
Not open for further replies.

Share This Page