static void Postfix(ColonyBeds __instance, ref bool __result, Vector3Int position, ref Vector3Int bedPosition, ref BedTracker.Bed bed, int boxradius)
 {
     if (!__result)
     {
         // Log.WriteWarning("   ... But game did not find a bed either");
     }
 }
        static void Prefix(ColonyBeds __instance, Vector3Int blockPosition)
        {
            if (__instance.Owner == null)
            {
                return;
            }

            var trackers = CustomBedTracker.trackers;

            lock (trackers)
            {
                CustomBedTracker tracker;
                if (!trackers.TryGetValue(__instance.Owner, out tracker))
                {
                    return;
                }

                lock (tracker)
                {
                    tracker.Remove(blockPosition);
                    if (tracker.Count == 1)
                    {
                        trackers.Remove(__instance.Owner);
                    }
                }
            }
        }
        static bool Prefix(ColonyBeds __instance, ref bool __result, Vector3Int position, out Vector3Int bedPosition, out BedTracker.Bed bed, int boxradius)
        {
            bed         = null;
            bedPosition = Vector3Int.invalidPos;

            if (__instance.Owner == null)
            {
                return(true);
            }

            var trackers = CustomBedTracker.trackers;

            lock (trackers)
            {
                CustomBedTracker tracker;
                if (!trackers.TryGetValue(__instance.Owner, out tracker))
                {
                    return(true);
                }

                lock (tracker)
                {
                    if (tracker.TryGetClosestUnused(position, out bedPosition, out bed, boxradius))
                    {
                        __result = true;
                        return(false);
                    }
                }
            }

            // Log.WriteWarning("FindCloserBed: Did not find any available beds");
            return(true);
        }
        static void Prefix(ColonyBeds __instance, Vector3Int blockPosition, bool state)
        {
            if (__instance.Owner == null)
            {
                return;
            }

            var trackers = CustomBedTracker.trackers;

            lock (trackers)
            {
                CustomBedTracker tracker;
                if (!trackers.TryGetValue(__instance.Owner, out tracker))
                {
                    return;
                }

                lock (tracker)
                {
                    tracker.SetState(blockPosition, state);
                }
            }
        }