// Copyright (c) 2022 bradson // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. namespace PerformanceFish.JobSystem; public class WorkGiver_MergeOptimization : ClassWithFishPatches { public class JobOnThing_Patch : FishPatch { public override string Description => "Removes mergeables from ListerMergeables if they no longer qualify as mergeable when trying to check for a merging job on them. Vanilla RimWorld just fails and keeps them in"; public override MethodBase TargetMethodInfo => AccessTools.Method(typeof(WorkGiver_Merge), nameof(WorkGiver_Merge.JobOnThing)); public static void Prefix(Thing t) { if (t.GetSlotGroup() is null) RemoveFromListerMergeables(t); } private static void RemoveFromListerMergeables(Thing t) { var map = t.MapHeld; map.listerMergeables.TryRemove(t); map.listerHaulables.Check(t); } } }