Solved Weird NPE while registering events

Discussion in 'Plugin Development' started by schwabfl, May 16, 2015.

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

    schwabfl

    Hello all, I am currently developing a UHC plugin which will have its custom API to add custom Scenarios.
    Developers will be able to register their custom Scenarios.
    I have created 2 Custom Events called ScenarioEnableEvent and ScenarioDisableEvent, which register and unregister the Listeners of the Custom Scenarios when they're enabled / disabled.
    I've created a seperate class which implements Listener, that listens to those two events.
    Whenever I try to register it it throws an NPE and I have no idea why (I already checked, plugin is not null)

    My onEnable:
    Code:
    @Override
        public void onEnable() {
        scatter = new Scatter(this);
        timer = new Timer(this, false);
        scenarioRegistry = new ScenarioRegistry(this);
        worldManager = new UHCWorldManager(this);
    
        scenarios = new ScenarioGUI(this, scenarioRegistry);
        settings = new SettingsGUI(this, 27, "§aSettings");
        ccSettings = new CCSettingsGUI(this, 3 * 9, "§cCutclean Settings");
    
        scenarioRegistry.registerScenario(new ScenarioBestPVE("BestPVE", "1.0", "shawlaf"));
    
        Bukkit.getPluginManager().registerEvents(new UHCListener(this), this);
        new ScenarioListener(this); // Line 60
        }
    
    ScenarioListener class:
    Code:
    public class ScenarioListener implements Listener {
    
        private UHC plugin;
    
        public ScenarioListener(UHC plugin) {
        this.plugin = plugin;
        Bukkit.getPluginManager().registerEvents(this, plugin); // Line 19
        }
    
        @EventHandler
        public void onScenarioEnable(ScenarioEnableEvent e) {
        if (e.getScenario().getListener() == null)
           return;
    
        Listener listener = e.getScenario().getListener();
        Bukkit.getPluginManager().registerEvents(listener, plugin);
        }
    
        @EventHandler
        public void onScenarioDisable(ScenarioDisableEvent e) {
        if (e.getScenario().getListener() == null)
           return;
    
        Listener listener = e.getScenario().getListener();
        HandlerList.unregisterAll(listener);
        }
    
    }
    
    Stacktrace:
    Code:
    [15:00:34 ERROR]: Error occurred while enabling ShawlafsUHC v1.0 (Is it up to da
    te?)
    org.bukkit.plugin.IllegalPluginAccessException: java.lang.NullPointerException
            at org.bukkit.plugin.SimplePluginManager.getEventListeners(SimplePluginM
    anager.java:571) ~[bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.plugin.SimplePluginManager.registerEvents(SimplePluginMana
    ger.java:527) ~[bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at me.shawlaf.uhc.scenario.ScenarioListener.<init>(ScenarioListener.java
    :19) ~[?:?]
            at me.shawlaf.uhc.UHC.onEnable(UHC.java:60) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) ~[b
    ukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:324) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:404) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.craftbukkit.v1_7_R4.CraftServer.loadPlugin(CraftServer.jav
    a:455) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.craftbukkit.v1_7_R4.CraftServer.enablePlugins(CraftServer.
    java:389) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.craftbukkit.v1_7_R4.CraftServer.reload(CraftServer.java:83
    9) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.Bukkit.reload(Bukkit.java:303) [bukkit.jar:git-Bukkit-1.7.
    9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    23) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:18
    0) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServe
    r.java:740) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchServerCommand(Craf
    tServer.java:726) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at net.minecraft.server.v1_7_R4.DedicatedServer.aB(DedicatedServer.java:
    294) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:2
    59) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:5
    58) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java
    :469) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
            at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:6
    28) [bukkit.jar:git-Bukkit-1.7.9-R0.2-16-g37c7969-b3105jnks]
    
    Thanks in advance :)
     
    Last edited: May 16, 2015
  2. In the ScenarioListeners constructor, use UHC as the argument, not Plugin
     
  3. Offline

    schwabfl

    Still throwing an Exception :/
     
  4. Try to replace this:
    Code:
     if (e.getScenario().getListener() == null)
           return;
    
        Listener listener = e.getScenario().getListener();
        HandlerList.unregisterAll(listener);
    with this:
    Code:
    HandlerList.unregisterAll(this);
    And
    Code:
    public ScenarioListener(UHC plugin) {
        this.plugin = plugin;
        Bukkit.getPluginManager().registerEvents(this, plugin); // Line 19
        }
    
        @EventHandler
        public void onScenarioEnable(ScenarioEnableEvent e) {
        if (e.getScenario().getListener() == null)
           return;
    
        Listener listener = e.getScenario().getListener();
        Bukkit.getPluginManager().registerEvents(listener, plugin);
        }
    You cannot register the events two times.
     
  5. Offline

    schwabfl

    scenario.getListener() is NOT ScenarioListener


    Edit:
    I forgot to make getHandlerList() static in my custom event class, I'm so dumb .-.
    ISSUE HAS BEEN SOLVED :p
     
    Last edited: May 16, 2015
  6. Just saying, your class implements Listener...
     
  7. Offline

    schwabfl

    scenario.getListener() and ScenarioListener are both Listeners, you're right
    ScenarioListener listens to ScenarioEnableEvent and ScenarioDisableEvent and registers scenario.getListener()
    scenario.getListener() is a listener that developers have to specify (it can be null, if it is null, it will be ignored) in order for the scenario's feautures to work

    for example:
    A BestPVE Scenario Listener would have to listen to EntityDamageEvent and EntityDeathEvent
     
Thread Status:
Not open for further replies.

Share This Page