Couldn't pass EntityDeathEvent to Plugin

Discussion in 'Plugin Development' started by Dark-Panther, Apr 23, 2012.

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

    Dark-Panther

    Good evening,
    I've got a problem with my plugin, here is the log from my terminal:


    Show Spoiler
    Code:
    [SCHWERWIEGEND] Could not pass event EntityDeathEvent to Cookiez
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:303)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:459)
        at org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDeathEvent(CraftEventFactory.java:294)
        at net.minecraft.server.EntityLiving.dropDeathLoot(EntityLiving.java:825)
        at net.minecraft.server.EntityLiving.die(EntityLiving.java:781)
        at net.minecraft.server.EntityLiving.damageEntity(EntityLiving.java:677)
        at net.minecraft.server.EntityMonster.damageEntity(EntityMonster.java:38)
        at net.minecraft.server.EntityHuman.attack(EntityHuman.java:750)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:997)
        at net.minecraft.server.Packet7UseEntity.handle(SourceFile:33)
        at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:113)
        at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:551)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:449)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
    Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.RangeCheck(ArrayList.java:547)
        at java.util.ArrayList.get(ArrayList.java:322)
        at DarkPantherX.Cookiez.CookiezEntityListener.onEntityDeath(CookiezEntityListener.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301)
        ... 16 more
    


    and here the code, i've got problems with:
    cookiez.java: (main)
    Show Spoiler

    Code:
    import java.util.logging.Logger;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.java.JavaPlugin;
     
     
     
    public class Cookiez extends JavaPlugin {
        private final CookiezEntityListener entityListener = new CookiezEntityListener(this);
        public static Logger log = Logger.getLogger("Minecraft");
            public static int itemid;
            public static int dropsize;
     
     
         
        public void onDisable() {
     
        System.out.println("Bye Bye Cookie-Friend!");
        }
     
        public void onEnable() {
     
            this.loadconfig();
         
        itemid = this.getConfig().getInt("Config.Zombie-Drop-ID");
        dropsize = this.getConfig().getInt("Config.Zombie-Drop-Size");
     
        this.getServer().getPluginManager().registerEvents(entityListener, this);
     
        getCommand("cookie").setExecutor(new CookieCommandlistener(this));
        PluginDescriptionFile pdfFile = this.getDescription();
        System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
        }
         
     
        public void loadconfig() {
                String path1 = "Config.Zombie-Drop-ID";
                String path2 = "Config.Zombie-Drop-Size";
                this.getConfig().addDefault(path1, 357);
                this.getConfig().addDefault(path2, 2);
             
        this.getConfig().options().copyDefaults(true);
        this.saveConfig();
        }
     
     
     
     
         
        }
        

    an the CookieEntityListener
    Show Spoiler

    Code:
    package DarkPantherX.Cookiez;
     
    import java.util.List;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.entity.Zombie;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDeathEvent;
     
     
     
    public class CookiezEntityListener implements Listener {
     
     
        public static Cookiez plugin;
        private int drpsiz;
        public CookiezEntityListener(Cookiez instance){
            plugin = instance;
            }
     
        @EventHandler
        public void onEntityDeath(EntityDeathEvent event){
            if(event.getEntity() instanceof Zombie){
             
                    List<ItemStack> drops = event.getDrops();
                 
                    if(Cookiez.dropsize <= 9){
                        drpsiz = Cookiez.dropsize;
                     
                    }else if(Cookiez.dropsize >= 9 || Cookiez.dropsize <=0 || Cookiez.dropsize == 2){
                     
                        drpsiz = drops.size();
                 
                    }
                 
                    for(int i=0; i < drpsiz; i++){
                        ItemStack drop = drops.get(i);
                        drop.setTypeId(Cookiez.itemid);
                     
                                }
                            }
                        }
                    }
             
     
         
    



    Can you please tell my, where my problem is? I really can't finde something...
     
  2. Offline

    davejavu

    Dark-Panther
    Why not just use getConfig().options().copyDefaults(true); instead of loadconfig(), then create a config.yml in the src folder with all the defaults you want. I suggest using this:
    Code:java
    1.  
    2. PluginDescriptionFile pdfFile = this.getDescription();
    3. Logger log = Logger.getLogger("Minecraft");
    4.  
    5. public void onEnable() {
    6. getConfig().options().copyDefaults(true);
    7. saveConfig();
    8. getServer().getPluginManager().registerEvents(entityListener, this);
    9. getCommand("cookie").setExecutor(new CookieCommandListener(this));
    10. log.info(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
    11. }


    And then this in your listener:
    Code:java
    1.  
    2. @EventHandler(public void onEntityDeath(EntityDeathEvent event){
    3. if (event.getEntity() instanceof Zombie){
    4. List<ItemStack> drops = event.getDrops();
    5. int dropsize = Cookiez.getConfig().getInt("Config.Zombie-Drop-Size");
    6. int newdropsize
    7. if (dropsize <= 9){
    8. newdropsize = dropsize;
    9. }else if(dropsize > 9 || dropsize <= 0 || dropsize == 2){
    10. newdropsize = drops.size();
    11. }
    12.  
    13. for (int i = 0; i < newdropsize; i++) {
    14. ItemStack drop = drops.get(i);
    15. drop.setTypeId(getConfig().getInt("Config.Zombie-Drop-ID");
    16. }
    17. }
    18. }
    19.  
     
  3. Offline

    HappyPikachu

    Dark-Panther
    This says that something went wrong involving an ArrayList (most definitely 'drops'). The problem is at Line 37 of your EntityListener, in the EntityDeathEvent.
     
  4. Offline

    Dark-Panther

    But how should I fix that now? I'm very confused at the moment... Oo
     
  5. Offline

    Dark-Panther

    really no one?
     
Thread Status:
Not open for further replies.

Share This Page