public boolean addSpawnedMob(Player player, Mob mob, MobReference mobRef)
	{
		if (!mobRef.isValid())
			return false;
		
		// Fetch the players mob list
		PlayerMobCounter limiter = playerMobs.get(player.getName());
			
		// If the limiter doesn't exist create it
		if (limiter == null)
			playerMobs.put(player.getName(), limiter = new PlayerMobCounter(player));
		
		// Track the entity
		if (!limiter.add(mobRef))
			return false;
		
		// Check for grouped limiters
		if (mob.playerLimitGroup.length() > 0)
		{
			HashMap<String, PlayerMobCounter> playerLimiters = groupedPlayerMobs.get(player.getName());
			
			if (playerLimiters == null)
				groupedPlayerMobs.put(player.getName(), playerLimiters = new HashMap<String, PlayerMobCounter>());
			
			synchronized (playerLimiters)
			{
				PlayerMobCounter groupedLimiter = playerLimiters.get(mob.playerLimitGroup);
				
				if (groupedLimiter == null)
					playerLimiters.put(mob.playerLimitGroup, groupedLimiter = new PlayerMobCounter(player));
				
				if (!groupedLimiter.add(mobRef))
					return false;
			}
		}
		return true;
	}