internal static void Prefix(Pawn pawn, Thing refuelable)
            {
                if (WorldComp.HasInfiniteStorages(refuelable.Map))
                {
                    droppedAndStorage = new Dictionary <Thing, Building_InfiniteStorage>();

                    ThingFilter filter = refuelable.TryGetComp <CompRefuelable>().Props.fuelFilter;

                    foreach (Building_InfiniteStorage storage in WorldComp.GetInfiniteStorages(refuelable.Map))
                    {
                        if (storage.Spawned && storage.Map == pawn.Map && storage.IsOperational)
                        {
                            List <Thing> removed;
                            if (storage.TryRemove(filter, out removed))
                            {
                                List <Thing> removedThings = new List <Thing>();
                                foreach (Thing t in removed)
                                {
                                    BuildingUtil.DropThing(t, t.def.stackLimit, storage, storage.Map, removedThings);
                                }

                                if (removedThings.Count > 0)
                                {
                                    droppedAndStorage.Add(removedThings[0], storage);
                                }
                            }
                        }
                    }
                }
            }
        static void Postfix(ref int __result, RecipeWorkerCounter __instance, Bill_Production bill)
        {
            List <ThingDefCountClass> products = __instance.recipe.products;

            if (WorldComp.HasInfiniteStorages(bill.Map) && products != null)
            {
                foreach (ThingDefCountClass product in products)
                {
                    ThingDef def = product.thingDef;
                    foreach (Building_InfiniteStorage s in WorldComp.GetInfiniteStorages(bill.Map))
                    {
                        __result += s.StoredThingCount(def, bill.ingredientFilter);
                    }
                }
            }
        }
        static bool Prefix(Designator_Build __instance, Event ev)
        {
            if (entDefFI == null)
            {
                entDefFI     = typeof(Designator_Build).GetField("entDef", BindingFlags.NonPublic | BindingFlags.Instance);
                stuffDefFI   = typeof(Designator_Build).GetField("stuffDef", BindingFlags.NonPublic | BindingFlags.Instance);
                writeStuffFI = typeof(Designator_Build).GetField("writeStuff", BindingFlags.NonPublic | BindingFlags.Instance);
            }

            Map map = Find.CurrentMap;

            ThingDef thingDef = entDefFI.GetValue(__instance) as ThingDef;

            if (thingDef == null || !thingDef.MadeFromStuff || !WorldComp.HasInfiniteStorages(map))
            {
                return(true);
            }

            List <FloatMenuOption> list = new List <FloatMenuOption>();

            foreach (ThingDef current in map.resourceCounter.AllCountedAmounts.Keys)
            {
                if (current.IsStuff && current.stuffProps.CanMake(thingDef) && (DebugSettings.godMode || map.listerThings.ThingsOfDef(current).Count > 0))
                {
                    ThingDef localStuffDef = current;
                    string   labelCap      = localStuffDef.LabelCap;
                    list.Add(new FloatMenuOption(labelCap, delegate
                    {
                        __instance.ProcessInput(ev);
                        Find.DesignatorManager.Select(__instance);
                        stuffDefFI.SetValue(__instance, current);
                        writeStuffFI.SetValue(__instance, true);
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
            }

            foreach (Building_InfiniteStorage storage in WorldComp.GetInfiniteStorages(map))
            {
                if (storage.Spawned)
                {
                    foreach (Thing t in storage.StoredThings)
                    {
                        ThingDef current = t.def;
                        if (current.IsStuff &&
                            current.stuffProps.CanMake(thingDef) &&
                            (DebugSettings.godMode || t.stackCount > 0))
                        {
                            string labelCap = current.LabelCap;
                            list.Add(new FloatMenuOption(labelCap, delegate
                            {
                                __instance.ProcessInput(ev);
                                Find.DesignatorManager.Select(__instance);
                                stuffDefFI.SetValue(__instance, current);
                                writeStuffFI.SetValue(__instance, true);
                            }, MenuOptionPriority.Default, null, null, 0f, null, null));
                        }
                    }
                }
            }

            if (list.Count == 0)
            {
                Messages.Message("NoStuffsToBuildWith".Translate(), MessageTypeDefOf.RejectInput);
            }
            else
            {
                FloatMenu floatMenu = new FloatMenu(list);
                floatMenu.vanishIfMouseDistant = true;
                Find.WindowStack.Add(floatMenu);
                Find.DesignatorManager.Select(__instance);
            }
            return(false);
        }