Solved NullPointerException

Discussion in 'Plugin Development' started by amatokus, Sep 1, 2015.

Thread Status:
Not open for further replies.
  1. Hi bukkit users!

    I have this piece of code:

    Code:
        JavaPlugin plugin;
            public ChestEvents(MoneyChest plugin) {
            this.plugin = plugin;
            }
    and this in my onEnable():

    Code:
            Listener ChestEventsListener = new ChestEvents(this);
            Bukkit.getServer().getPluginManager().registerEvents(ChestEventsListener, this);
    This is the problem, every time I use "plugin." the console throws a NPE:

    Code:
    [11:41:34 ERROR]: Error occurred while enabling MoneyChest v0.1 (Is it up to dat
    e?)
    java.lang.NullPointerException
            at me.amatokus8669.plugin.moneychest.ChestEvents.<init>(ChestEvents.java
    :42) ~[?:?]
            at me.amatokus8669.plugin.moneychest.MoneyChest.onEnable(MoneyChest.java
    :50) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) ~[c
    raftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:324) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:404) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugin(CraftServer.jav
    a:446) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.craftbukkit.v1_7_R3.CraftServer.enablePlugins(CraftServer.
    java:380) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.craftbukkit.v1_7_R3.CraftServer.reload(CraftServer.java:79
    9) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.Bukkit.reload(Bukkit.java:288) [craftbukkit.jar:git-Bukkit
    -1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    23) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:18
    0) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServe
    r.java:701) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchServerCommand(Craf
    tServer.java:688) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at net.minecraft.server.v1_7_R3.DedicatedServer.aB(DedicatedServer.java:
    296) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:2
    61) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:5
    58) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java
    :469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
            at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:6
    28) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-9-gaceeb44-b3091jnks]
    

    Thanks
     
  2. Offline

    mine-care

    Err we can see a very limited piece of code, a litle more please...
     
  3. My main class onEnable():

    Code:
        public void onEnable(){
            chests = new ArrayList<String>();
            LF = new LocationFiles(this);
             getLogger().info("=============================================");
             getLogger().info("If this is your first time using this plugin:");
             getLogger().info("Please configure the plugin.");
             getLogger().info("=============================================");
            Listener ChestEventsListener = new ChestEvents(this);
            Bukkit.getServer().getPluginManager().registerEvents(ChestEventsListener, this);
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            this.saveDefaultConfig();       
            
            if (!setupEconomy()) {
                log.severe(String.format("[%s] - Economy Disabled due to no Vault dependency found!",getDescription().getName()));
                return;
            }else{
                ecoworks = true;
            }
           
           
            try {
                cfile.load(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InvalidConfigurationException e) {
                e.printStackTrace();
            }
           
            if(cfile.getList("money_chests") != null){
            for(int l=0; l==cfile.getList("money_chests").size(); l++){
                String location = cfile.getList("money_chests").get(l).toString();
                Location loc = LF.LoadLocationFile(location);
                if(loc != null){
                Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
                    @Override
                    public void run() {
                    loc.getWorld().playEffect(loc, Effect.ENDER_SIGNAL, 10);
                    }
                },20, 40);
            }
            }
            }else{
                cfile.addDefault("money_chests", chests);
            }
        }
    My secondary class:

    Code:
    package me.amatokus8669.plugin.moneychest;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    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.block.Action;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.inventory.InventoryCloseEvent;
    import org.bukkit.event.inventory.InventoryType;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.world.WorldLoadEvent;
    import org.bukkit.inventory.DoubleChestInventory;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;
    
    
    
    public class ChestEvents implements Listener {
       
       
        LocationFiles LF;
        JavaPlugin plugin;
            public ChestEvents(MoneyChest plugin) {
            this.plugin = plugin;
            LF = new LocationFiles(plugin);
            }
           
    
       
        public File file = new File(plugin.getDataFolder()+File.separator+"Chests"+File.separator+"chests.yml");
        public FileConfiguration cfile = YamlConfiguration.loadConfiguration(file);
       
        String currency = plugin.getConfig().getString("currency");
        HashMap<String, Integer> solditemsmap = new HashMap<String, Integer>();
        ArrayList<String> solditems = new ArrayList<String>();
        Double totalprice = 0.0;
        private String material;
        private Integer quantity;
        private Double itemprice;
        String announcement = ChatColor.BOLD+""+ChatColor.GOLD+"["+ChatColor.YELLOW+"Money Chest"+ChatColor.GOLD+"]"+ChatColor.RESET+": ";
        @SuppressWarnings("deprecation")
       
        @EventHandler
        public void onChestOpenEvent(PlayerInteractEvent event){
            if(event.getAction().equals(Action.RIGHT_CLICK_BLOCK)){
            Player player = plugin.getServer().getPlayer(event.getPlayer().getName().toString());
            player.sendMessage("event works");
            Block block = event.getPlayer().getTargetBlock(null, 100);
            if(event.getPlayer().hasPermission("moneychest.use")){
                player.sendMessage("has permission");
                if(block.getType().equals(Material.CHEST)){
                    event.setCancelled(true);
                    player.sendMessage("is chest");
                    if(LF.isDoubleChest(block) == true){
                        player.sendMessage("is double chest");
                        Location loc = LF.getDoubleChestLocation(block);
                        if(cfile.getList("money_chests").contains(loc)){
                            player.sendMessage("is in chest list");
                            Inventory inventory = Bukkit.createInventory(event.getPlayer(), 54, "Money chest");
                        player.openInventory(inventory);
                        }
                    }else{
                        player.sendMessage("is single chest");
                        Location loc = block.getLocation();
                        if(cfile.getList("money_chests").contains(loc)){
                            player.sendMessage("is in chest list");
                            Inventory inventory = Bukkit.createInventory(event.getPlayer(), 27, "Money chest");
                        player.openInventory(inventory);
                        }
                    }
                }
            }else{
                event.setCancelled(true);
                player.sendMessage(announcement + "You are not allowed to open this chest.");
                }
            }
        }
       
        @EventHandler
        public void onChestCloseEvent(InventoryCloseEvent event){
            Player player = plugin.getServer().getPlayer(event.getPlayer().getName());
            Block block = event.getPlayer().getTargetBlock(null, 100);
            player.sendMessage("0");
            if(event.getInventory() instanceof DoubleChestInventory || event.getInventory().getType().equals(InventoryType.CHEST)){
                String chestlocation = null;
                player.sendMessage("1");
                if(LF.isDoubleChest(block)){
                    player.sendMessage("2");
                chestlocation = LF.getDoubleChestLocation(block).toString();
                }else{
                    player.sendMessage("3");
                chestlocation = block.getLocation().toString();
                }
                player.sendMessage("4");
                player.sendMessage(chestlocation);
                if(cfile.getList("money_chests").contains(chestlocation)){
                    player.sendMessage("5");
                    if(event.getInventory().getContents().length!=0){
                        player.sendMessage("6");
                        for(int s=0; s<event.getInventory().getSize(); s++){
                            player.sendMessage("7");
                            if(event.getInventory().getItem(s)!=null){
                                player.sendMessage("8");
                                ItemStack item = event.getInventory().getItem(s);
                                material = item.getType().toString();
                                quantity = item.getAmount();
                                itemprice = plugin.getConfig().getDouble(material);
                                if(solditems.contains(material)){
                                    player.sendMessage("9");
                                    solditemsmap.replace(material, solditemsmap.get(material)+quantity);
                                }else{
                                    player.sendMessage("10");
                                    solditemsmap.put(material, quantity);
                                    solditems.add(material);
                                }
                                totalprice = totalprice + itemprice;
                            }
                        }
    
                        if(quantity!=null && material!=null && itemprice!=null){
                            player.sendMessage("11");
                            Integer itemsamount = solditemsmap.size();
                            for(int i=0; i<itemsamount; i++){
                                player.sendMessage("12");
                                String mat = solditems.get(i);
                                Integer qua = solditemsmap.get(mat);
                                Double pri = plugin.getConfig().getDouble(mat);
                                player.sendMessage(announcement+ChatColor.GOLD+ChatColor.BOLD+pri*qua+ChatColor.GREEN+": "+ChatColor.RESET+ChatColor.GREEN+"(x"+ChatColor.GOLD+qua+" "+mat+ChatColor.GREEN+")");
                            }
                            MoneyChest.econ.depositPlayer(event.getPlayer().getName(), totalprice);
                            player.sendMessage(announcement+ChatColor.GOLD+ChatColor.BOLD+totalprice+ChatColor.DARK_GREEN+": (Total)");
                            totalprice = 0.0;
                            event.getInventory().clear();
                            solditemsmap.clear();
                            solditems.clear();
                            material = null;
                            quantity = null;
                            itemprice = null;
                        }
                    }
                }
            }
            }
        @EventHandler
        public void onChestBreakEvent(BlockBreakEvent event){
            Block block = event.getBlock();
            String loc = null;
            if(LF.isDoubleChest(block)){
                loc = LF.getDoubleChestLocation(block).toString();
            }else{
                loc = block.getLocation().toString();
            }
            if(cfile.getList("money_chests").contains(loc)){
                if(event.getPlayer().hasPermission("moneychest.break")){
                MoneyChest.chests.remove(loc);
                cfile.set("money_chests", MoneyChest.chests);
                event.getPlayer().sendMessage(announcement+"Money chest removed.");
            }else{
                event.setCancelled(true);
            }
        }
        }
    }
    
    @mine-care
     
  4. Offline

    SuperSniper

    @amatokus
    Code:
    at me.amatokus8669.plugin.moneychest.ChestEvents.<init>(ChestEvents.java
    :42) ~[?:?]
            at me.amatokus8669.plugin.moneychest.MoneyChest.onEnable(MoneyChest.java
    :50) ~[?:?]
    
    May you show us Line 50 of MoneyChest?
     
  5. Offline

    raGan.

    Code:
    public File file = new File(plugin.getDataFolder()+File.separator+"Chests"+File.separator+"chests.yml");
    Fields are initialized before constructor is run, and you are trying to use field "plugin" here, before you initialize it in constructor.

    This piece of error is a hint
    Code:
    at me.amatokus8669.plugin.moneychest.ChestEvents.<init>(ChestEvents.java :42)
     
  6. @SuperSniper

    Code:
            Listener ChestEventsListener = new ChestEvents(this);



    @raGan. What do you mean?
     
  7. Offline

    mine-care

    I think that they are initialised in the constructor but on the top part, static are the ones to be initialised upon class loading.
    But still if the instance is initialised after the field then it wil throw an npe
    @amatokus
     
  8. Offline

    meguy26

    @amatokus
    He means that you are calling the plugin variable before the plugin variable has been set.

    You must define the file within onEnable
     
  9. Thanks, solved.
     
Thread Status:
Not open for further replies.

Share This Page