public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            IItemProcessor workThing = t as IItemProcessor;

            if (workThing == null || workThing.Finished || workThing.SpaceLeftForItem <= 0)
            {
                return(false);
            }
            if (!workThing.TemperatureAcceptable)
            {
                JobFailReason.Is(Static.TemperatureTrans);
                return(false);
            }

            Building_Smoker smoker = t as Building_Smoker;

            if (smoker != null)
            {
                if (smoker.Finished)
                {
                    return(false);
                }
                if (!smoker.CanAddFood)
                {
                    JobFailReason.Is(Static.SmokerLocked);
                    return(false);
                }
            }

            if (t.IsForbidden(pawn) || !pawn.CanReserveAndReach(t, PathEndMode.Touch, pawn.NormalMaxDanger(), 1, -1, null, forced))
            {
                return(false);
            }
            if (pawn.Map.designationManager.DesignationOn(t, DesignationDefOf.Deconstruct) != null)
            {
                return(false);
            }
            if (FindIngredient(pawn, workThing) == null)
            {
                JobFailReason.Is(Static.NoIngredient);
                return(false);
            }
            return(!t.IsBurning());
        }
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            Building_Smoker smoker = t as Building_Smoker;

            return(smoker != null && smoker.NeedsTending && !t.IsBurning() && !t.IsForbidden(pawn) && pawn.CanReserveAndReach(t, PathEndMode.Touch, pawn.NormalMaxDanger(), 1, -1, null, forced));
        }