Solved Cannot seem to register events...

Discussion in 'Plugin Development' started by LegoPal92, Jan 25, 2013.

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

    LegoPal92

    As the title implies, I cannot seem to register events I always get the same error, that i will show you now:
    Code:
    2013-01-25 12:51:31 [SEVERE] Error occurred while enabling LockPick v1.2 (Is it up to date?)
    java.lang.ArrayIndexOutOfBoundsException: 0
        at org.bukkit.plugin.java.JavaPluginLoader.createRegisteredListeners(JavaPluginLoader.java:383)
        at org.bukkit.plugin.SimplePluginManager.registerEvents(SimplePluginManager.java:502)
        at com.bethkefamily.LockPick.LockPick.onEnable(LockPick.java:90)
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
        at org.bukkit.craftbukkit.v1_4_R1.CraftServer.loadPlugin(CraftServer.java:282)
        at org.bukkit.craftbukkit.v1_4_R1.CraftServer.enablePlugins(CraftServer.java:264)
        at net.minecraft.server.v1_4_R1.MinecraftServer.j(MinecraftServer.java:321)
        at net.minecraft.server.v1_4_R1.MinecraftServer.e(MinecraftServer.java:300)
        at net.minecraft.server.v1_4_R1.MinecraftServer.a(MinecraftServer.java:259)
        at net.minecraft.server.v1_4_R1.DedicatedServer.init(DedicatedServer.java:149)
        at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:399)
        at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
    
    Now you may be wondering what exactly is at line 90, so i will just show you my onEnable(), and yeah... :
    Code:
        public void onEnable(){//final PluginEnableEvent e) {
     
            this.log = getLogger();
         
         
            log.info("before the registering of events.");
         
         
         
         
    THIS IS LINE 90-->        getServer().getPluginManager().registerEvents(this, this);
            //Bukkit.getPluginManager().registerEvents(this, this);
            for (Player p : this.getServer().getOnlinePlayers()) {
                LockPickPlayerData.LoadPlayer(p);
            }
            FileConfiguration cfg = getConfig();
    log.info("Before get.");
            if (!cfg.contains("LockPick.PickIs") || !cfg.contains("Chest")
                    || !cfg.contains("Doors") || !cfg.contains("AllowLeveling")
                    || !cfg.contains("PickPocket")
                    || !cfg.contains("SpamDebugMessages")
                    || !cfg.contains("SendMessageOnPickPocket")
                    || !cfg.contains("BaseChestSucceedPercent")
                    || !cfg.contains("BaseDoorSucceedPercent")
                    || !cfg.contains("PlayerOnlyGetsaRandomBlock")) {
                cfg.addDefault("LockPick.PickIs", LockPickId);
                cfg.addDefault("Chest", ChestId);
                cfg.addDefault("Doors", DoorId);
                cfg.addDefault("AllowLeveling", DoLevel);
                cfg.addDefault("PickPocket", AllowPickPocket);
                cfg.addDefault("SpamDebugMessages", Debug);
    log.info("During get");
                cfg.addDefault("SendMessageOnPickPocket", SendMessageOnPickPocket);
                cfg.addDefault("BaseChestSucceedPercent", BaseChestSucceedPercent);
                cfg.addDefault("BaseDoorSucceedPercent", BaseDoorSucceedPercent);
                cfg.addDefault("PlayerOnlyGetsaRandomBlock", PlayerOnlyGetsaRandomBlock);
             
                cfg.options().copyDefaults(true);
                saveConfig();
            }
    log.info("After get");
     
            LockPickId = cfg.getInt("LockPick.PickIs");
            ChestId = cfg.getInt("Chest");
            DoorId = cfg.getInt("Doors");
            AllowPickPocket = cfg.getBoolean("PickPocket");
            DoLevel = cfg.getBoolean(".AllowLeveling");
            Debug = cfg.getBoolean("SpamDebugMessages");
            SendMessageOnPickPocket = cfg.getBoolean("SendMessageOnPickPocket");
            BaseChestSucceedPercent = cfg.getInt("BaseChestSuceedPercent");
            BaseDoorSucceedPercent = cfg.getInt("BaseDoorSuceedPercent");
            PlayerOnlyGetsaRandomBlock = cfg.getBoolean("PlayerOnlyGetsaRandomBlock");
         
            log.info("===================================================");
            log.info("The LockPick is: " + LockPickId);
            log.info("The items to be picked are " + DoorId + " " + ChestId);
            log.info("===================================================");
     
        }
    The "THIS IS LINE 90-->" was added for clarity. It is not actually in the code, I am not that much of a n00b.

    Any help that you can provide would be much appreciated, oh, and i am compiling with bukkit-1.4.7-R0.1.jar


    One more thing. It appears the import for Door has been deprecated, that is not good for this plugin, what should i use instead?


    Thanks,
    LegoPal92
     
  2. Offline

    raGan.

    Your @EventHandler is supposed to have exactly one parameter, which must be some kind of event. Like:
    Code:
    @EventHandler
    public void onSometihng(PlayerDeathEvent mandatoryPrameter) {
    }
    otherwise it throws ArrayIndexOutOfBoundsException

    Edit: I think trying to register eventhandler with no parameters throwing an exception is bug, it should be reported.
     
  3. Offline

    LegoPal92

    I do have events, I can show them to you, and everything, but It is a very long class, so i will edit most of it out... :

    Code:
    @SuppressWarnings("deprecation")
    public class LockPick extends JavaPlugin implements Listener {
        private Random r = new Random(System.currentTimeMillis());
        Permission LockettePick = new Permission("Lockette.Pick");
        Permission PickPocket = new Permission("LockPick.PickPocket");
        Permission Protect = new Permission("LockPick.protect");
        int LockPickId = 266;
        int DoorId = 64;
        int ChestId = 54;
        boolean AllowPickPocket = true;
        boolean DoLevel = true;
        private Logger log;
        boolean Debug = false;
        boolean SendMessageOnPickPocket = true;
        int BaseChestSucceedPercent = 22;
        int BaseDoorSucceedPercent = 19;
        boolean PlayerOnlyGetsaRandomBlock = false;
        FileMaker fileMaker;
        LockPickLeveling lockPickLeveling;
        HashMap<Location, String> blockProtect = new HashMap<Location, String>();
        boolean protectNextBlock = false;
        BlockNearbyCheck BlockNearbyCheck;
     
        public FileMaker fileMakerClass() {
            if (this.fileMaker == null) {
                this.fileMaker = new FileMaker(getDataFolder().getAbsolutePath(),
                        this.getLogger());
            }
            return this.fileMaker;
        }
     
        @EventHandler(priority = EventPriority.HIGHEST)
        public void onEnable(){//final PluginEnableEvent e) {
     
            this.log = getLogger();
           
           
            log.info("before the registering of events.");
           
           
           
           
    Still line 90...        getServer().getPluginManager().registerEvents(this, this);
            //Bukkit.getPluginManager().registerEvents(this, this);
            for (Player p : this.getServer().getOnlinePlayers()) {
                LockPickPlayerData.LoadPlayer(p);
            }
            FileConfiguration cfg = getConfig();
    log.info("Before get.");
            if (!cfg.contains("LockPick.PickIs") || !cfg.contains("Chest")
                    || !cfg.contains("Doors") || !cfg.contains("AllowLeveling")
                    || !cfg.contains("PickPocket")
                    || !cfg.contains("SpamDebugMessages")
                    || !cfg.contains("SendMessageOnPickPocket")
                    || !cfg.contains("BaseChestSucceedPercent")
                    || !cfg.contains("BaseDoorSucceedPercent")
                    || !cfg.contains("PlayerOnlyGetsaRandomBlock")) {
                cfg.addDefault("LockPick.PickIs", LockPickId);
                cfg.addDefault("Chest", ChestId);
                cfg.addDefault("Doors", DoorId);
                cfg.addDefault("AllowLeveling", DoLevel);
                cfg.addDefault("PickPocket", AllowPickPocket);
                cfg.addDefault("SpamDebugMessages", Debug);
    log.info("During get");
                cfg.addDefault("SendMessageOnPickPocket", SendMessageOnPickPocket);
                cfg.addDefault("BaseChestSucceedPercent", BaseChestSucceedPercent);
                cfg.addDefault("BaseDoorSucceedPercent", BaseDoorSucceedPercent);
                cfg.addDefault("PlayerOnlyGetsaRandomBlock", PlayerOnlyGetsaRandomBlock);
               
                cfg.options().copyDefaults(true);
                saveConfig();
            }
    log.info("After get");
     
            LockPickId = cfg.getInt("LockPick.PickIs");
            ChestId = cfg.getInt("Chest");
            DoorId = cfg.getInt("Doors");
            AllowPickPocket = cfg.getBoolean("PickPocket");
            DoLevel = cfg.getBoolean(".AllowLeveling");
            Debug = cfg.getBoolean("SpamDebugMessages");
            SendMessageOnPickPocket = cfg.getBoolean("SendMessageOnPickPocket");
            BaseChestSucceedPercent = cfg.getInt("BaseChestSuceedPercent");
            BaseDoorSucceedPercent = cfg.getInt("BaseDoorSuceedPercent");
            PlayerOnlyGetsaRandomBlock = cfg.getBoolean("PlayerOnlyGetsaRandomBlock");
           
            log.info("===================================================");
            log.info("The LockPick is: " + LockPickId);
            log.info("The items to be picked are " + DoorId + " " + ChestId);
            log.info("===================================================");
     
        }
     
        public LockPickLeveling LockPickLevelingClass(Player p, int i,
                int BaseSucceedPercent) {
            return new LockPickLeveling(p, i, BaseSucceedPercent);
        }
       
        public BlockNearbyCheck BlockNearbyCheckClass(PlayerInteractEvent e){
            return new BlockNearbyCheck(e);
        }
     
        @EventHandler
        public void onPlayerJoin(final PlayerJoinEvent e) {
            Player p = e.getPlayer();
            LockPickPlayerData.LoadPlayer(p);
            if (DoLevel == true) {
                fileMakerClass().createFile(p, "LockPicklevelingStats");
                fileMakerClass().createFile(p, "PickPocketlevelingStats");
                fileMakerClass().readFromFile(p, "LockPicklevelingStats", 1);
                fileMakerClass().readFromFile(p, "PickPocketlevelingStats", 1);
            }
        }
     
        @EventHandler
        public void onDisable()//final PluginDisableEvent e) {
        {
            this.log = getLogger();
            this.log.info("LockPick disabled");
            LockPickPlayerData.SaveAllData();
        }
     
     
        @SuppressWarnings("unused")
        //@SuppressWarnings("unused")
        @EventHandler(priority = EventPriority.HIGHEST)
        public void lockpick(final PlayerInteractEvent e) {
     
        }
     
        @EventHandler
        public void onPlayerInteractEntity(PlayerInteractEntityEvent PIE2) {            
                }
            }
        }
    }
    
     
  4. Offline

    raGan.

    You can't annotate your onEnable(). That is the one without parameters, throwing an exception.
    Code:
    @EventHandler(priority = EventPriority.HIGHEST) <--- remove this, it can't be there
    public void onEnable(){//final PluginEnableEvent e) {
     
  5. Offline

    LegoPal92


    So I do not need the @EventHandler() at all?
     
  6. Offline

    raGan.

    You need it for every method you want to handle events in your listener class. Your onEnable can't handle events.
     
  7. Offline

    LegoPal92

    That makes sense, thank you so much, I honestly don't know why I didn't try that before. Once again, thank you!
     
Thread Status:
Not open for further replies.

Share This Page