public override Job JobOnThing(Pawn pawn, Thing t)
        {
            if (t.Faction != pawn.Faction)
            {
                return(null);
            }
            Blueprint blueprint = t as Blueprint;

            if (blueprint == null)
            {
                return(null);
            }
            Thing thingToIgnore = GenConstruct.MiniToInstallOrBuildingToReinstall(blueprint);
            Thing thing         = blueprint.FirstBlockingThing(pawn, thingToIgnore, false);

            if (thing != null)
            {
                if (thing.def.category == ThingCategory.Plant)
                {
                    // SINGLE CHANGE FROM VANILLA WorkGiver, make designation instead of immediate cutting plants
                    //return new Job(JobDefOf.CutPlant, thing);

                    if (Find.DesignationManager.DesignationOn(thing, DesignationDefOf.CutPlant) == null && Find.DesignationManager.DesignationOn(thing, DesignationDefOf.HarvestPlant) == null)
                    {
                        Find.DesignationManager.AddDesignation(new Designation(thing, DesignationDefOf.CutPlant));
                    }
                    return(null);
                }
                else if (thing.def.category == ThingCategory.Item)
                {
                    if (thing.def.EverHaulable)
                    {
                        return(HaulAIUtility.HaulAsideJobFor(pawn, thing));
                    }
                    Log.ErrorOnce(string.Concat(new object[]
                    {
                        "Never haulable ",
                        thing,
                        " blocking ",
                        t,
                        " at ",
                        t.Position
                    }), 6429262);
                }
                return(null);
            }
            if (!GenConstruct.CanConstruct(blueprint, pawn))
            {
                return(null);
            }
            Job job = this.DeconstructExistingEdificeJob(pawn, blueprint);

            if (job != null)
            {
                return(job);
            }
            Job job2 = base.ResourceDeliverJobFor(pawn, blueprint);

            if (job2 != null)
            {
                return(job2);
            }
            Job job3 = this.NoCostFrameMakeJobFor(pawn, blueprint);

            if (job3 != null)
            {
                return(job3);
            }
            return(null);
        }