Getting a strange error!

Discussion in 'Spigot Plugin Development' started by TheL0w3R, Jun 16, 2016.

  1. Hi, i'm getting this strange error on my plugin:
    Code (Text):
    [10:03:20] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to HPWizard v0.6.2 BETA
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at org.bukkit.craftbukkit.v1_9_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:231) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at org.bukkit.craftbukkit.v1_9_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:198) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at org.bukkit.craftbukkit.v1_9_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:194) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.PlayerConnection.a(PlayerConnection.java:944) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:27) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:1) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_71]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_71]
        at net.minecraft.server.v1_9_R2.SystemUtils.a(SourceFile:45) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.MinecraftServer.D(MinecraftServer.java:726) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.DedicatedServer.D(DedicatedServer.java:399) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.MinecraftServer.C(MinecraftServer.java:665) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at net.minecraft.server.v1_9_R2.MinecraftServer.run(MinecraftServer.java:564) [spigot-1.9.4.jar:git-Spigot-8a048fe-71e5248]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_71]
    Caused by: java.lang.NullPointerException
    The problem is that it doesn't give me the class that's causing the error, it just says that, how can I see where's the error? The plugin has a lot of code, it's impossible for me to check it all manually :/

    Thanks!
     
  2. I don't have any FutureTask class in my plugin :/
     
  3. I know, i derped massively there, don't listen to that.
    Can you post your PlayerInteractEvent code please
     
  4. Please, oh please, give us your fucking code before asking for help :rolleyes:
     
  5. Sorry, you're right guys, here's the code, I advise you that it has a lot of references to other classes:
    Code (Text):
        @EventHandler
        public void onPlayerCast(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            boolean spellsActive = (boolean) cm.getValue("general.enable_spells");
            boolean fluActive = (boolean) cm.getValue("general.enable_flu_system");
            if (p.getInventory().getItemInMainHand() == null)
                return;
            if (!(p.getInventory().getItemInMainHand().hasItemMeta()))
                return;
            if (p.getInventory().getItemInMainHand().getItemMeta().getLore() == null)
                return;
            if(p.getInventory().getItemInMainHand().getType() == Material.STICK || p.getInventory().getItemInMainHand().getType() == Material.RECORD_3 || p.getInventory().getItemInMainHand().getType() == Material.RECORD_6 || p.getInventory().getItemInMainHand().getType() == Material.RECORD_10 || p.getInventory().getItemInMainHand().getType() == Material.RECORD_12 || p.getInventory().getItemInMainHand().getType() == Material.RECORD_4) {
                if(p.getInventory().getItemInMainHand().getItemMeta().getLore().size() <= 0)
                    return;
                if(spellsActive) {
                    boolean holdingWand = false;
                    Wand wandType = null;
                    String itemName = p.getInventory().getItemInMainHand().getItemMeta().getLore().get(0);
                    String metaLore = null;
                    String selectedSpell = null;
                    Wizard current = wizardManager.getWizardFromPlayer(p);
                    boolean isMuggle = (current.getHouseType() == HouseType.Muggle);
                    for (Wand wand : wandManager.getWands()) {
                        if (wand.getName().equals(itemName)) {
                            if(wand.getItem().equals(p.getInventory().getItemInMainHand().getType())) {
                                holdingWand = true;
                                wandType = wand;
                                itemName = p.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
                                selectedSpell = itemName.substring(itemName.indexOf("[" + ChatColor.DARK_GREEN) + 3, itemName.indexOf(ChatColor.BLUE + "]"));
                            }
                        }
                    }
                    if (e.getAction() == Action.LEFT_CLICK_AIR) {
                        if (holdingWand) {
                            if(!isMuggle) {
                                if(current.hasSpell(selectedSpell)) {
                                    if(main.wgplugin != null) {
                                        RegionManager rm = main.wgplugin.getRegionManager(p.getWorld());
                                        ApplicableRegionSet ars = rm.getApplicableRegions(p.getLocation());
                                        if(ars.size() == 0) {
                                            for(String str : (List<String>) cm.getValue("worldguard.spells.disabled_regions")) {
                                                String[] master = str.split(":");
                                                String rgName = master[0].split(",")[0];
                                                String world = master[0].split(",")[1];
                                                String[] spells = master[1].split(";");
                                                if(rgName.equals("__global__") && p.getWorld().getName().equals(world)) {
                                                    if(spells.length <= 1) {
                                                        if(spells[0].equalsIgnoreCase("*")) {
                                                            p.sendMessage(lm.getValue("spells.cannotcast"));
                                                            return;
                                                        }
                                                    } else {
                                                        for (int i = 0; i < sm.getSpells().size(); i++) {
                                                            if (sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias().equals(selectedSpell)) {
                                                                if(Arrays.asList(spells).contains(sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias())) {
                                                                    p.sendMessage(lm.getValue("spells.cannotcast"));
                                                                } else {
                                                                    boolean result = sm.getSpells().get(i).castSpell(p, current, wandType.getCooldowns().get(sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias()));
                                                                    if(result) {
                                                                        p.sendMessage(lm.getValue("spells.cast").replaceAll("%spell%", sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).name()));
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        return;
                                                    }
                                                }
                                            }
                                        }
                                        for(ProtectedRegion region : ars) {
                                            for(String rID : (List<String>) cm.getValue("worldguard.spells.disabled_regions")) {
                                                String[] master = rID.split(":");
                                                String rgName = master[0].split(",")[0];
                                                String world = master[0].split(",")[1];
                                                String[] spells = master[1].split(";");
                                                if((region.getId().equals(rgName)) && (p.getWorld().getName().equals(world))) {
                                                    if(spells.length <= 1) {
                                                        if(spells[0].equalsIgnoreCase("*")) {
                                                            p.sendMessage(lm.getValue("spells.cannotcast"));
                                                            return;
                                                        }
                                                    } else {
                                                        for (int i = 0; i < sm.getSpells().size(); i++) {
                                                            if (sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias().equals(selectedSpell)) {
                                                                if(Arrays.asList(spells).contains(sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias())) {
                                                                    p.sendMessage(lm.getValue("spells.cannotcast"));
                                                                } else {
                                                                    boolean result = sm.getSpells().get(i).castSpell(p, current, wandType.getCooldowns().get(sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias()));
                                                                    if(result) {
                                                                        p.sendMessage(lm.getValue("spells.cast").replaceAll("%spell%", sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).name()));
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        return;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    for (int i = 0; i < sm.getSpells().size(); i++) {
                                        if (sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias().equals(selectedSpell)) {
                                            boolean result = sm.getSpells().get(i).castSpell(p, current, wandType.getCooldowns().get(sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).alias()));
                                            if(result) {
                                                p.sendMessage(lm.getValue("spells.cast").replaceAll("%spell%", sm.getSpells().get(i).getClass().getAnnotation(SpellInfo.class).name()));
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    } else if (e.getAction() == Action.RIGHT_CLICK_AIR) {
                        if(holdingWand) {
                            if(!isMuggle) {
                                if(current.hasSpells()) {
                                    String spell = iterator.iterate(current);
                                    if(!spell.equalsIgnoreCase("")) {
                                        while(wandType.getCooldowns().get(spell) == -1) {
                                            spell = iterator.iterate(current);
                                        }
                                        if(wandType.getCooldowns().get(spell) != -1) {
                                            p.getInventory().getItemInMainHand().setItemMeta(ItemHandler.generateMeta(p.getInventory().getItemInMainHand().getItemMeta(), wandManager, wandType.getName(), spell));
                                            p.updateInventory();
                                            p.sendMessage(lm.getValue("spells.selectmessage").replaceAll("%spell%", spell));
                                        }
                                    } else {
                                        spell = iterator.iterate(current);
                                        while(wandType.getCooldowns().get(spell) == -1) {
                                            spell = iterator.iterate(current);
                                        }
                                        if(wandType.getCooldowns().get(spell) != -1) {
                                            p.getInventory().getItemInMainHand().setItemMeta(ItemHandler.generateMeta(p.getInventory().getItemInMainHand().getItemMeta(), wandManager, wandType.getName(), spell));
                                            p.updateInventory();
                                            p.sendMessage(lm.getValue("spells.selectmessage").replaceAll("%spell%", spell));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            } else if(p.getInventory().getItemInMainHand().getType() == Material.BLAZE_POWDER){
                if(fluActive) {
                    if(p.getInventory().getItemInMainHand().getItemMeta().getLore().get(0).equalsIgnoreCase(lm.getValue("flu.powdername").substring(2))) {
                        if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
                            if(p.getTargetBlock((Set<Material>) null, 2).getType() == Material.EMERALD_BLOCK) {
                                if(fluManager.loadedFlus.get("locations") != null) {
                                    fluManager.fluMenu.clear();
                                    fluManager.locations.clear();
                                    for(int i = 0; i < fluManager.loadedFlus.get("locations").size(); i++) {
                                        String current = fluManager.loadedFlus.get("locations").get(i);
                                        String[] splitted = current.split(",");
                                        fluManager.fluMenu.setOption(i, new ItemStack(Material.getMaterial(Integer.parseInt(splitted[1]))), splitted[0]);
                                        fluManager.locations.add(new Location(Bukkit.getWorld(splitted[2]), Integer.parseInt(splitted[3]), Integer.parseInt(splitted[4]), Integer.parseInt(splitted[5])));
                                    }
                                }
                                fluManager.getFluMenu().open(p);
                            }
                        }
                    }
                }
            } else if(p.getInventory().getItemInMainHand().getType() == Material.RECORD_5 || p.getInventory().getItemInMainHand().getType() == Material.RECORD_7 || p.getInventory().getItemInMainHand().getType() == Material.RECORD_8 || p.getInventory().getItemInMainHand().getType() == Material.RECORD_9) {
                if(main.wgplugin != null) {
                    RegionManager rm = main.wgplugin.getRegionManager(p.getWorld());
                    ApplicableRegionSet ars = rm.getApplicableRegions(p.getLocation());
                    if(ars.size() == 0) {
                        for(String str : (List<String>) cm.getValue("worldguard.brooms.disabled_regions")) {
                            String rgName = str.split(",")[0];
                            String world = str.split(",")[1];
                            if(rgName.equals("__global__") && p.getWorld().getName().equals(world)) {
                                p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lCuidado!&8&lUn poderoso hechizo impide usar escobas aqui!"));
                                return;
                            }
                        }
                    }
                    for(ProtectedRegion region : ars) {
                        for(String rID : (List<String>) cm.getValue("worldguard.brooms.disabled_regions")) {
                            String rgName = rID.split(",")[0];
                            String world = rID.split(",")[1];
                            if((region.getId().equals(rgName)) && (p.getWorld().getName().equals(world))) {
                                p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lCuidado!&8&lUn poderoso hechizo impide usar escobas aqui!"));
                                return;
                            }
                        }
                    }
                }
                boolean holdingBroom = false;
                Broom broomType = null;
                String itemName = p.getInventory().getItemInMainHand().getItemMeta().getLore().get(0);
                Wizard current = wizardManager.getWizardFromPlayer(p);
                boolean isMuggle = (current.getHouseType() == HouseType.Muggle);
                boolean canFly = (p.hasPermission("hpwizard.brooms.use"));
                if(!isMuggle) {
                    if(canFly) {
                        for (Broom broom : broomManager.getBrooms()) {
                            if (broom.getName().equals(itemName)) {
                                if(broom.getItem().equals(p.getInventory().getItemInMainHand().getType())) {
                                    holdingBroom = true;
                                    broomType = broom;
                                    itemName = p.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
                                }
                            }
                        }
                        if(holdingBroom) {
                            if(e.getAction() == Action.LEFT_CLICK_AIR) {
                                if(main.flyingBrooms.containsKey(p.getName())) {
                                    if(!broomManager.speedIndexes.get(p.getName()).equals(broomManager.lastIndex.get(p.getName()))) {
                                        broomManager.speedIndexes.put(p.getName(), broomManager.lastIndex.get(p.getName()));
                                    } else {
                                        broomManager.speedIndexes.put(p.getName(), 0);
                                    }
                                } else {
                                    p.sendMessage(cm.getValue("general.plugin_prefix") + ChatColor.translateAlternateColorCodes('&', "&cHaz click derecho con la escoba en la mano para empezar a volar."));
                                }
                            } else if(e.getAction() == Action.RIGHT_CLICK_AIR) {
                                if(main.flyingBrooms.containsKey(p.getName())) {
                                    broomManager.broomMenu.open(p);
                                } else {
                                    broomManager.startBroomFor(p, broomType);
                                }
                            }
                        }
                    }
                }
            }
        }
     
  6. Exactly. The server is exploding because it is trying to pass an event to your event handler, which is null (does not exist).
     
  7. Thanks for the code, but we'll also need a line number for the error (and an indication of where that line is in your code).
     
  8. That's the problem, the stack trace doesn't give me the line or even the class that is causing the error :/
     
  9. Are you certain? It just ends at "caused by..."? If so, that's a very exceptional stack trace :p
     
  10. What do you mean?
     
  11. Yes, It's the first time this happens, normally, after caused by... I get the class that's causing that exception :/
     
  12. No if you can read than at the last line is 'cursed by' thats mean a NullPointerException in the methode is the curse for the exception. Sometink in your code is null
     
  13. Just to be sure, would you mind running it again? That's super weird. If that doesn't change the stack trace behavior, the solution here might help (add that argument to start.command, IF you're using the sun JVM).

    Otherwise, I'm afraid you'll have to print something out on each line to see where the null pointer occurs. I personally recommend using assert statements (you'll need to add a -ea argument to your start command, like so:

    Code (Text):
    java -ea -Xms512M -Xmx1024M -jar spigot-1.10.jar
    )
     
  14. The server is running on a Multicraft host, I can't modify the start arguments :(
     
  15. Surround everything inside onPlayerCast with a try catch block and in the catch part print the stacktrace by running e#printStacktrace().
     
    • Creative Creative x 1
  16. actually, ignore what I said. @andrew28 has a better idea.
     
  17. Thanks, I'll try this ASAP, I'll be posting the error, thanks for helping!!
     
    • Like Like x 1