How to make a mob not target a specific player

Discussion in 'Plugin Development' started by TechManDylan, Oct 16, 2012.

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

    TechManDylan

    So I have been playing with the EntityTargetEvent but I keep getting weird errors whenever I try to narrow out a specific player and make them not target able by mobs.
    Code:
        @EventHandler(priority = EventPriority.HIGHEST)
        public void NoTarget(EntityTargetEvent event) {
            if (event.getTarget().getType().getName().equals("Player")){
                    event.setCancelled(true);
            }
        }
    that's what I have so what am I doing wrong?
     
  2. Offline

    chaseoes

    How do you expect us to know without seeing the errors?
     
  3. Offline

    TechManDylan

    Sorry I was just thinking that I'm getting
    Code:
    2012-10-16 19:46:00 [SEVERE] Could not pass event EntityTargetEvent to PeacefulBeckah
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:341)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTargetEvent(CraftEventFactory.java:464)
        at net.minecraft.server.EntityExperienceOrb.h_(EntityExperienceOrb.java:72)
        at net.minecraft.server.World.entityJoinedWorld(World.java:1245)
        at net.minecraft.server.WorldServer.entityJoinedWorld(WorldServer.java:511)
        at net.minecraft.server.World.playerJoinedWorld(World.java:1227)
        at net.minecraft.server.World.tickEntities(World.java:1125)
        at net.minecraft.server.WorldServer.tickEntities(WorldServer.java:428)
        at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:563)
        at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:213)
        at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:473)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:405)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.entity.CraftExperienceOrb cannot be cast to org.bukkit.entity.Player
        at me.TechManDylan.bukkit.PeacefulBeckah.PeacefulBeckahListener.NoTarget(PeacefulBeckahListener.java:15)
        at sun.reflect.GeneratedMethodAccessor68.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:339)
        ... 15 more
     
  4. Offline

    TwistedMexi

    "
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.entity.CraftExperienceOrb cannot be cast to org.bukkit.entity.Player"

    Basically, you're trying to get Player data from an ExperienceOrb Entity. I'm pretty sure this is occurring outside of the snippet you provided.
     
  5. Offline

    TechManDylan

    ok i shrunk it to this
    Code:
    package me.TechManDylan.bukkit.PeacefulBeckah;
     
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityTargetEvent;
     
    public class PeacefulBeckahListener implements Listener {
     
        @EventHandler(priority = EventPriority.HIGHEST)
        public void NoTarget(EntityTargetEvent event) {
            if (event.getTarget().getType().getName().equals("DrHottie")){
                    event.setCancelled(true);
            }
        }
    }
    
    And this is the error

    Code:
    2012-10-16 20:34:59 [SEVERE] Could not pass event EntityTargetEvent to PeacefulBeckah
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:341)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTargetEvent(CraftEventFactory.java:464)
        at net.minecraft.server.PathfinderGoalMeleeAttack.c(PathfinderGoalMeleeAttack.java:59)
        at net.minecraft.server.PathfinderGoalSelector.a(PathfinderGoalSelector.java:44)
        at net.minecraft.server.EntityLiving.bc(EntityLiving.java:1216)
        at net.minecraft.server.EntityLiving.d(EntityLiving.java:1091)
        at net.minecraft.server.EntityMonster.d(EntityMonster.java:21)
        at net.minecraft.server.EntityZombie.d(EntityZombie.java:55)
        at net.minecraft.server.EntityLiving.h_(EntityLiving.java:447)
        at net.minecraft.server.EntityMonster.h_(EntityMonster.java:25)
        at net.minecraft.server.World.entityJoinedWorld(World.java:1245)
        at net.minecraft.server.WorldServer.entityJoinedWorld(WorldServer.java:511)
        at net.minecraft.server.World.playerJoinedWorld(World.java:1227)
        at net.minecraft.server.World.tickEntities(World.java:1125)
        at net.minecraft.server.WorldServer.tickEntities(WorldServer.java:428)
        at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:563)
        at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:213)
        at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:473)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:405)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
    Caused by: java.lang.NullPointerException
        at me.TechManDylan.bukkit.PeacefulBeckah.PeacefulBeckahListener.NoTarget(PeacefulBeckahListener.java:12)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:339)
        ... 22 more
    it says null pointer exception is the problem?
     
  6. Offline

    chaseoes

    Yes. On line 12.
     
  7. Here's the idea:
    - check if the targeted entity is a player
    - if it is, cast it and check the player's
    - determine whether to cancel based on the name that you now have access to

    Your current code does some weird stuff with entity types, here's some keywords you'll need:
    instanceof, ((Player) entity).getName()

    Try to go from there, good luck.
     
  8. Offline

    TechManDylan

    Alright so this is what I have now and it works but anytime I try
    if (event.getTarget() instanceof Player) {
    if (event.getTarget().getType.getName.equals("Player's name here")) {

    I get null pointer any idea why?



    Code:
    package me.TechManDylan.bukkit.PeacefulBeckah;
     
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityTargetEvent;
     
    public class PeacefulBeckahListener implements Listener {
        @EventHandler(priority = EventPriority.HIGHEST)
        public void NoTarget(EntityTargetEvent event) {
            if (event.getEntityType().equals(EntityType.BLAZE)
                    || (event.getEntityType().equals(EntityType.CAVE_SPIDER)
                            || (event.getEntityType().equals(EntityType.CREEPER)
                            || (event.getEntityType().equals(EntityType.ENDERMAN)
                            || (event.getEntityType().equals(EntityType.GHAST)
                            || (event.getEntityType().equals(EntityType.MAGMA_CUBE)
                            || (event.getEntityType().equals(EntityType.PIG_ZOMBIE)
                            || (event.getEntityType().equals(EntityType.SILVERFISH)
                            || (event.getEntityType().equals(EntityType.SKELETON)
                            || (event.getEntityType().equals(EntityType.SLIME)
                            || (event.getEntityType().equals(EntityType.SPIDER)
                            || (event.getEntityType().equals(EntityType.ZOMBIE))))))))))))) {
                if (event.getTarget() instanceof Player) {
                        event.setTarget(null);
                }
            }
        }
    }
    Can anyone tell me what I'm doing wrong?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 29, 2016
  9. Offline

    CevinWa

    @EventHandler(priority = EventPriority.HIGHEST)
    public void NoTarget(EntityTargetEvent event) {
    if (event.getTarget().getType().getName().equals("Player")){
    event.setCancelled(true);
    }
    }

    This should be right.
    @EventHandler(priority = EventPriority.HIGHEST)
    public void NoTarget(EntityTargetEvent event) {
    if (event.getEntityType().equals(EntityType.BLAZE)
    || (event.getEntityType().equals(EntityType.CAVE_SPIDER)
    || (event.getEntityType().equals(EntityType.CREEPER)
    || (event.getEntityType().equals(EntityType.ENDERMAN)
    || (event.getEntityType().equals(EntityType.GHAST)
    || (event.getEntityType().equals(EntityType.MAGMA_CUBE)
    || (event.getEntityType().equals(EntityType.PIG_ZOMBIE)
    || (event.getEntityType().equals(EntityType.SILVERFISH)
    || (event.getEntityType().equals(EntityType.SKELETON)
    || (event.getEntityType().equals(EntityType.SLIME)
    || (event.getEntityType().equals(EntityType.SPIDER)
    || (event.getEntityType().equals(EntityType.ZOMBIE))))))))))))) {
    if (event.getTarget() instanceof Player) {
    Player player = (Player) event.getTarget().getType();//i think




    String playername = player.getName();
    if(playername == "SomeName"){
    event.setTarget(null);

    }
    }
    i have no access to eclipse so coulden't test it.
     
  10. Offline

    Tirelessly

    • Flaming is not on
    Don't set the target to null, cancel the event... fucking people these days.
     
    kroltan likes this.
  11. Offline

    TechManDylan

    Wow way to get way out of hand, and perhaps if you explained the reasoning behind why cancelling the event is better than setting the target to null I would be inclined to do so. However if all you're going to do is come on here, and spatter profanity I would appreciate it if you didn't post on this topic.

    And I did figure this out I ended up using
    Code:
    if (event.getTarget() instanceof Player) {
    Player p = (Player) event.getTarget();
    if(p.hasPermission("PeacfulMode.NoTarget")){
    event.setCancelled(true);
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 29, 2016
  12. Offline

    Tirelessly

    You're getting a null pointer because the mob is trying to target something which is null, because you told it to. That's common sense.
     
  13. Offline

    TechManDylan

    Actually no that wasn't why and thank you for continuing to be ignorant.
     
    Rixterz likes this.
  14. Offline

    Tirelessly

    if (event.getTarget().getType.getName.equals("Player's name here")) {

    lolretard
     
  15. Offline

    md_5

    Please calm down, we don't need this flaming in a thread where a user is asking for help.
     
  16. Offline

    duncan.leo

    maybe
    Player target = (Player)event.getTarget();
    if (target.getName() == "his name here"){
    event.setCancelled(true);
    }
     
  17. Offline

    Evilshallwin

    Any reason why you thought bumping a half year old topic was pertinent?
     
    BeastlyJman likes this.
  18. Offline

    HmmOnAnswer

    When Entering an a server in console:
    [19:01:21] [User Authenticator #1/INFO]: UUID of player { Playername} is 5adddfe3412e44518de1f52241bf84fb
    [19:01:21] [Server thread/INFO]: Landview[/25.110.203.232:64993] logged in with entity id 255 at ([world] 163.27828136940138, 82.15382134374974, 36.09136632492114)
    One time entity id is null i think you need to be write Null?
     
  19. Offline

    fireblast709

    HmmOnAnswer This thread has been dead for over 1.5 years, let it be :p. (Ironically, the post before yours was commenting on someone else's necro post)
     
Thread Status:
Not open for further replies.

Share This Page