Event not working

Discussion in 'Plugin Development' started by damo1995, May 30, 2012.

Thread Status:
Not open for further replies.
  1. Hello all.

    So I have setup this event and have loaded it via the onEnable methored in my main class:

    Code:
    @EventHandler(priority = EventPriority.HIGHEST)
    public void rangeAttack(EntityDamageByEntityEvent event){
     
    //-------- Non-Hostile Mob Check --------\\
    if(event.getDamager() instanceof Player && event.getDamager().getType() == EntityType.ARROW && event.getEntity() instanceof Animals){
    Projectile arrow = (Arrow)event.getDamager();
    Player player = (Player)arrow.getShooter();
    Location loc = event.getEntity().getLocation();
    if(arrow.getShooter() instanceof Player){
    if(plugin.getWorldGuardPlugin().canBuild(player, loc)){
    event.setCancelled(false);
    if(plugin.getConfig().getBoolean("debug") == true){
    player.sendMessage("DEBUG: ATTACKED Mob");
    player.sendMessage("DEBUG: ATTACK SUCCESSFUL");
    }
    }
    else{
    event.setCancelled(true);
    if(plugin.getConfig().getBoolean("debug") == true){
    player.sendMessage("DEBUG: ATTACKED Mob");
    player.sendMessage("DEBUG: ATTACK FAILED");
    }
    player.sendMessage(fail);
    if(plugin.getConfig().getBoolean("notify") == true){
    notifyAdmin(player);
    }
    }
    }
    }
     
    //-------- END Non-Hostile Mob Check --------\\
     
    //-------- Hostile Mob Check --------\\
    if(event.getDamager() instanceof Player && event.getDamager().getType() == EntityType.ARROW && event.getEntity() instanceof Monster && plugin.getConfig().getBoolean("protect-hostiles") == true){
    Projectile arrow = (Arrow)event.getDamager();
    Player player = (Player)arrow.getShooter();
    Location loc = event.getEntity().getLocation();
    if(arrow.getShooter() instanceof Player){
    if(plugin.getWorldGuardPlugin().canBuild(player, loc)){
    event.setCancelled(false);
    if(plugin.getConfig().getBoolean("debug") == true){
    player.sendMessage("DEBUG: ATTACKED Mob");
    player.sendMessage("DEBUG: ATTACK SUCCESSFUL");
    }
    }
    else{
    event.setCancelled(true);
    if(plugin.getConfig().getBoolean("debug") == true){
    player.sendMessage("DEBUG: ATTACKED Mob");
    player.sendMessage("DEBUG: ATTACK FAILED");
    }
    player.sendMessage(fail);
    if(plugin.getConfig().getBoolean("notify") == true){
    notifyAdmin(player);
    }
    }
    }
    }
     
    //-------- END Hostile Mob Check --------\\
     
    //-------- Villager Mob Check --------\\
    if(event.getDamager() instanceof Player && event.getDamager().getType() == EntityType.ARROW && event.getEntity() instanceof NPC && plugin.getConfig().getBoolean("protect-villiger") == true){
    Projectile arrow = (Arrow)event.getDamager();
    Player player = (Player)arrow.getShooter();
    Location loc = event.getEntity().getLocation();
    if(arrow.getShooter() instanceof Player){
    if(plugin.getWorldGuardPlugin().canBuild(player, loc)){
    event.setCancelled(false);
    if(plugin.getConfig().getBoolean("debug") == true){
    player.sendMessage("DEBUG: ATTACKED Mob");
    player.sendMessage("DEBUG: ATTACK SUCCESSFUL");
    }
    }
    else{
    event.setCancelled(true);
    if(plugin.getConfig().getBoolean("debug") == true){
    player.sendMessage("DEBUG: ATTACKED Mob");
    player.sendMessage("DEBUG: ATTACK FAILED");
    }
    player.sendMessage(fail);
    if(plugin.getConfig().getBoolean("notify") == true){
    notifyAdmin(player);
    }
    }
    }
    }
    //-------- END Villager Mob Check --------\\
    }
    
    Now there is something wrong with this code because its not even playing the debug msg's i've set.

    I've looked through it and through it and cannot find nothing that could be stopping it from working all it is doing is capturing the arrow hitting the animal/mob and cancelling it if it needs to.

    There is nothing wrong with the class file as I have some more code:

    Code:
    	@EventHandler(priority = EventPriority.LOWEST)
    	public void handAttack(EntityDamageByEntityEvent event){
    		boolean debug = DamageListeners.plugin.getConfig().getBoolean("debug");
    		Location loc = event.getEntity().getLocation();
    		RegionManager rm = plugin.getWorldGuardPlugin().getRegionManager(loc.getWorld());
    		@SuppressWarnings("unused")
    		ApplicableRegionSet set = rm.getApplicableRegions(loc);
    
    		//-------- Non-Hostile Mob Check --------\\
    		if(event.getDamager() instanceof Player && event.getEntity() instanceof Animals){
    			Player player = (Player) event.getDamager();
    			if(event.isCancelled()){return;}
    				if(plugin.getWorldGuardPlugin().canBuild(player, loc)){
    					event.setCancelled(false);
    					if(plugin.getConfig().getBoolean("debug") == true){
    					player.sendMessage("DEBUG: Attacked Mob");
    					player.sendMessage("DEBUG: ATTACK SUCCESSFULL");
    					}
    				}
    				else{
    					event.setCancelled(true); 
    					if(plugin.getConfig().getBoolean("debug") == true){
    					player.sendMessage("DEBUG: ATTACKED Mob");
    					player.sendMessage("DEBUG: ATTACK FAILED");
    					}
    					player.sendMessage(fail);
    					if(plugin.getConfig().getBoolean("notify") == true){
    					notifyAdmin(player);
    					}
    					}
    		}
    		
    		//-------- END Non-Hostile Mob Check --------\\
    		
    		
    		//-------- Hostile Mob Check --------\\
    		if(event.getDamager() instanceof Player && event.getEntity() instanceof Monster && plugin.getConfig().getBoolean("protect-hostiles") == true){
    			Player player = (Player)event.getDamager();
    			if(event.isCancelled() == true){return;}
    			if(plugin.getWorldGuardPlugin().canBuild(player, loc)){
    				event.setCancelled(false);
    				if(debug == true){
    				player.sendMessage("DEBUG: Attacked Mob");
    				player.sendMessage("DEBUG: ATTACK SUCCESSFULL");
    				}
    			}
    			else{
    				event.setCancelled(true);
    				if(debug == true){
    				player.sendMessage("DEBUG: ATTACKED Mob");
    				player.sendMessage("DEBUG: ATTACK FAILED");
    				}
    				player.sendMessage(fail);
    				if(plugin.getConfig().getBoolean("notify") == true){
    				notifyAdmin(player);
    				}
    			}
    		}
    		//-------- END Hostile Mob Check --------\\
    		
    		
    		//-------- NPC Mob Check --------\\
    		if(event.getDamager() instanceof Player && event.getEntity() instanceof NPC && plugin.getConfig().getBoolean("protect-villiger") == true){
    			Player player = (Player)event.getDamager();
    			if(plugin.getWorldGuardPlugin().canBuild(player, loc)){
    				event.setCancelled(false);
    				if(debug == true){
    				player.sendMessage("DEBUG: Attacked Mob");
    				player.sendMessage("DEBUG: ATTACK SUCCESSFULL");
    				}
    			}
    			else{
    				event.setCancelled(true);
    				if(debug  == true){
    				player.sendMessage("DEBUG: ATTACKED Mob");
    				player.sendMessage("DEBUG: ATTACK FAILED");
    				}
    				player.sendMessage(fail);
    				if(plugin.getConfig().getBoolean("notify") == true){
    				notifyAdmin(player);
    				}
    			}
    		}
    		//-------- END NPC Mob Check --------\\
    		}	
    
    and that works fine and its in the same class.

    Does anybody know what's going on here and how i can fix it?

    Thanks.
     
  2. Offline

    Technius

    In rangeattack, you are checking if the damaging entity is a player. Then you check if the type of the entity is an arrow. A player is obviously not an arrow. You will need to do this:
    Code:java
    1. if(event.getDamager() instanceof Arrow)
    2. {
    3. Arrow arrow = (Arrow)event.getDamager();
    4. //code
    5. }

    That makes the entity type check obsolete. If you want to get the player who shot the arrow, do this:
    Code:java
    1. if(arrow.getShooter() instanceof Player)
    2. {
    3. Player player = (Player)arrow.getShooter();
    4. //code
    5. }
     
  3. Thanks alot!

    I've had this issue before im sure so why I did it again I am unsure, Again thanks.

    Now i just need to find out how to create a list of animals and check it in the instanceof :D

    Thanks
     
Thread Status:
Not open for further replies.

Share This Page