Need help

Discussion in 'Plugin Help/Development/Requests' started by Ziron5, Feb 9, 2015.

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

    Ziron5

    Hi,

    I am tyring to give the Location of a block the player broke to a getter via listener.
    The Listener registers the block and hands over it's coords and world to a setter wich sets the Location. At the end the getter can take the Location as a variable and take it wherever I want. But when I trys to use getLoc1() I get the NullPointerException as if the setter never touched the loc1 variable.
    Heres the code of my EventListener:

    EventListener (open)

    Code:
    package org.Ziron5.main;
    
    import net.md_5.bungee.api.ChatColor;
    
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    
    public class BlockEventListener implements Listener {
    
        Location loc1;
        Location loc2;
    
        public BlockEventListener(main plugin)
        {
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
        }
    
        public BlockEventListener() {
        }
    
        int counter = 1;
    
    
    
    
        private void setLoc1(World world, int x, int y, int z)
        {
            this.loc1 = new Location (world, x, y, z);
        }
        private void setLoc2(World world, int x, int y, int z)
        {
            this.loc2 = new Location (world, x, y, z);
    
        }
    
        boolean validarea;
    
        // Get Location 1
        @EventHandler
        public Location onBlockBreak1(BlockBreakEvent ev)
        {
    
            if(counter == 1)
            {
                Player p = ev.getPlayer();
                Block b = ev.getBlock();
                if(p.getInventory().getItemInHand().getType().equals(Material.WOOD_HOE))
                {
                    ev.setCancelled(true);
                    if(p.hasPermission("ckb.editslots"))
                    {
                        ev.setCancelled(true);
                        //This feeds the setter all values of the broken block  
                        p.sendMessage(ChatColor.AQUA + "Selector 1" + ChatColor.GOLD + " set at X: " + b.getX() + " Y: " + b.getY() + " Z: " + b.getZ() + " Hit again to set selector 2.");
                        this.setLoc1(b.getWorld(), b.getX(), b.getY(), b.getZ());
                        counter = 1;
                        validarea = false;
    
                    }
    
                }
                return loc1;
            }
            else
            {
                return null;
            }
        }
        //Get Location 2
        @EventHandler
        public Location onBlockBreak2(BlockBreakEvent ev)
        {
            if(counter == 0)
            {
                Player p = ev.getPlayer();
                Block b = ev.getBlock();
                if(p.getInventory().getItemInHand().getType().equals(Material.WOOD_HOE))
                {
                    if(p.hasPermission("ckb.editslots"))
                    {
                        ev.setCancelled(true);
                        p.sendMessage(ChatColor.GREEN + "Selector 2" + ChatColor.GOLD +  " set at X: " + b.getX() + " Y: " + b.getY() + " Z: " + b.getZ() + " Hit again to set selector 1.");
                        this.setLoc2(b.getWorld(), b.getX(), b.getY(), b.getZ());
                        counter = 0;
                        // Check Area Size and set validarea
                        if(loc1.getBlockX() -  loc2.getBlockX() >= 3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockZ() - loc2.getBlockZ() >= 3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockX() -  loc2.getBlockX() <= -3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockZ() - loc2.getBlockZ() <= -3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockY() - loc2.getBlockY() != 0)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area that is in more than 1 Y-layer!");
                            validarea = false;
                        }
                        else if(loc1.getBlockZ() - loc2.getBlockZ() != 0)
                        {
                            if(loc1.getBlockX() - loc2.getBlockX() != 0)
                            {
                                p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                                validarea = false;
                            }
                        } else validarea = true;
                    }
                }
                return loc2;
    
            }
            else
            {
                return null;
            }
        }
        // Getters and Setters
        public Location getLoc1() {
            return loc1;
        }
    
    
    
        public Location getLoc2() {
            return loc2;
        }
    
        // Switch counter
        @EventHandler
        public void switcher(BlockBreakEvent ev) throws InterruptedException
        {
            Player p = ev.getPlayer();
            if(p.getInventory().getItemInHand().getType().equals(Material.WOOD_HOE))
            {
                Thread.sleep(500);
                if(counter == 1)
                {
                    counter = 0;
                } else
                {
                    counter = 1;
                }
            }
        }
    
    
    
    
    
    }
    


    The error messgae:
    Error (open)

    Code:
    [17:23:43] [Server thread/INFO]: Ziron5 issued server command: /ckb setbaseslot red
    [17:23:43] [Server thread/ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'ckb' in plugin ColorKeyBattle v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[start.jar:git-Spigot-952179b-43207df]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[start.jar:git-Spigot-952179b-43207df]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServer.java:646) ~[start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerConnection.java:1115) [start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:950) [start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:26) [start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:53) [start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [start.jar:git-Spigot-952179b-43207df]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_31]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_31]
        at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:685) [start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:623) [start.jar:git-Spigot-952179b-43207df]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:526) [start.jar:git-Spigot-952179b-43207df]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_31]
    Caused by: java.lang.NullPointerException
        at org.Ziron5.main.main.onCommand(main.java:88) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[start.jar:git-Spigot-952179b-43207df]
        ... 14 more
    


    The command /ckb setbaseslot red I issued looks like this and is in main class:

    Command Code (open)

    Code:
    if(args[0].equalsIgnoreCase("setbaseslot"))
                        {
                            if(args[1].equalsIgnoreCase("red"))
                            {
                                slots[0] = main.getBlockListener().getLoc1();
                                slots[1] = main.getBlockListener().getLoc2();
                                p.sendMessage(ChatColor.RED + "Red" + ChatColor.GOLD + "basespawner slot set at X:" + slots[0].getBlockX() + " Y:" + slots[0].getBlockY() + " Z:" + slots[0].getBlockZ());
                            }
                        }


    I've been trying to make the setters actually set the Location for hours now and I can't figure out why it wont... I hope someone can provide a solution or point out the mistake. Probably it's an obvious and stupid thing that has been hiding from my eyes the last couple of hours :D

    Thanks in advance!

    Ziron5

    edit:

    Whole main class (open)

    Code:
    package org.Ziron5.main;
    
    import java.util.logging.Logger;
    
    import net.md_5.bungee.api.ChatColor;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class main extends JavaPlugin
    {
        Logger pluginLogger = Bukkit.getLogger();
    
        @Override
        public void onEnable()
        {
            pluginLogger.info("ColorKeyBattle Plugin activated.");
            new BlockEventListener(this);
            loadConfig();
    
        }
    
        @Override
        public void onDisable()
        {
            pluginLogger.info("ColorKeyBattle Plugin deactivated.");
        }
    
        Location[] slots = new Location[32];
    
    
        private final static BlockEventListener blockListener = new BlockEventListener();
    
        public static BlockEventListener getBlockListener()
        {
            return blockListener;
        }
    
        public boolean onCommand(CommandSender theSender, Command cmd, String commandLabel, String[] args)
        {
            if(theSender instanceof Player)
            {
                Player p = (Player) theSender;
    
                if(commandLabel.equalsIgnoreCase("ckb"))
                {
                    if(args.length == 0)              
                    {
    
                        if(p.hasPermission("ckb.ckb"))
                        {
    
                            String helpmsg = getConfig().getString("Messages.helpmsg");
                            p.sendMessage(helpmsg);
                        }
    
                    }
                    else if(args.length == 1)      
                    {
                        if(args[0].equalsIgnoreCase("setbaseslot"))
                        {
                            p.sendMessage("Not enough Arguments!");
                        }
                        if(args[0].equalsIgnoreCase("setmap"))
                        {
                            String setmapmsg = getConfig().getString("Messages.setmapmsg");
                            p.sendMessage(setmapmsg);
                        }
                        else
                        {
                            String helpmsg = getConfig().getString("Messages.helpmsg");
                            p.sendMessage(helpmsg);
                        }
    
                    } else if(args.length == 2)
                    {
                        if(args[0].equalsIgnoreCase("setbaseslot"))
                        {
                            if(args[1].equalsIgnoreCase("red"))
                            {
                                slots[0] = main.getBlockListener().getLoc1();
                                slots[1] = main.getBlockListener().getLoc2();
                                p.sendMessage(ChatColor.RED + "Red" + ChatColor.GOLD + "basespawner slot set at X:" + slots[0].getBlockX() + " Y:" + slots[0].getBlockY() + " Z:" + slots[0].getBlockZ());
                            }
                        }
                    } else p.sendMessage("Too many arguments!");
    
                }
            }
    
    
    
    
            return true;
        }
    
    
    
        private void loadConfig()
        {
            FileConfiguration cfg = this.getConfig();  
            cfg.options().copyDefaults();
            saveConfig();
        }
    }
    
     
    Last edited: Feb 9, 2015
  2. Offline

    Lilret123

    Main class?
     
  3. Offline

    Ziron5

    Edited it in

    I put a comment at line 59 of the EventListener Code where the problem is that the loc1 doesn't get set even though the setter gets all the data(world, coords) from the eventListener
     
    Last edited: Feb 9, 2015
  4. Offline

    Rocoty

    I spy with my little eye....multiple instances of a class of which you probably only wanted one. (BlockEventListener)
     
  5. Offline

    Ziron5

    I think that can't cause this. I need that method to be able to call the getters from other classes.
     
  6. Offline

    Ziron5

    Bump. Someone please?
     
  7. Offline

    mythbusterma

    @Ziron5

    Yep, the solution is simple, you just ignore it.

     
  8. Offline

    Ziron5

    I removed it. Doesn't work... Just because thats the first thing that gets your attention it isn't my solution.
     
  9. Offline

    Rocoty

    Who said removing the class altogether was the solution? Or was that not what you meant? You're not being very clear here. Can you post your updated code? What is the meaning of life?....sorry got carried away.
     
  10. Offline

    Ziron5

    42.

    And I just removed the instance of the class sry.

    main (open)
    Code:
    package org.Ziron5.main;
    
    import java.util.logging.Logger;
    
    import net.md_5.bungee.api.ChatColor;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class main extends JavaPlugin
    {
        Logger pluginLogger = Bukkit.getLogger();
    
        @Override
        public void onEnable()
        {
            pluginLogger.info("ColorKeyBattle Plugin activated.");
            new BlockEventListener(this);
            loadConfig();
    
        }
    
        @Override
        public void onDisable()
        {
            pluginLogger.info("ColorKeyBattle Plugin deactivated.");
        }
    
        Location[] slots = new Location[32];
    
    public boolean onCommand(CommandSender theSender, Command cmd, String commandLabel, String[] args)
        {
            if(theSender instanceof Player)
            {
                Player p = (Player) theSender;
    
                if(commandLabel.equalsIgnoreCase("ckb"))
                {
                    if(args.length == 0)                   
                    {
    
                        if(p.hasPermission("ckb.ckb"))
                        {
    
                            String helpmsg = getConfig().getString("Messages.helpmsg");
                            p.sendMessage(helpmsg);   
                        }
    
                    }
                    else if(args.length == 1)           
                    {
                        if(args[0].equalsIgnoreCase("setbaseslot"))
                        {
                            p.sendMessage("Not enough Arguments!");
                        }
                        if(args[0].equalsIgnoreCase("setmap"))
                        {
                            String setmapmsg = getConfig().getString("Messages.setmapmsg");
                            p.sendMessage(setmapmsg);
                        }
                        else
                        {
                            String helpmsg = getConfig().getString("Messages.helpmsg");
                            p.sendMessage(helpmsg);
                        }
    
                    } else if(args.length == 2)
                    {
                        if(args[0].equalsIgnoreCase("setbaseslot"))
                        {
                            if(args[1].equalsIgnoreCase("red"))
                            {
                                slots[0] = BlockEventListener.getLoc1();
                                slots[1] = BlockEventListener.getLoc2();
                                p.sendMessage(ChatColor.RED + "Red" + ChatColor.GOLD + "basespawner slot set at X:" + slots[0].getBlockX() + " Y:" + slots[0].getBlockY() + " Z:" + slots[0].getBlockZ());
                            }
                        }
                    } else p.sendMessage("Too many arguments!");
    
                }
            }
    
    
    
    
            return true;
        }
    
    
    
        private void loadConfig()
        {
            FileConfiguration cfg = this.getConfig();       
            cfg.options().copyDefaults();
            saveConfig();
        }
    }
    


    BlockEventListener (open)

    Code:
    package org.Ziron5.main;
    
    import net.md_5.bungee.api.ChatColor;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    
    public class BlockEventListener implements Listener {
    
    
    
        public BlockEventListener(main plugin)
        {
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
        }
    
    
       
        public static Location getLoc1() {
            Bukkit.getServer().getPlayer("Ziron5").sendMessage("get1");
            return loc11;
        }
    
    
    
        public static Location getLoc2() {
            Bukkit.getServer().getPlayer("Ziron5").sendMessage("get2");
            return loc22;
        }
    
    
        int counter = 1;
        Location loc1;
        Location loc2;
        static Location loc22;
        static Location loc11;
        boolean validarea;
    
        private void setLoc1(World world, int x, int y, int z)
        {
            loc1.setWorld(world);
            loc1.setX(x);
            loc1.setY(y);
            loc1.setZ(z);
            Bukkit.getServer().getPlayer("Ziron5").sendMessage("set1 to" + loc1.getBlockX() + loc1.getBlockY() + loc1.getBlockZ());
            Bukkit.getServer().getPlayer("Ziron5").sendMessage("set1 to");
            }
        private void setLoc2(World world, int x, int y, int z)
        {
            loc2.setWorld(world);
            loc2.setX(x);
            loc2.setY(y);
            loc2.setZ(z);
            Bukkit.getServer().getPlayer("Ziron5").sendMessage("set2 to" + loc2.getBlockX() + loc2.getBlockY() + loc2.getBlockZ());
            Bukkit.getServer().getPlayer("Ziron5").sendMessage("set2 to");
       
        }
    
        // Get Location 1
        @EventHandler
        public Location onBlockBreak1(BlockBreakEvent ev)
        {
    
            if(counter == 1)
            {
                Player p = ev.getPlayer();
                Block b = ev.getBlock();
                if(p.getInventory().getItemInHand().getType().equals(Material.WOOD_HOE))
                {
                    ev.setCancelled(true);
                    if(p.hasPermission("ckb.editslots"))
                    {
                        ev.setCancelled(true);
                        p.sendMessage(ChatColor.AQUA + "Selector 1" + ChatColor.GOLD + " set at X: " + b.getX() + " Y: " + b.getY() + " Z: " + b.getZ() + " Hit again to set selector 2.");
                        this.setLoc1(b.getWorld(), b.getX(), b.getY(), b.getZ());
                        p.sendMessage("ok");
                        loc1 = loc11;
                        counter = 1;
                        validarea = false;
    
                    }
    
                }
                return loc1;
            }
            else
            {
                return null;   
            }
        }
       
        //Get Location 2
        @EventHandler
        public Location onBlockBreak2(BlockBreakEvent ev)
        {
            if(counter == 0)
            {
                Player p = ev.getPlayer();
                Block b = ev.getBlock();
                if(p.getInventory().getItemInHand().getType().equals(Material.WOOD_HOE))
                {
                    if(p.hasPermission("ckb.editslots"))
                    {
                        ev.setCancelled(true);
                        p.sendMessage(ChatColor.GREEN + "Selector 2" + ChatColor.GOLD +  " set at X: " + b.getX() + " Y: " + b.getY() + " Z: " + b.getZ() + " Hit again to set selector 1.");
                        this.setLoc2(b.getWorld(), b.getX(), b.getY(), b.getZ());
                        p.sendMessage("ok");
                        loc2 = loc22;
                        counter = 0;
                        // Check Area Size and set validarea
                        if(loc1.getBlockX() -  loc2.getBlockX() >= 3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockZ() - loc2.getBlockZ() >= 3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockX() -  loc2.getBlockX() <= -3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockZ() - loc2.getBlockZ() <= -3)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                            validarea = false;
                        }
                        else if(loc1.getBlockY() - loc2.getBlockY() != 0)
                        {
                            p.sendMessage(ChatColor.RED + "You can't set an area that is in more than 1 Y-layer!");
                            validarea = false;
                        }
                        else if(loc1.getBlockZ() - loc2.getBlockZ() != 0)
                        {
                            if(loc1.getBlockX() - loc2.getBlockX() != 0)
                            {
                                p.sendMessage(ChatColor.RED + "You can't set an area bigger than 3 blocks!");
                                validarea = false;
                            }
                        } else validarea = true;
                    }
                }
                return loc2;
    
            }
            else
            {
                return null;
            }
        }
    
        // Switch counter
        @EventHandler
        public void switcher(BlockBreakEvent ev) throws InterruptedException
        {
            Player p = ev.getPlayer();
            if(p.getInventory().getItemInHand().getType().equals(Material.WOOD_HOE))
            {
                Thread.sleep(200);
                if(counter == 1)
                {
                    counter = 0;
                } else
                {
                    counter = 1;
    
                }
            }
    
        }
    
    
    
    
    
    }
    


    I am new to Java. Appearently you can only call methods from other classes that are static but I can't make them static since my code wont work then. So the only problem is to get loc1 and loc2 from BlockEventListener to main
     
  11. Moved to Bukkit Alternates.
     
    Last edited: Feb 11, 2015
  12. Offline

    Ziron5

Thread Status:
Not open for further replies.

Share This Page