Scoreboard help

Discussion in 'Plugin Development' started by Darkpicasa, Dec 7, 2014.

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

    Darkpicasa

    Hello!
    I'm trying to add a scoreboard score, where we have a score (coins) in a FileConfiguration, with the variable coins. When I reload the server, it gives an error on startup - NullPointerException, on this line:
    Code:
    coin.put(p, obj.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Coins: ")));

    This is the full code:
    Code:
    package me.Darkpicasa.GoldSparkKits;
     
    import java.util.HashMap;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.OfflinePlayer;
    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.entity.PlayerDeathEvent;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerDropItemEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerRespawnEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Score;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
     
    public class GoldSparkKits extends JavaPlugin implements Listener{
        public GoldSparkKits plugin;
        public CustomConfig coins;
        public HashMap<OfflinePlayer, Score> coin = new HashMap<OfflinePlayer, Score>();
        public ScoreboardManager sbm;
        public Scoreboard sb;
        public Objective obj;
        public void onEnable(){
            sbm = Bukkit.getScoreboardManager();
            sb = sbm.getNewScoreboard();
            obj = sb.registerNewObjective("test1", "test");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lGoldSpark Network PvP "));
           
           
            for (Player p : Bukkit.getOnlinePlayers()){
                p.setScoreboard(sb);
               
                if (coin.get(p) == null){
                    coin.put(p, obj.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Coins: ")));
                    coin.get(p).setScore(coins.getConfig().getInt(p.getName()));   
                }
            }
           
            plugin = this;
            coins = new CustomConfig(plugin, "coins.yml");
            coins.getConfig().options().copyDefaults(true);
            coins.saveConfig();
            getLogger().info("Plugin Enabled");
            getServer().getPluginManager().registerEvents(this, this);
        }
        public void onDisable(){
            getLogger().info("Plugin Disabled");
        }
     
     
        @EventHandler
        public void playerJoin(PlayerJoinEvent e){
            Player p = e.getPlayer();
            p.setScoreboard(sb);
            if (coin.get(p) == null){
                coin.put(p, obj.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Coins: ")));
                coin.get(p).setScore(coins.getConfig().getInt(p.getName()));   
            }
           
            if (!(coins.getConfig().contains(e.getPlayer().getName()))){
                coins.getConfig().createSection(e.getPlayer().getName());
                coins.getConfig().set(e.getPlayer().getName(), 0);
                coins.saveConfig();
            }
            for (ItemStack a : p.getInventory().getContents()){
                if ((a.getType() == Material.CLAY_BALL && ChatColor.stripColor(a.getItemMeta().getDisplayName()).equalsIgnoreCase("Kit Shop"))){
                    return;
                }
            }
            ItemStack is = new ItemStack(Material.CLAY_BALL);
            ItemMeta im = is.getItemMeta();
            im.setDisplayName(ChatColor.GREEN + "Kit Shop");
            is.setItemMeta(im);
            p.getInventory().addItem(is);
            p.updateInventory();
           
        }
       
        @EventHandler
        public void respawn(PlayerRespawnEvent e){
            Player p = e.getPlayer();
            ItemStack is = new ItemStack(Material.CLAY_BALL);
            ItemMeta im = is.getItemMeta();
            im.setDisplayName(ChatColor.GREEN + "Kit Shop");
            is.setItemMeta(im);
            p.getInventory().addItem(is);
        }
       
        @EventHandler
        public void dropItem(PlayerDropItemEvent e){
            e.setCancelled(true);
        }
       
        @EventHandler
        public void characterOpen(PlayerInteractEvent e){   
            if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
                Player p = e.getPlayer();
                try {   
                    if (p.getItemInHand().getType() == Material.CLAY_BALL) {   
                        if (ChatColor.stripColor(p.getItemInHand().getItemMeta().getDisplayName()).equalsIgnoreCase("Kit Shop")) {
                            e.setCancelled(true);
                            openInv(p);       
                        }       
                    }       
                } catch (Exception a) {}       
            }
        }
       
        @EventHandler
        public void inventoryGUI(InventoryClickEvent e){
            if (!(ChatColor.stripColor(e.getInventory().getName()).equalsIgnoreCase("Redeem"))){
                return;
            }
            Player p = (Player) e.getWhoClicked();
            e.setCancelled(true);
            if (e.getCurrentItem()==null || e.getCurrentItem().getType() == Material.AIR || !e.getCurrentItem().hasItemMeta()){
                p.closeInventory();
                return;
            }
            switch (e.getCurrentItem().getType()){
            case WOOD_SWORD:
                p.sendMessage("Hi");
                p.closeInventory();
                break;
            default:
                p.closeInventory();
                break;
            }
        }
        @EventHandler
        public void playerDeath(PlayerDeathEvent e){
            if (e.getEntity().getKiller() != null){
                Player killer = e.getEntity().getKiller();
                Player slain = e.getEntity();
                int new1 = coins.getConfig().getInt(killer.getName()) + 3;
                int new2 = coins.getConfig().getInt(slain.getName()) - 1;
                coins.getConfig().set(killer.getName(), new1);
                coins.saveConfig();
                killer.sendMessage(ChatColor.GOLD + "You killed " + slain.getName() + "! You received 3 coins!");
                killer.sendMessage(ChatColor.RED + "You can redeem these tokens for coins in the upcoming character shop! Be sure to save your tokens!");
                if (new2 != -1){
                    coins.getConfig().set(slain.getName(), new2);
                    coins.saveConfig();
                    slain.sendMessage(ChatColor.GOLD + "You were killed by " + killer.getName() + "! You lost 1 coin!");
                }
                else{
                    slain.sendMessage(ChatColor.GOLD + "You were killed by " + killer.getName() + "!");
                }
               
                coin.get(killer).setScore(new1);
                coin.get(slain).setScore(new2);
            }
            e.getDrops().clear();
        }
       
        public void openInv(Player p){
            Inventory inv = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN + "Redeem");
           
            ItemStack example = new ItemStack(Material.WOOD_SWORD);
           
            ItemMeta exampleMeta = example.getItemMeta();
            exampleMeta.setDisplayName(ChatColor.DARK_PURPLE + "EXAMPLE");
            example.setItemMeta(exampleMeta);
     
            inv.setItem(0, example);
           
            p.openInventory(inv);
           
        }
       
       
    }
     
  2. Darkpicasa U`re using OnlinePlayers on "OfflinePlayer" Field, and be sure there`s an obj with that score.
     
  3. Offline

    Darkpicasa

    I get the same error when I change the HashMap to <Player, Score>
     
  4. Offline

    SuperOriginal

  5. Offline

    Darkpicasa

    That's what I thought...

    Do you see the error?

    I've looked through a few YouTube videos, I still can't seem to solve it.

    Please help :)

    I'm new to Scoreboards :(

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

    Darkpicasa

    Bump - please help me!!!
     
Thread Status:
Not open for further replies.

Share This Page