Passing stuff through class constructor causes NPE

Discussion in 'Plugin Development' started by bowlerguy66, Nov 11, 2015.

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

    bowlerguy66

    Ok, I'm trying to use my constructor to get the main data folder. But when I do, I get this error.

    Code:
    [12:00:00 WARN]: [GunsCraft] Task #644 for GunsCraft v1.0 generated an exception
    java.lang.NullPointerException
        at me.bowlerguy66.gunscraft.PlayerData.getPlayer(PlayerData.java:48) ~[?:?]
        at me.bowlerguy66.gunscraft.PlayerData.hasName(PlayerData.java:222) ~[?:?]
        at me.bowlerguy66.gunscraft.PlayerData.hasAllData(PlayerData.java:158) ~[?:?]
        at me.bowlerguy66.gunscraft.GunScoreboard.showBoard(GunScoreboard.java:133) ~[?:?]
        at me.bowlerguy66.gunscraft.GunsCraft$4.run(GunsCraft.java:966) ~[?:?]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) ~[craftbukkit.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [craftbukkit.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:722) [craftbukkit.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [craftbukkit.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:653) [craftbukkit.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:556) [craftbukkit.jar:git-Spigot-fdc1440-53fac9f]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
    
    This is line 48 in PlayerData:
    Code:
    playerFile = new File(main.getDataFolder(), "players.yml");
    
    Constructor (open)

    Code:
    // In the PlayerData class
        private GunsCraft main;
       
        public PlayerData(GunsCraft instance) {
            this.main = instance;
        }
    
    Code:
    // In the main class
    public PlayerData pdata = new PlayerData(this);
    
     
  2. Offline

    mcdorli

    Either the main variable or the file is undefined, please post the whole class.
     
  3. Offline

    bowlerguy66

    @mcdorli Alright

    PlayerData class:
    Code:
    package me.bowlerguy66.gunscraft;
    
    import java.io.File;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.configuration.ConfigurationSection;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    
    public class PlayerData implements Listener {
    
        private GunsCraft main;
       
        public PlayerData(GunsCraft instance) {
            this.main = instance;
        }
       
        @SuppressWarnings("unused")
        private GunScoreboard gs;
       
        public PlayerData(GunScoreboard instance) {
            this.gs = instance;
        }
    
        @SuppressWarnings("unused")
        private BukkitListener bl;
       
        public PlayerData(BukkitListener instance) {
            this.bl = instance;
        }
    
        // Config
       
        File playerFile;
        FileConfiguration pFile;
       
        public FileConfiguration getPlayer() {
           
            if(pFile == null) {
    
                Bukkit.broadcastMessage("Pfile is null instanttujbg");
                           
                playerFile = new File(main.getDataFolder(), "players.yml");
               
                Bukkit.broadcastMessage("Checks");
               
                if(playerFile.exists()) {
                    Bukkit.broadcastMessage("Pfile already exists");
    
                    try {
                        pFile = YamlConfiguration.loadConfiguration(playerFile);
                        System.out.println(new Msg().symbol + ChatColor.GREEN + "Player data loaded properly");
                    } catch(Exception e) {
                        System.out.println(new Msg().symbol + ChatColor.RED + "Player data could not be loaded!");
                        e.printStackTrace();
                    }
                } else {
                    Bukkit.broadcastMessage("Pfile doesnt fucking exist");
    
                    try {
                        playerFile.createNewFile();
                        pFile = YamlConfiguration.loadConfiguration(playerFile);
                        System.out.println(new Msg().symbol + ChatColor.GREEN + "Player data created and loaded");           
                    } catch(Exception e) {
                        System.out.println(new Msg().symbol + ChatColor.RED + "Player data could not be created!");           
                        e.printStackTrace();               
                    }
                }
               
            }
           
            return pFile;
        }
       
        public void savePlayer() {
            try {
                pFile.save(playerFile);
            } catch (Exception e) {
                System.out.println(e);
            }
        }
       
        public void loadPlayerFile() {
           
            playerFile = new File(main.getDataFolder(), "players.yml");
           
            if(playerFile.exists()) {
                try {
                    pFile = YamlConfiguration.loadConfiguration(playerFile);
                    System.out.println(new Msg().symbol + ChatColor.GREEN + "Player data loaded properly");
                } catch(Exception e) {
                    System.out.println(new Msg().symbol + ChatColor.RED + "Player data could not be loaded!");
                    e.printStackTrace();
                }
            } else {
                try {
                    playerFile.createNewFile();
                    pFile = YamlConfiguration.loadConfiguration(playerFile);
                    System.out.println(new Msg().symbol + ChatColor.GREEN + "Player data created and loaded");           
                } catch(Exception e) {
                    System.out.println(new Msg().symbol + ChatColor.RED + "Player data could not be created!");           
                    e.printStackTrace();               
                }
            }       
    
        }
       
        // Listener
       
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent event) {
           
            Player p = event.getPlayer();
           
            if(!hasAllData(p)) {
                makeAllData(p);
                return;
            }
           
        }
       
        public void dataCheck() {
            Bukkit.getScheduler().scheduleSyncRepeatingTask(main, new Runnable() {
                public void run() {
                    for(Player target : Bukkit.getWorld("guncraft").getPlayers()) {
                       
                        if(!hasAllData(target)) {
                            makeAllData(target);
                            continue;
                        }
                       
                    }
                }
            }, 0L, 100L);
        }
       
        // Return methods
       
        public boolean hasAllData(Player p) {
                               
            // Checks for:
            // Name:
            // Player kills
            // Zombie kills
            // Deaths
            // Balance
            // Enabled chat
               
            // Add small booleans
               
            if(!hasName(p)) {
                return false;
            } else if(!hasPlayerKills(p)) {
                return false;
            } else if(!hasZombieKills(p)) {
                return false;
            } else if(!hasDeaths(p)) {
                return false;
            } else if(!hasBalance(p)) {
                return false;
            } else if(!hasChatEnabled(p)) {
                return false;
            } else {
                return true;
            }
                       
        }
       
        public void makeAllData(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            String playername = p.getName();
           
            if(!getPlayer().contains("Players." + uuid + ".Name")) {
                getPlayer().set("Players." + uuid + ".Name", playername);   
            }
           
            if(!getPlayer().contains("Players." + uuid + ".PlayerKills")) {
                getPlayer().set("Players." + uuid + ".PlayerKills", 0);
            }
               
            if(!getPlayer().contains("Players." + uuid + ".ZombieKills")) {
                getPlayer().set("Players." + uuid + ".ZombieKills", 0);
            }
               
            if(!getPlayer().contains("Players." + uuid + ".Deaths")) {
                getPlayer().set("Players." + uuid + ".Deaths", 0);
            }
               
            if(!getPlayer().contains("Players." + uuid + ".Balance")) {
                getPlayer().set("Players." + uuid + ".Balance", 0);
            }
               
            if(!getPlayer().contains("Players." + uuid + ".EnabledChat")) {
                getPlayer().set("Players." + uuid + ".EnabledChat", "true");
            }
               
            return;
           
        }
       
        public boolean hasName(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
    /*        if(getPlayer().equals(null)) {
                Bukkit.broadcastMessage("GetPlayer is null");
            } else if(!getPlayer().equals(null)) {
                Bukkit.broadcastMessage("GetPlayer is not null");
            } else {
                Bukkit.broadcastMessage("Last resort");
            }*/
           
            ConfigurationSection targetsec = getPlayer().getConfigurationSection("Players");
           
            if(targetsec.getKeys(false).contains("Players." + uuid + ".Name")) {
                return true;
            } else {
                return false;
            }
           
        }
       
        public void makeName(Player p) {
           
            String uuid = p.getUniqueId().toString();
            String playername = p.getName();
           
            if(hasName(p)) {
                return;
            }
           
            getPlayer().set("Players." + uuid + ".Name", playername);
            savePlayer();
            return;
           
        }
       
        public boolean hasPlayerKills(Player p) {
           
            String uuid = p.getUniqueId().toString();
            ConfigurationSection targetsec = getPlayer().getConfigurationSection("Players");
           
            if(targetsec.getKeys(false).contains("Players." + uuid + ".PlayerKills")) {
                return true;
            } else {
                return false;
            }
           
        }
       
        public void makePlayerKills(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(hasPlayerKills(p)) {
                return;
            }
           
            getPlayer().set("Players." + uuid + ".PlayerKills", 0);
            savePlayer();
            return;
           
        }
       
        public int getPlayerKills(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(!hasPlayerKills(p)) {
                makePlayerKills(p);
                return 0;
            }
           
            return getPlayer().getInt("Players." + uuid + ".PlayerKills");
           
        }
       
        public void setPlayerKills(Player p, int k) {
           
            if(!hasPlayerKills(p)) {
                return;
            }
           
            String uuid = p.getUniqueId().toString();
           
            getPlayer().set("Players." + uuid + ".PlayerKills", k);
            savePlayer();
            return;
           
        }
    
        public boolean hasZombieKills(Player p) {
           
            String uuid = p.getUniqueId().toString();
            ConfigurationSection targetsec = getPlayer().getConfigurationSection("Players");
           
            if(targetsec.getKeys(false).contains("Players." + uuid + ".ZombieKills")) {
                return true;
            } else {
                return false;
            }
           
        }
       
        public void makeZombieKills(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(hasZombieKills(p)) {
                return;
            }
           
            getPlayer().set("Players." + uuid + ".ZombieKills", 0);
            savePlayer();
            return;
           
        }
       
        public int getZombieKills(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(!hasZombieKills(p)) {
                makeZombieKills(p);
                return 0;
            }
           
            return getPlayer().getInt("Players." + uuid + ".ZombieKills");
           
        }
       
        public void setZombieKills(Player p, int k) {
           
            if(!hasZombieKills(p)) {
                return;
            }
           
            String uuid = p.getUniqueId().toString();
           
            getPlayer().set("Players." + uuid + ".ZombieKills", k);
            savePlayer();
            return;
           
        }
    
        public boolean hasDeaths(Player p) {
           
            String uuid = p.getUniqueId().toString();
            ConfigurationSection targetsec = getPlayer().getConfigurationSection("Players");
           
            if(targetsec.getKeys(false).contains("Players." + uuid + ".Deaths")) {
                return true;
            } else {
                return false;
            }
           
        }
       
        public void makeDeaths(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(hasDeaths(p)) {
                return;
            }
           
            getPlayer().set("Players." + uuid + ".Deaths", 0);
            savePlayer();
            return;
           
        }
       
        public int getDeaths(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(!hasDeaths(p)) {
                makeDeaths(p);
                return 0;
            }
                   
            return getPlayer().getInt("Players." + uuid + ".Deaths");
           
        }
       
        public void setPlayerDeaths(Player p, int d) {
           
            if(!hasDeaths(p)) {
                return;
            }
           
            String uuid = p.getUniqueId().toString();
           
            getPlayer().set("Players." + uuid + ".Deaths", d);
            savePlayer();
            return;
           
        }
    
        public boolean hasBalance(Player p) {
           
            String uuid = p.getUniqueId().toString();
            ConfigurationSection targetsec = getPlayer().getConfigurationSection("Players");
           
            if(targetsec.getKeys(false).contains("Players." + uuid + ".Balance")) {
                return true;
            } else {
                return false;
            }
           
        }
       
        public void makeBalance(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(hasBalance(p)) {
                return;
            }
           
            getPlayer().set("Players." + uuid + ".Balance", 0);
            savePlayer();
            return;
           
        }
       
        public double getBalance(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(!hasBalance(p)) {
                makeBalance(p);
                return 0;
            }
           
            return getPlayer().getDouble("Players." + uuid + ".Balance");
           
        }
       
        public boolean hasChatEnabled(Player p) {
           
            String uuid = p.getUniqueId().toString();
            ConfigurationSection targetsec = getPlayer().getConfigurationSection("Players");
           
            if(targetsec.getKeys(false).contains("Players." + uuid + ".EnabledChat")) {
                return true;
            } else {
                return false;
            }
           
        }
       
        public void makeChatEnabled(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(hasChatEnabled(p)) {
                return;
            }
           
            getPlayer().set("Players." + uuid + ".EnabledChat", "true");
            savePlayer();
            return;
           
        }
       
        public boolean getChatEnabled(Player p) {
           
            String uuid = p.getUniqueId().toString();
           
            if(!hasChatEnabled(p)) {
                makeChatEnabled(p);
                return true;
            }
           
            if(getPlayer().getString("Players." + uuid + ".EnabledChat").equalsIgnoreCase("true")) {
                return true;
            } else {
                return false;
            }
           
        }
       
    }
    
    bump

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Nov 12, 2015
  4. Offline

    Xerox262

    public PlayerData pdata =new PlayerData(this);
    Create this in your onEnable, do something like
    Code:
    public PlayerData pdata;
    
    @Override
    public void onEnable() {
        pdata = new PlayerData(this);
    }
    But you should make that PlayerData private with a getter, not public
     
  5. Offline

    blablubbabc

    If you create your PlayerData object with one of those additional constructors, your main variable will be null.
     
Thread Status:
Not open for further replies.

Share This Page