Get Nullpointerexception from mobspawn

Discussion in 'Plugin Development' started by AlexanderL123, Nov 21, 2015.

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

    AlexanderL123

    Hi guys, I get a NullPointerException from this code:
    Code:
        @EventHandler(priority=EventPriority.LOWEST)
        public void zombiespawn(EntitySpawnEvent event){
            if(event.getEntityType()==EntityType.ZOMBIE){
                Entity e = event.getEntity();
                if(e.getCustomName().contains("tntzombie")){
                Entity g = Bukkit.getWorld(e.getWorld().getName()).spawnEntity(new Location(e.getWorld(),100,100,100), EntityType.PRIMED_TNT);
                e.setPassenger(g);
                }
            }
            }
    This is the Error:
    Code:
    [23:11:59 ERROR]: Could not pass event CreatureSpawnEvent to OPProjectiles v1.1
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:310) ~[craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62) ~[craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:502) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:487) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callCreatureSp
    awnEvent(CraftEventFactory.java:277) [craftbukkit.jar:git-Spigot-5f38d38-12698ea
    ]
            at net.minecraft.server.v1_8_R3.World.addEntity(World.java:1015) [craftb
    ukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.SpawnerCreature.a(SpawnerCreature.java:1
    82) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.WorldServer.doTick(WorldServer.java:227)
    [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:7
    70) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:3
    74) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:6
    54) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java
    :557) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at java.lang.Thread.run(Thread.java:745) [?:1.7.0_75]
    Caused by: java.lang.NullPointerException
            at alexanderl123.opprojectiles.OPProjectiles.zombiespawn(OPProjectiles.j
    ava:264) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
    _75]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:57) ~[?:1.7.0_75]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
    sorImpl.java:43) ~[?:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_75]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:306) ~[craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            ... 12 more
    [23:12:13 ERROR]: Could not pass event CreatureSpawnEvent to OPProjectiles v1.1
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:310) ~[craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62) ~[craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:502) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:487) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callCreatureSp
    awnEvent(CraftEventFactory.java:277) [craftbukkit.jar:git-Spigot-5f38d38-12698ea
    ]
            at net.minecraft.server.v1_8_R3.World.addEntity(World.java:1015) [craftb
    ukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.SpawnerCreature.a(SpawnerCreature.java:1
    82) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.WorldServer.doTick(WorldServer.java:227)
    [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:7
    70) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:3
    74) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:6
    54) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java
    :557) [craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            at java.lang.Thread.run(Thread.java:745) [?:1.7.0_75]
    Caused by: java.lang.NullPointerException
            at alexanderl123.opprojectiles.OPProjectiles.zombiespawn(OPProjectiles.j
    ava:264) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
    _75]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:57) ~[?:1.7.0_75]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
    sorImpl.java:43) ~[?:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_75]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:306) ~[craftbukkit.jar:git-Spigot-5f38d38-12698ea]
            ... 12 more
    >
    Why I am getting this Error and how to solve it?
     
  2. Offline

    mcdorli

    The entity doesn't have a custom name
     
  3. Offline

    AlexanderL123

    But the spawned zombie is named via spawn egg to tntzombie
     
  4. Offline

    Xerox262

    Add if(e.hasCustomName()) even if the zombie you're spawning has one there could be another one spawning that doesn't
     
    AlexanderL123 likes this.
  5. Offline

    AlexanderL123

    oh okay many thanks
     
  6. Offline

    Zombie_Striker

    For future reference, if "equals" or "equalsignorecase" does not work, don't think that "contains" will magically solve your problems.
     
    AlexanderL123 and Xerox262 like this.
  7. Offline

    Mrs. bwfctower

  8. Offline

    AlexanderL123

    @Mrs. bwfctower @Zombie_Striker @Xerox262
    This is now my code:
    Code:
        @EventHandler(priority=EventPriority.LOWEST)
        public void zombiespawn(EntitySpawnEvent event){
            Entity e = event.getEntity();
            this.getLogger().log(Level.INFO, "Mob Spawned");
            if(e.getCustomName()==null){
                this.getLogger().log(Level.INFO, "Mob has no custom name!");
                return;
            }
            this.getLogger().log(Level.INFO, "Mob has Custom Name");
            if(e.getType()==EntityType.ZOMBIE){
                this.getLogger().log(Level.INFO, "Mob is Zombie");
                if(e.getCustomName().equalsIgnoreCase("tntzombie")){
                this.getLogger().log(Level.INFO, "Mob is a tntzombie");
                Entity g = Bukkit.getWorld(e.getWorld().getName()).spawnEntity(e.getLocation(), EntityType.PRIMED_TNT);
                e.setPassenger(g);
                this.getLogger().log(Level.INFO, "Mob has now tnt on his head");
                }
            }
            }
    The Entity has a Custom name (The Egg has one) and when it spawned it also has a custom name BUT the plugin says it don't have a custom name. I think the event or rather the code in the event must be run one second later but how can i do this with these variables and so?
     
  9. Offline

    Xerox262

    Yea, just checked you need to give a delay of at least one tick.
    https://gyazo.com/1bbcc000fab07b1f400fd6750cb8e033
    Just perform your code inside a delayed bukkit runnable.

    Also I could've swore there was an Entity#hasCustomName() method, apparently I was wrong.
     
    Last edited: Nov 22, 2015
  10. Offline

    AlexanderL123

    Okay, my code is now:
    Code:
        @EventHandler(priority=EventPriority.LOWEST)
        public void zombiespawn(EntitySpawnEvent event){
            final Entity e = event.getEntity();
            this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
                
                  public void run() {
                      //
                        Bukkit.getLogger().log(Level.INFO, "Mob Spawned");
                        if(e.getCustomName()==null){
                            Bukkit.getLogger().log(Level.INFO, "Mob has no custom name!");
                            return;
                        }
                        Bukkit.getLogger().log(Level.INFO, "Mob has Custom Name");
                        if(e.getType()==EntityType.ZOMBIE){
                            Bukkit.getLogger().log(Level.INFO, "Mob is Zombie");
                            if(e.getCustomName().equalsIgnoreCase("tntzombie")){
                            Bukkit.getLogger().log(Level.INFO, "Mob is a tntzombie");
                            Entity g = Bukkit.getWorld(e.getWorld().getName()).spawnEntity(e.getLocation(), EntityType.PRIMED_TNT);
                            e.setPassenger(g);
                            Bukkit.getLogger().log(Level.INFO, "Mob has now tnt on his head");
                            }
                        }
                  }
                }, 20L);// 60 L == 3 sec, 20 ticks == 1 sec
            }
    Is this a good solution or a bad solution?
     
    Last edited: Nov 22, 2015
Thread Status:
Not open for further replies.

Share This Page