| 
					
				 | 
			
			
				@@ -38,6 +38,7 @@ import com.gmail.nossr50.skills.fishing.Fishing; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.skills.herbalism.Herbalism; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.skills.mining.MiningManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.skills.taming.Taming; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gmail.nossr50.skills.taming.TamingManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.util.Misc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.util.Permissions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.util.player.UserManager; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -59,16 +60,19 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void onEntityChangeBlockEvent(EntityChangeBlockEvent event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Entity entity = event.getEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (entity instanceof FallingBlock) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Block block = event.getBlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!(entity instanceof FallingBlock)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (mcMMO.placeStore.isTrue(block) && !entity.hasMetadata(mcMMO.entityMetadataKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mcMMO.placeStore.setFalse(block); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (entity.hasMetadata(mcMMO.entityMetadataKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mcMMO.placeStore.setTrue(block); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Block block = event.getBlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        boolean isTracked = entity.hasMetadata(mcMMO.entityMetadataKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (mcMMO.placeStore.isTrue(block) && !isTracked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mcMMO.placeStore.setFalse(block); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else if (isTracked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mcMMO.placeStore.setTrue(block); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -85,11 +89,12 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Entity defender = event.getEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Misc.isNPCEntity(defender) || defender.isDead()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Misc.isNPCEntity(defender) || !defender.isValid() || !(defender instanceof LivingEntity)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Entity attacker = event.getDamager(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LivingEntity target = (LivingEntity) defender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (attacker instanceof Projectile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             attacker = ((Projectile) attacker).getShooter(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -102,6 +107,10 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CombatUtils.isInvincible(target, event.getDamage())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (defender instanceof Player && attacker instanceof Player) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Player defendingPlayer = (Player) defender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Player attackingPlayer = (Player) attacker; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -110,22 +119,14 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (defendingPlayer == attackingPlayer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (PartyManager.inSameParty(defendingPlayer, attackingPlayer)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!(Permissions.friendlyFire(attackingPlayer) && Permissions.friendlyFire(defendingPlayer))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    event.setCancelled(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Check for invincibility */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (defender instanceof LivingEntity) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            LivingEntity livingDefender = (LivingEntity) defender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!CombatUtils.isInvincible(livingDefender, event.getDamage())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                CombatUtils.combatChecks(event, attacker, livingDefender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (PartyManager.inSameParty(defendingPlayer, attackingPlayer) && !(Permissions.friendlyFire(attackingPlayer) && Permissions.friendlyFire(defendingPlayer))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                event.setCancelled(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CombatUtils.combatChecks(event, attacker, target); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -210,24 +211,26 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Player player = (Player) owner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Wolf wolf = (Wolf) pet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                TamingManager tamingManager = UserManager.getPlayer(player).getTamingManager(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 switch (cause) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case CONTACT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case FIRE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case LAVA: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Taming.canUseEnvironmentallyAware(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Taming.processEnvironmentallyAware(player, wolf, event.getDamage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (tamingManager.canUseEnvironmentallyAware()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            tamingManager.processEnvironmentallyAware(wolf, event.getDamage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case FALL: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Taming.canUseEnvironmentallyAware(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (tamingManager.canUseEnvironmentallyAware()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             event.setCancelled(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case ENTITY_ATTACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case PROJECTILE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Taming.canUseThickFur(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (tamingManager.canUseThickFur()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             event.setDamage(Taming.processThickFur(wolf, event.getDamage())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             if (event.getDamage() == 0) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -237,7 +240,7 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case FIRE_TICK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Taming.canUseThickFur(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (tamingManager.canUseThickFur()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             Taming.processThickFurFire(wolf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -245,7 +248,7 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case MAGIC: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case POISON: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case WITHER: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Taming.canUseHolyHound(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (tamingManager.canUseHolyHound()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             Taming.processHolyHound(wolf, event.getDamage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -253,7 +256,7 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case BLOCK_EXPLOSION: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case ENTITY_EXPLOSION: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     case LIGHTNING: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Taming.canUseShockProof(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (tamingManager.canUseShockProof()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             event.setDamage(Taming.processShockProof(wolf, event.getDamage())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             if (event.getDamage() == 0) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -294,7 +297,7 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void onCreatureSpawn(CreatureSpawnEvent event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Misc.isSpawnerXPEnabled || event.getEntity() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Misc.isSpawnerXPEnabled) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -317,13 +320,14 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (entity instanceof TNTPrimed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int id = entity.getEntityId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (plugin.tntIsTracked(id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                MiningManager miningManager = UserManager.getPlayer(plugin.getTNTPlayer(id)).getMiningManager(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!plugin.tntIsTracked(id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (miningManager.canUseBiggerBombs()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    event.setRadius(miningManager.biggerBombs(event.getRadius())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MiningManager miningManager = UserManager.getPlayer(plugin.getTNTPlayer(id)).getMiningManager(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (miningManager.canUseBiggerBombs()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                event.setRadius(miningManager.biggerBombs(event.getRadius())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -340,16 +344,18 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (entity instanceof TNTPrimed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int id = entity.getEntityId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (plugin.tntIsTracked(id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                MiningManager miningManager = UserManager.getPlayer(plugin.getTNTPlayer(id)).getMiningManager(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!plugin.tntIsTracked(id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (miningManager.canUseBlastMining()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    miningManager.blastMiningDropProcessing(event.getYield(), event.blockList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    event.setYield(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MiningManager miningManager = UserManager.getPlayer(plugin.getTNTPlayer(id)).getMiningManager(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                plugin.removeFromTNTTracker(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (miningManager.canUseBlastMining()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                miningManager.blastMiningDropProcessing(event.getYield(), event.blockList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                event.setYield(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            plugin.removeFromTNTTracker(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -373,49 +379,51 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int newFoodLevel = event.getFoodLevel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int foodChange = newFoodLevel - currentFoodLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (foodChange <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              * Some foods have 3 ranks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              * Some foods have 5 ranks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              * The number of ranks is based on how 'common' the item is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              * We can adjust this quite easily if we find something is giving too much of a bonus 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (foodChange > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                switch (player.getItemInHand().getType()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case BAKED_POTATO:  /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case BREAD:         /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case CARROT_ITEM:   /* RESTORES 2 HUNGER - RESTORES 4 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case GOLDEN_CARROT: /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case MUSHROOM_SOUP: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case PUMPKIN_PIE:   /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Permissions.farmersDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel1, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            switch (player.getItemInHand().getType()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case BAKED_POTATO:  /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case BREAD:         /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case CARROT_ITEM:   /* RESTORES 2 HUNGER - RESTORES 4 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case GOLDEN_CARROT: /* RESTORES 3 HUNGER - RESTORES 5 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case MUSHROOM_SOUP: /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case PUMPKIN_PIE:   /* RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (Permissions.farmersDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel1, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case COOKIE:           /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case MELON:            /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case POISONOUS_POTATO: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case POTATO_ITEM:      /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Permissions.farmersDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel2, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case COOKIE:           /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case MELON:            /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case POISONOUS_POTATO: /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case POTATO_ITEM:      /* RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (Permissions.farmersDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        event.setFoodLevel(UserManager.getPlayer(player).getHerbalismManager().farmersDiet(Herbalism.farmersDietRankLevel2, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case COOKED_FISH: /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Permissions.fishermansDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel1, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case COOKED_FISH: /* RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (Permissions.fishermansDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel1, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case RAW_FISH:    /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (Permissions.fishermansDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel2, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                case RAW_FISH:    /* RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (Permissions.fishermansDiet(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        event.setFoodLevel(UserManager.getPlayer(player).getFishingManager().handleFishermanDiet(Fishing.fishermansDietRankLevel2, newFoodLevel)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -428,33 +436,38 @@ public class EntityListener implements Listener { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void onEntityTame(EntityTameEvent event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Player player = (Player) event.getOwner(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LivingEntity entity = event.getEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Misc.isNPCEntity(player)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Misc.isNPCEntity(player) || Misc.isNPCEntity(entity) || entity.hasMetadata(mcMMO.entityMetadataKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LivingEntity entity = event.getEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (entity != null && !entity.hasMetadata(mcMMO.entityMetadataKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            UserManager.getPlayer(player).getTamingManager().awardTamingXP(entity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UserManager.getPlayer(player).getTamingManager().awardTamingXP(entity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Handle EntityTarget events. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param event The event to process 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void onEntityTarget(EntityTargetEvent event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (event.getEntity() instanceof Tameable && event.getTarget() instanceof Player) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Player player = (Player) event.getTarget(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Tameable tameable = (Tameable) event.getEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Entity entity = event.getEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Entity target = event.getTarget(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (CombatUtils.isFriendlyPet(player, tameable)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // isFriendlyPet ensures that the Tameable is: Tamed, owned by a player, and the owner is in the same party 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // So we can make some assumptions here, about our casting and our check 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Player owner = (Player) tameable.getOwner(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (entity instanceof Tameable && target instanceof Player) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Player player = (Player) target; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Tameable tameable = (Tameable) entity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!(Permissions.friendlyFire(player) && Permissions.friendlyFire(owner))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    event.setCancelled(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!CombatUtils.isFriendlyPet(player, tameable)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // isFriendlyPet ensures that the Tameable is: Tamed, owned by a player, and the owner is in the same party 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // So we can make some assumptions here, about our casting and our check 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!(Permissions.friendlyFire(player) && Permissions.friendlyFire((Player) tameable.getOwner()))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                event.setCancelled(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 |