Solved Null Pointer Exception with external commands

Discussion in 'Plugin Development' started by ZXSkelobrine, Jan 3, 2014.

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

    ZXSkelobrine

    I am trying to make a plugin that is like essentials but my own. It is more of a learning thing but I would like to make it work and give it to a few of my friends. I am having an issue when adding in commands from external classes.

    My main class is here:
    Revolve.java (open)

    Code:java
    1. @SuppressWarnings({"WeakerAccess", "CanBeFinal"})
    2. public class Revolve extends JavaPlugin {
    3. public Logger log = getLogger();
    4. Revolve thistosend = this;
    5. Public pub = new Public();
    6.  
    7. @Override
    8. //TODO Get newbreak crash fixed
    9. //getCommand("newbreak").setExecutor(new NewBreak(thistosend));
    10. //TODO Get newfollow crash fixed
    11. //getCommand("newfollow").setExecutor(new NewFollow(thistosend));
    12. public void onEnable() {
    13. getLogger().info("Server Manager is enabling");
    14. getLogger().info("Waking up - enabling listeners");
    15. getServer().getPluginManager().registerEvents(new NewFollow(thistosend), thistosend);
    16. getLogger().info("Waking up - enabling external commands");
    17. getCommand("teleport").setExecutor(new NewBreak(thistosend));
    18. getCommand("food").setExecutor(new Food());
    19. getCommand("lift").setExecutor(new Lift(thistosend));
    20. getLogger().info("Done");
    21. getLogger().info("Waking up - getting config ready");
    22.  
    23. getLogger().info("Done");
    24.  
    25. getLogger().info("And we are ready! Patrolling");
    26. }
    27.  
    28. public void onDisable() {
    29.  
    30. }
    31.  
    32. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    33.  
    34. return false;
    35. }
    36. }
    37.  


    And as you can see at the top I am getting it with one other class (The break command is something different - I am not have the same issue with that
    The error I am getting in the console is as follows
    Console Error (open)
    [16:14:00 ERROR]: Error occurred while enabling Server Manager v0.0.1 (Is it up
    to date?)
    java.lang.NullPointerException
    at zx.skelobrine.server.manager.central.Revolve.onEnable(Revolve.java:35
    ) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:218) ~[c
    raftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:384) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugin(CraftServer.jav
    a:298) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at org.bukkit.craftbukkit.v1_7_R1.CraftServer.enablePlugins(CraftServer.
    java:280) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.m(MinecraftServer.java:3
    42) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.g(MinecraftServer.java:3
    19) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.a(MinecraftServer.java:2
    75) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at net.minecraft.server.v1_7_R1.DedicatedServer.init(DedicatedServer.jav
    a:175) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :424) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]
    at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-1-gbafd450-b2975jnks]

    The line in question is:
    Code:java
    1. getCommand("food").setExecutor(new Food());

    The class Food is:
    Food.java (open)

    Code:
    package zx.skelobrine.server.manager.external.commands;
     
    import com.google.common.collect.Lists;
    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.inventory.ItemStack;
    import zx.skelobrine.server.manager.Public;
    import zx.skelobrine.server.manager.central.Revolve;
     
    import java.util.List;
    //TODO Finish all methods - Find list of all foods
     
    /**
    * Created by Ryan.D on 01/01/14.
    * Created for ${PROJECT_NAME} at 03/01/2014
    */
    @SuppressWarnings({"WeakerAccess", "CanBeFinal"})
    public class Food implements CommandExecutor {
        Public pub = new Public();
     
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if (command.getName().equalsIgnoreCase("food")) {
                if (sender instanceof Player) {
                    Player player = (Player) sender;
                    if (args.length == 1) {
                        if (args[0].equalsIgnoreCase("all")) {
                            for (int i = 0; i<allFoods().toArray().length;i++) {
                                player.getInventory().addItem(allFoods().get(i));
                            }
                        }
                        if (args[0].equalsIgnoreCase("set")){
                            if (pub.checkInt(args[1])){
                                int setVal = Integer.parseInt(args[1]);
                                if (setVal < 20){
                                    player.setFoodLevel(setVal);
                                }else {
                                    pub.sendToPlayer("Food", "Hunger value must be under 20", player);
                                }
                            }else {
                                pub.sendToPlayer("Food", "Please specify an int", player);
                            }
                        }else {
                            pub.usage(player, 3);
                        }
                    } else if (args.length == 0) {
                        player.setFoodLevel(20);
                    } else if (args.length == 2) {
                        if (args[0].equalsIgnoreCase("all")) {
                            player.getInventory().addItem(getFood(args[1]));
                        }
     
                    } else {
                        pub.usage(player, 3);
                    }
                }
            }
            return false;
        }
     
        public ItemStack getFood(String food) {
            ItemStack stack = new ItemStack(Material.COOKIE, 64);
            if (food.equalsIgnoreCase("bakedPotato")) {
                stack = new ItemStack(Material.BAKED_POTATO, 64);
            }
            if (food.equalsIgnoreCase("bread")) {
                stack = new ItemStack(Material.BREAD, 64);
            }
            if (food.equalsIgnoreCase("cake")) {
                stack = new ItemStack(Material.CAKE_BLOCK, 64);
            }
            if (food.equalsIgnoreCase("carrot")) {
                stack = new ItemStack(Material.CARROT, 64);
            }
            if (food.equalsIgnoreCase("cookedChicken")) {
                stack = new ItemStack(Material.COOKED_CHICKEN, 64);
            }
            if (food.equalsIgnoreCase("cookedFish")) {
                stack = new ItemStack(Material.COOKED_FISH, 64);
            }
            if (food.equalsIgnoreCase("cookedPork")) {
                stack = new ItemStack(Material.GRILLED_PORK, 64);
            }
            if (food.equalsIgnoreCase("cookie")) {
                stack = new ItemStack(Material.COOKIE, 64);
            }
            if (food.equalsIgnoreCase("goldenApple")) {
                stack = new ItemStack(Material.GOLDEN_APPLE, 64);
            }
            if (food.equalsIgnoreCase("goldenCarrot")) {
                stack = new ItemStack(Material.GOLDEN_CARROT, 64);
            }
            if (food.equalsIgnoreCase("melon")) {
                stack = new ItemStack(Material.MELON, 64);
            }
            if (food.equalsIgnoreCase("mushroomStew") || food.equalsIgnoreCase("mushroomSoup")) {
                stack = new ItemStack(Material.MUSHROOM_SOUP, 64);
            }
            if (food.equalsIgnoreCase("poisonedPotato")) {
                stack = new ItemStack(Material.POISONOUS_POTATO, 64);
            }
            if (food.equalsIgnoreCase("potato")) {
                stack = new ItemStack(Material.POTATO, 64);
            }
            if (food.equalsIgnoreCase("pumpkinPie")) {
                stack = new ItemStack(Material.PUMPKIN_PIE, 64);
            }
            if (food.equalsIgnoreCase("redApple")) {
                stack = new ItemStack(Material.APPLE, 64);
            }
            if (food.equalsIgnoreCase("rawBeef")) {
                stack = new ItemStack(Material.RAW_BEEF, 64);
            }
            if (food.equalsIgnoreCase("rawChicken")) {
                stack = new ItemStack(Material.RAW_CHICKEN, 64);
            }
            if (food.equalsIgnoreCase("rawFish")) {
                stack = new ItemStack(Material.RAW_FISH, 64);
            }
            if (food.equalsIgnoreCase("rawPork")) {
                stack = new ItemStack(Material.PORK, 64);
            }
            if (food.equalsIgnoreCase("rottenFlesh")) {
                stack = new ItemStack(Material.ROTTEN_FLESH, 64);
            }
            if (food.equalsIgnoreCase("spiderEye")) {
                stack = new ItemStack(Material.SPIDER_EYE, 64);
            }
            if (food.equalsIgnoreCase("steak")) {
                stack = new ItemStack(Material.COOKED_BEEF, 64);
            }
     
     
            return stack;
        }
     
        public List<ItemStack> allFoods() {
            List<ItemStack> stacks = Lists.newArrayList();
                stacks.add(new ItemStack(Material.BAKED_POTATO, 64));
                stacks.add(new ItemStack(Material.BREAD, 64));
                stacks.add(new ItemStack(Material.CAKE_BLOCK, 64));
                stacks.add(new ItemStack(Material.CARROT, 64));
                stacks.add(new ItemStack(Material.COOKED_CHICKEN, 64));
                stacks.add(new ItemStack(Material.COOKED_FISH, 64));
                stacks.add(new ItemStack(Material.GRILLED_PORK, 64));
                stacks.add(new ItemStack(Material.COOKIE, 64));
                stacks.add(new ItemStack(Material.GOLDEN_APPLE, 64));
                stacks.add(new ItemStack(Material.GOLDEN_CARROT, 64));
                stacks.add(new ItemStack(Material.MELON, 64));
                stacks.add(new ItemStack(Material.MUSHROOM_SOUP, 64));
                stacks.add(new ItemStack(Material.POISONOUS_POTATO, 64));
                stacks.add(new ItemStack(Material.POTATO, 64));
                stacks.add(new ItemStack(Material.PUMPKIN_PIE, 64));
                stacks.add(new ItemStack(Material.APPLE, 64));
                stacks.add(new ItemStack(Material.RAW_BEEF, 64));
                stacks.add(new ItemStack(Material.RAW_CHICKEN, 64));
                stacks.add(new ItemStack(Material.RAW_FISH, 64));
                stacks.add(new ItemStack(Material.PORK, 64));
                stacks.add(new ItemStack(Material.ROTTEN_FLESH, 64));
                stacks.add(new ItemStack(Material.SPIDER_EYE, 64));
                stacks.add(new ItemStack(Material.COOKED_BEEF, 64));
     
            return stacks;
        }
    }
    

    Thanks in advance.
    ~Ryan
     
  2. Offline

    Nateb1121

    Just a guess, I think when you instantiate a new Food() you need to pass it an instance of your plugin. Simply put you should change

    getCommand("food").setExecutor(new Food());
    to
    getCommand("food").setExecutor(new Food(thistosend));

    On a side note, everywhere you put thistosend you can just put 'this'. You don't have to, but it would save a slight amount of memory, but nothing noticeable.
     
  3. Offline

    ZXSkelobrine


    I am still getting the same error - I have added in the constructor
    Code:java
    1. public Food(Revolve instance){
    2. plugin = instance;
    3. }

    I also have a revolve variable called plugin but I still get the same error. Any ideas?
    P.S. Your profile image is awesome
     
  4. Offline

    Nateb1121


    Is that constructure the same as the ones you use in the other command handlers?
     
  5. Offline

    ZXSkelobrine

    Yes but strangely I have changed it slightly and it seems that the error has changed to my lift command.
    The lift class is:
    Lift.java (open)

    Code:java
    1. package zx.skelobrine.server.manager.external.commands;
    2.  
    3. import org.bukkit.Location;
    4. import org.bukkit.Material;
    5. import org.bukkit.block.Block;
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandExecutor;
    8. import org.bukkit.command.CommandSender;
    9. import org.bukkit.configuration.Configuration;
    10. import org.bukkit.entity.Player;
    11. import zx.skelobrine.server.manager.Public;
    12. import zx.skelobrine.server.manager.central.Revolve;
    13.  
    14. import java.util.logging.Logger;
    15.  
    16. @SuppressWarnings({"WeakerAccess", "CanBeFinal"})
    17. public class Lift implements CommandExecutor {
    18. Logger log = new Revolve().getLogger();
    19. Configuration config;
    20. Revolve plugin;
    21. Public pub = new Public();
    22.  
    23. public Lift(Revolve instance) {
    24. plugin = instance;
    25. }
    26.  
    27. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    28. if (command.getName().equalsIgnoreCase("lift")) {
    29. if (sender instanceof Player) {
    30. Player player = (Player) sender;
    31. lift(player);
    32.  
    33. }
    34. }
    35. return false;
    36. }
    37.  
    38. private void lift(Player player) {
    39. Location loc = player.getLocation();
    40. for (int i = 0; i<100;i++){
    41. if (!gb(loc).getType().equals(Material.AIR)){
    42. loc.setY(loc.getY() + 1);
    43. player.teleport(loc);
    44. }else {
    45. loc.setY(loc.getY() + 1);
    46. }
    47. }
    48. }
    49. public Block gb(Location loc){
    50. return loc.getWorld().getBlockAt(loc);
    51. }
    52. }
    53.  



    Never mind - I just realised that I forgot to put them in my plugin.yml so I think that it why it was getting null because the commands weren't actually there.
    Thanks for the help though, I feel really silly right now :oops:

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

    Nateb1121

Thread Status:
Not open for further replies.

Share This Page