private void HumanCongregation(Pawn pawn)
        {
            // prepare bill
            Bill_Spell bill = new Bill_Spell(CultsDefOf.Cults_SacrificeHuman);

            this.billStack.Clear();
            this.billStack.AddBill(bill);
            bill.billStack = this.billStack;
            bill.ingredientSearchRadius = 5f;

            // prepare job
            Job job = JobMaker.MakeJob(CultsDefOf.Cults_DoBill); // JobDefOf.DoBill); //

            job.targetQueueB = new List <LocalTargetInfo>()
            {
                this.congregationParms.sacrifice
            };
            job.countQueue = new List <int>()
            {
                1
            };
            job.playerForced      = true;
            job.targetA           = this;
            job.targetC           = PositionHeld;
            job.haulMode          = HaulMode.ToCellNonStorage;
            job.locomotionUrgency = LocomotionUrgency.Sprint;
            job.bill = this.billStack.FirstShouldDoNow;

            // start job
            pawn.jobs.TryTakeOrderedJob(job);
        }
        //------------------------------------------------------------------------------
        // Other

        private void FoodCongregation(Pawn pawn)
        {
            // get required things based on bill's recipe
            List <ThingCount> chosen_things = new List <ThingCount>();
            Bill_Spell        bill          = new Bill_Spell(CultsDefOf.Cults_OfferMeatRaw_Worthy);

            if (!IngredientFinder.TryFindBestBillIngredients(bill, pawn, this, chosen_things))
            {
                Messages.Message("Ingredients not available", null, MessageTypeDefOf.RejectInput, null);
                return;
            }
            ;

            // prepare bill
            this.billStack.Clear();
            this.billStack.AddBill(bill);
            bill.billStack = this.billStack;
            bill.ingredientSearchRadius = 5f;

            // prepare job
            Job job = JobMaker.MakeJob(CultsDefOf.Cults_DoBill); // JobDefOf.DoBill); //
            List <LocalTargetInfo> target_list = new List <LocalTargetInfo>();
            List <int>             thing_count = new List <int>();

            job.targetQueueB = new List <LocalTargetInfo>(chosen_things.Count);
            job.countQueue   = new List <int>(chosen_things.Count);

            for (int i = 0; i < chosen_things.Count; i++)
            {
                job.targetQueueB.Add(chosen_things[i].Thing);
                job.countQueue.Add(chosen_things[i].Count);
            }

            job.playerForced      = true;
            job.targetA           = this;
            job.targetC           = PositionHeld;
            job.haulMode          = HaulMode.ToCellNonStorage;
            job.locomotionUrgency = LocomotionUrgency.Sprint;
            job.bill = this.billStack.FirstShouldDoNow;

            // start job
            pawn.jobs.TryTakeOrderedJob(job);
        }