From f3da6d7ba93f39dcb6a136585a2c799d6effcb95 Mon Sep 17 00:00:00 2001
From: Mehni <Mehni@users.noreply.github.com>
Date: Sat, 3 Feb 2018 22:22:25 +0100
Subject: [PATCH] Update to 0.18.1.4

- It's now possible to kill Wandering Caravans.
- Fixed a nasty bug with ridiculously long queues.
- Bit of a code cleanup.
- Reduced stack fragmentation caused by picking up partial stacks when the colonist could've picked up more.
---
 About/About.xml                               |   2 +-
 Assemblies/PickUpAndHaul.dll                  | Bin 22016 -> 22016 bytes
 .../PickUpAndHaul/CompHauledToInventory.cs    |   2 +-
 .../PickUpAndHaul/HarmonyPatches.cs           |  19 ++++---
 .../JobDriver_HaulToInventory.cs              |  50 ++++++++++--------
 .../JobDriver_UnloadYourHauledInventory.cs    |  40 +++++++-------
 .../PickUpAndHaul/PawnUnloadChecker.cs        |  39 ++++----------
 .../PickUpAndHaul/Properties/AssemblyInfo.cs  |   4 +-
 .../WorkGiver_HaulToInventory.cs              |  46 ++++------------
 9 files changed, 84 insertions(+), 118 deletions(-)

diff --git a/About/About.xml b/About/About.xml
index 09d52cc..ff1e0f4 100644
--- a/About/About.xml
+++ b/About/About.xml
@@ -6,7 +6,7 @@
 	<url>https://ludeon.com/forums/index.php?topic=35832</url>
 	<description>"Greatest hauling mod ever" - Chicken Plucker
 
-	v0.18.1.3
+	v0.18.1.4
 	
 Colonists will gather stuff in their inventory, then haul it all to a stockpile.
 
diff --git a/Assemblies/PickUpAndHaul.dll b/Assemblies/PickUpAndHaul.dll
index 7f6ab6c2a4545b1f639079ac1c0696c36dfa448c..254552b740fdb943a2969f536b30a9f0b82bb4f9 100644
GIT binary patch
delta 8953
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

delta 8858
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
M;Jm-E_Da|P0<{$hrT_o{

diff --git a/Source/PickUpAndHaul/PickUpAndHaul/CompHauledToInventory.cs b/Source/PickUpAndHaul/PickUpAndHaul/CompHauledToInventory.cs
index bd91332..f1070af 100644
--- a/Source/PickUpAndHaul/PickUpAndHaul/CompHauledToInventory.cs
+++ b/Source/PickUpAndHaul/PickUpAndHaul/CompHauledToInventory.cs
@@ -20,7 +20,7 @@ public HashSet<Thing> GetHashSet()
         
         public void RegisterHauledItem(Thing thing)
         {
-                this.TakenToInventory.Add(thing);
+            this.TakenToInventory.Add(thing);
         }
 
         public override void PostExposeData()
diff --git a/Source/PickUpAndHaul/PickUpAndHaul/HarmonyPatches.cs b/Source/PickUpAndHaul/PickUpAndHaul/HarmonyPatches.cs
index 79fa6cb..2659d72 100644
--- a/Source/PickUpAndHaul/PickUpAndHaul/HarmonyPatches.cs
+++ b/Source/PickUpAndHaul/PickUpAndHaul/HarmonyPatches.cs
@@ -40,7 +40,7 @@ static HarmonyPatches()
                 new HarmonyMethod(typeof(HarmonyPatches), nameof(IdleJoy_Postfix)), null);
 
             if (ModCompatibilityCheck.KnownConflict) Log.Message("Pick Up And Haul has found a conflicting mod and will lay dormant.");
-            if (!ModCompatibilityCheck.KnownConflict) Log.Message("PickUpAndHaul v0.18.1.3 welcomes you to RimWorld with pointless logspam.");
+            else Log.Message("PickUpAndHaul v0.18.1.4 welcomes you to RimWorld with pointless logspam.");
         }
 
         private static bool Drop_Prefix(ref Pawn pawn, ref Thing thing)
@@ -68,18 +68,22 @@ private static void Pawn_InventoryTracker_PostFix(Pawn_InventoryTracker __instan
                 Log.Warning(__instance.pawn + " cannot Pick Up and Haul. Does not inherit from BasePawn. Patch failed or mod incompatibility.");
                 return;
             }
+
             HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
 
-            if (__instance.pawn.Spawned && __instance.pawn.Faction.IsPlayer) //weird issue with worldpawns and guests
+            //if (__instance.pawn.Spawned) //weird issue with worldpawns was caused by not having the comp
+            //{
+            //    if (__instance.pawn.Faction?.IsPlayer ?? false) //roaming muffalo
+            //    {
+            if (carriedThing?.Count != 0)
             {
-                if (carriedThing?.Count != 0)
+                if (carriedThing.Contains(item))
                 {
-                    if (carriedThing.Contains(item))
-                    {
-                        carriedThing.Remove(item);
-                    }
+                    carriedThing.Remove(item);
                 }
             }
+            //    }
+            //} 
         }
 
         private static void JobDriver_HaulToCell_PostFix(JobDriver_HaulToCell __instance)
@@ -145,7 +149,6 @@ public static IEnumerable<CodeInstruction> FloatMenuMakerMad_AddHumanlikeOrders_
                     //    //{ instructionList[i + 5].labels = instruction.labels;}
                     //    instructionList.RemoveRange(i, 5);
                     //    patched = true;
-
                 }
                 yield return instruction;
             }
diff --git a/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_HaulToInventory.cs b/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_HaulToInventory.cs
index 3a5475c..172342c 100644
--- a/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_HaulToInventory.cs
+++ b/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_HaulToInventory.cs
@@ -7,7 +7,6 @@
 using Verse.AI;
 using System.Diagnostics;
 using UnityEngine;
-using Verse.Sound;
 
 namespace PickUpAndHaul
 {
@@ -32,7 +31,7 @@ protected override IEnumerable<Toil> MakeNewToils()
             {
                 initAction = () =>
                 {
-                    this.pawn.pather.StartPath(this.TargetThingA, PathEndMode.ClosestTouch); //thing to change in case of persistent tweener issues. Shouldn't happen though.
+                    this.pawn.pather.StartPath(this.TargetThingA, PathEndMode.ClosestTouch);
                 },
                 defaultCompleteMode = ToilCompleteMode.PatherArrival
             };
@@ -46,24 +45,22 @@ protected override IEnumerable<Toil> MakeNewToils()
                     Pawn actor = this.pawn;
                     Thing thing = actor.CurJob.GetTarget(TargetIndex.A).Thing;
                     Toils_Haul.ErrorCheckForCarry(actor, thing);
-                    int num = Mathf.Min(this.job.count, thing.stackCount, MassUtility.CountToPickUpUntilOverEncumbered(actor, thing)); //hauling jobs are stupid and the count is often set to 99999
+
+                    int num = Mathf.Min(thing.stackCount, MassUtility.CountToPickUpUntilOverEncumbered(actor, thing));
                     if (num <= 0)
                     {
                         Job haul = HaulAIUtility.HaulToStorageJob(actor, thing);
-                        if (haul != null)
+
+                        if (haul?.TryMakePreToilReservations(actor) ?? false)
                         {
-                            if (haul.TryMakePreToilReservations(actor))
-                            {
-                                actor.jobs.jobQueue.EnqueueFirst(haul, new JobTag?(JobTag.Misc));
-                                return;
-                            }
+                            actor.jobs.jobQueue.EnqueueFirst(haul, new JobTag?(JobTag.Misc));
                         }
                         actor.jobs.curDriver.JumpToToil(wait);
                     }
                     else
                     {
-                        actor.inventory.GetDirectlyHeldThings().TryAdd(thing.SplitOff(num), false); 
                         //Merging and unmerging messes up the picked up ID (which already gets messed up enough)
+                        actor.inventory.GetDirectlyHeldThings().TryAdd(thing.SplitOff(num), false); 
                         takenToInventory.RegisterHauledItem(thing);
                     }
                 }
@@ -72,7 +69,7 @@ protected override IEnumerable<Toil> MakeNewToils()
             yield return CheckDuplicateItemsToHaulToInventory(reserveTargetA, TargetIndex.A, false);
             yield return wait;
         }
-
+        
 
         //regular Toils_Haul.CheckForGetOpportunityDuplicate isn't going to work for our purposes, since we're not carrying anything. 
         //Carrying something yields weird results with unspawning errors when transfering to inventory, so we copy-past-- I mean, implement our own.
@@ -85,11 +82,11 @@ public static Toil CheckDuplicateItemsToHaulToInventory(Toil getHaulTargetToil,
                 Job curJob = actor.jobs.curJob;
 
                 Predicate<Thing> validator = (Thing t) => t.Spawned
-                && HaulAIUtility.PawnCanAutomaticallyHaulFast(actor, t, false)
-                && (takeFromValidStorage || !t.IsInValidStorage())
-                && !t.IsForbidden(actor)
-                && actor.CanReserve(t, 1, -1, null, false)
-                && (extraValidator == null || extraValidator(t));
+                    && HaulAIUtility.PawnCanAutomaticallyHaulFast(actor, t, false)
+                    && (takeFromValidStorage || !t.IsInValidStorage())
+                    && !t.IsForbidden(actor)
+                    && actor.CanReserve(t, 1, -1, null, false)
+                    && (extraValidator == null || extraValidator(t));
 
                 Thing thing = GenClosest.ClosestThingReachable(actor.Position, actor.Map, ThingRequest.ForGroup(ThingRequestGroup.HaulableAlways), PathEndMode.ClosestTouch, 
                     TraverseParms.For(actor, Danger.Deadly, TraverseMode.ByPawn, false), 8f, validator, null, 0, -1, false, RegionType.Set_Passable, false);
@@ -97,17 +94,24 @@ public static Toil CheckDuplicateItemsToHaulToInventory(Toil getHaulTargetToil,
                 {
                     curJob.SetTarget(haulableInd, thing);
                     actor.jobs.curDriver.JumpToToil(getHaulTargetToil);
+                    return;
                 }
-                else if (thing != null)
+                if (thing != null)
                 {
                     Job haul = HaulAIUtility.HaulToStorageJob(actor, thing);
-                    if (haul != null) //because it can return null, and that ruins my day.
+                    if (haul?.TryMakePreToilReservations(actor) ?? false)
                     {
-                        if (haul.TryMakePreToilReservations(actor))
-                        {
-                            actor.jobs.jobQueue.EnqueueFirst(haul, new JobTag?(JobTag.Misc));
-                            return;
-                        }
+                        actor.jobs.jobQueue.EnqueueFirst(haul, new JobTag?(JobTag.Misc));
+                        return;
+                    }
+                }
+                if (thing == null && actor.jobs.jobQueue.Count == 0)
+                {
+                    Job job = new Job(PickUpAndHaulJobDefOf.UnloadYourHauledInventory);
+                    if (job.TryMakePreToilReservations(actor))
+                    {
+                        actor.jobs.jobQueue.EnqueueFirst(job, new JobTag?(JobTag.Misc));
+                        return;
                     }
                 }
             };
diff --git a/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs b/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs
index 5d93f4f..4709ed9 100644
--- a/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs
+++ b/Source/PickUpAndHaul/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs
@@ -12,7 +12,7 @@ public class JobDriver_UnloadYourHauledInventory : JobDriver
     {
         private int countToDrop = -1;
 
-        private const int UnloadDuration = 10;
+        private const int UnloadDuration = 3;
 
         public override void ExposeData()
         {
@@ -27,7 +27,7 @@ public override bool TryMakePreToilReservations()
 
 
         /// <summary>
-        /// Find spot, reserve spot, goto spot, 
+        /// Find spot, reserve spot, pull thing out of inventory, go to spot, drop stuff, repeat.
         /// </summary>
         /// <returns></returns>
         [DebuggerHidden]
@@ -37,7 +37,7 @@ protected override IEnumerable<Toil> MakeNewToils()
             HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
 
             Toil wait = Toils_General.Wait(UnloadDuration);
-            Toil celebrate = Toils_General.Wait(10);
+            Toil celebrate = Toils_General.Wait(UnloadDuration);
 
 
             yield return wait;
@@ -55,7 +55,9 @@ protected override IEnumerable<Toil> MakeNewToils()
 
                     if (unloadableThing.Count != 0)
                     {
-                        if (!StoreUtility.TryFindStoreCellNearColonyDesperate(unloadableThing.Thing, this.pawn, out IntVec3 c))
+                        StoragePriority currentPriority = HaulAIUtility.StoragePriorityAtFor(pawn.Position, unloadableThing.Thing);
+                        if (!StoreUtility.TryFindBestBetterStoreCellFor(unloadableThing.Thing, pawn, pawn.Map, currentPriority, pawn.Faction, out IntVec3 c, true))
+                        //if (!StoreUtility.TryFindStoreCellNearColonyDesperate(unloadableThing.Thing, this.pawn, out IntVec3 c))
                         {
                             this.pawn.inventory.innerContainer.TryDrop(unloadableThing.Thing, ThingPlaceMode.Near, unloadableThing.Thing.stackCount, out Thing thing, null);
                             this.EndJobWith(JobCondition.Succeeded);
@@ -111,41 +113,41 @@ protected override IEnumerable<Toil> MakeNewToils()
         ThingStackPart FirstUnloadableThing(Pawn pawn)
         {
             CompHauledToInventory takenToInventory = pawn.TryGetComp<CompHauledToInventory>();
-            HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
-            
-            //List<Thing> mergedList = pawn.inventory.innerContainer.Union(carriedThing).ToList();
+            HashSet<Thing> carriedThings = takenToInventory.GetHashSet();
 
+            //List<Thing> mergedList = pawn.inventory.innerContainer.Union(carriedThing).ToList();
 
+            //TODO: Merge stacks upon unload.
+            
             //find the overlap.
-            var potentialThingToUnload =
+            IEnumerable<Thing> potentialThingsToUnload =
                 from t in pawn.inventory.innerContainer
-                where carriedThing.Contains(t)
+                where carriedThings.Contains(t)
                 select t;
 
-            foreach (Thing thing in carriedThing)
+            foreach (Thing thing in carriedThings)
             {
-
                 //partially picked up stacks get a different thingID in inventory
-                if (!potentialThingToUnload.Contains(thing))
+                if (!potentialThingsToUnload.Contains(thing))
                 {
-                    carriedThing.Remove(thing);
                     ThingDef stragglerDef = thing.def;
                     
                     //we have no method of grabbing the newly generated thingID. This is the solution to that.
-                    var dirtyStragglers =
+                    IEnumerable<Thing> dirtyStragglers =
                         from straggler in pawn.inventory.innerContainer
                         where straggler.def == stragglerDef
-                        select straggler;                    
+                        select straggler;
+
+                    carriedThings.Remove(thing);
 
                     foreach (Thing dirtyStraggler in dirtyStragglers)
                     {
-                        Predicate<Thing> validator = (Thing t) => t.def == stragglerDef;
-                        carriedThing.RemoveWhere(validator);
+                        //Predicate<Thing> validator = (Thing t) => t.def == stragglerDef;
+                        //carriedThings.RemoveWhere(validator);
                         return new ThingStackPart(dirtyStraggler, dirtyStraggler.stackCount);
                     }
-                                    
                 }
-                return new ThingStackPart(thing, thing.stackCount); //pawn.inventory.innerContainer.Intersect(carriedThing).Max(t => t.stackCount));
+                return new ThingStackPart(thing, thing.stackCount);
             }
             return default(ThingStackPart);
         }
diff --git a/Source/PickUpAndHaul/PickUpAndHaul/PawnUnloadChecker.cs b/Source/PickUpAndHaul/PickUpAndHaul/PawnUnloadChecker.cs
index 8025277..cf632f2 100644
--- a/Source/PickUpAndHaul/PickUpAndHaul/PawnUnloadChecker.cs
+++ b/Source/PickUpAndHaul/PickUpAndHaul/PawnUnloadChecker.cs
@@ -14,7 +14,6 @@ public class PawnUnloadChecker
 
         public static void CheckIfPawnShouldUnloadInventory(Pawn pawn, bool forced = false)
         {
-
             Job job = new Job(PickUpAndHaulJobDefOf.UnloadYourHauledInventory);
             CompHauledToInventory takenToInventory = pawn.TryGetComp<CompHauledToInventory>();
             if (takenToInventory == null)
@@ -23,28 +22,21 @@ public static void CheckIfPawnShouldUnloadInventory(Pawn pawn, bool forced = fal
                 return;
             }
             HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
-            
-            if (ModCompatibilityCheck.KnownConflict)
-            {
-                return;
-            }
 
-            if (pawn.Faction != Faction.OfPlayer || !pawn.RaceProps.Humanlike)
-            {
-                return;
-            }
-            
-            if (carriedThing?.Count == 0 || pawn.inventory.innerContainer.Count == 0)
-            {
-                return;
-            }
+            if (ModCompatibilityCheck.KnownConflict) return;
+            if (pawn.Faction != Faction.OfPlayer || !pawn.RaceProps.Humanlike) return;
+            if (carriedThing?.Count == 0 || pawn.inventory.innerContainer.Count == 0) return;
 
             if (carriedThing.Count != 0)
             {
                 Thing thing = null;
                 try
                 {
-                    carriedThing.Contains(thing);
+                    if (carriedThing.Contains(thing))
+                    {
+                        carriedThing.Remove(thing);
+                        Log.Warning(pawn + " removed thing null from Pick Up and Haul inventory");
+                    }
                 }
                 catch (Exception arg)
                 {
@@ -53,7 +45,7 @@ public static void CheckIfPawnShouldUnloadInventory(Pawn pawn, bool forced = fal
                     pawn.inventory.UnloadEverything = true;
                 }
             }
-            
+
             if (forced)
             {
                 if (job.TryMakePreToilReservations(pawn))
@@ -63,7 +55,7 @@ public static void CheckIfPawnShouldUnloadInventory(Pawn pawn, bool forced = fal
                 }
             }
 
-            if (MassUtility.EncumbrancePercent(pawn) >= 0.90f || carriedThing.Count >= 2)
+            if (MassUtility.EncumbrancePercent(pawn) >= 0.90f || carriedThing.Count >= 1)
             {
                 if (job.TryMakePreToilReservations(pawn))
                 {
@@ -79,10 +71,8 @@ public static void CheckIfPawnShouldUnloadInventory(Pawn pawn, bool forced = fal
                     CompRottable compRottable = rottable.TryGetComp<CompRottable>();
                     if (compRottable != null)
                     {
-                        //Log.Message(pawn + " compRottable" + rottable);
                         if (compRottable.TicksUntilRotAtCurrentTemp < 30000)
                         {
-                            //Log.Message(pawn + " " + compRottable.TicksUntilRotAtCurrentTemp);
                             pawn.jobs.jobQueue.EnqueueFirst(job, new JobTag?(JobTag.Misc));
                             return;
                         }
@@ -90,15 +80,6 @@ public static void CheckIfPawnShouldUnloadInventory(Pawn pawn, bool forced = fal
                 }
             }
             
-            //if (carriedThing.Count >= 3) //try to unload a bit less aggressively
-            //{
-            //    if (job.TryMakePreToilReservations(pawn))
-            //    {
-            //        pawn.jobs.jobQueue.EnqueueFirst(job, new JobTag?(JobTag.Misc));
-            //        return;
-            //    }
-            //}
-
             if (Find.TickManager.TicksGame % 50 == 0 && pawn.inventory.innerContainer.Count < carriedThing.Count)
             {
                 Log.Warning("[PickUpAndHaul] " + pawn + " inventory was found out of sync with haul index. Pawn will drop their inventory.");
diff --git a/Source/PickUpAndHaul/PickUpAndHaul/Properties/AssemblyInfo.cs b/Source/PickUpAndHaul/PickUpAndHaul/Properties/AssemblyInfo.cs
index fb75447..1c5d04c 100644
--- a/Source/PickUpAndHaul/PickUpAndHaul/Properties/AssemblyInfo.cs
+++ b/Source/PickUpAndHaul/PickUpAndHaul/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.18.1.3")]
-[assembly: AssemblyFileVersion("1.0.0.545")]
+[assembly: AssemblyVersion("0.18.1.4")]
+[assembly: AssemblyFileVersion("1.0.0.548")]
diff --git a/Source/PickUpAndHaul/PickUpAndHaul/WorkGiver_HaulToInventory.cs b/Source/PickUpAndHaul/PickUpAndHaul/WorkGiver_HaulToInventory.cs
index 5053c23..25fb1f3 100644
--- a/Source/PickUpAndHaul/PickUpAndHaul/WorkGiver_HaulToInventory.cs
+++ b/Source/PickUpAndHaul/PickUpAndHaul/WorkGiver_HaulToInventory.cs
@@ -26,35 +26,19 @@ public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
 
             CompHauledToInventory takenToInventory = pawn.TryGetComp<CompHauledToInventory>();
 
-            if (t is Corpse)
-            {
-                return null;
-            }
-            if (!HaulAIUtility.PawnCanAutomaticallyHaulFast(pawn, t, forced))
-            {
-                return null;
-            }
+            if (t is Corpse) return null;
 
-            if (ModCompatibilityCheck.KnownConflict)
-            {
-                return null;
-            }
+            if (!HaulAIUtility.PawnCanAutomaticallyHaulFast(pawn, t, forced)) return null;
 
-            if (t.IsForbidden(pawn) || StoreUtility.IsInValidBestStorage(t))
-            {
-                return null;
-            }
+            if (ModCompatibilityCheck.KnownConflict) return null;
+            
+            if (t.IsForbidden(pawn) || StoreUtility.IsInValidBestStorage(t)) return null;
 
-            if (ModCompatibilityCheck.Simplesidearms && t.def.defName.Contains("Chunk")) //because who doesn't love hardcoded checks?
-            {
-                return HaulAIUtility.HaulToStorageJob(pawn, t);
-            }
+            //because who doesn't love hardcoded checks?
+            if (ModCompatibilityCheck.Simplesidearms && t.def.defName.Contains("Chunk")) return HaulAIUtility.HaulToStorageJob(pawn, t);
 
-            //if bulky gear (power armor + minigun) would prevent them carrying lots, don't bother.
-            if (MassUtility.GearMass(pawn) / MassUtility.Capacity(pawn) >= 0.7f)
-            {
-                return null;
-            }
+            //bulky gear (power armor + minigun) so don't bother.
+            if (MassUtility.GearMass(pawn) / MassUtility.Capacity(pawn) >= 0.7f) return null;
 
             StoragePriority currentPriority = HaulAIUtility.StoragePriorityAtFor(t.Position, t);
             if (StoreUtility.TryFindBestBetterStoreCellFor(t, pawn, pawn.Map, currentPriority, pawn.Faction, out IntVec3 storeCell, true)) 
@@ -70,7 +54,7 @@ public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
                         {
                             Thing thing = thingList[i];
                             if (thing.def == ThingDefOf.Hopper)
-                                return HaulAIUtility.HaulToStorageJob(pawn, t);
+                            return HaulAIUtility.HaulToStorageJob(pawn, t);
                         }
                     }
                 }
@@ -90,15 +74,7 @@ public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
             //credit to Dingo
             int c = MassUtility.CountToPickUpUntilOverEncumbered(pawn, t);
 
-            if (c == 0)
-            {
-                return HaulAIUtility.HaulToStorageJob(pawn, t);
-            }
-
-            else if (c >= 2 && t.def.BaseMass >= 1)
-            {
-                return HaulAIUtility.HaulToStorageJob(pawn, t);
-            }
+            if (c == 0) return HaulAIUtility.HaulToStorageJob(pawn, t);
 
             return new Job(PickUpAndHaulJobDefOf.HaulToInventory, t)
             {