static bool Prefix(ref ILoadReferenceable refee, string label, bool saveDestroyedThings)
        {
            if (!PersistentWorldManager.GetInstance().PersistentWorldNotNull() || !PersistentWorldManager.GetInstance().PersistentWorldNotNullAndLoadStatusIsNot(PersistentWorldLoadSaver.PersistentWorldLoadStatus.Converting))
            {
                return(true);
            }

            var persistentWorld = PersistentWorldManager.GetInstance().PersistentWorld;

            switch (Scribe.mode)
            {
            case LoadSaveMode.Saving:
                if (refee == null)
                {
                    Scribe.saver.WriteElement(label, "null");
                    break;
                }

                if (refee is Thing thing &&
                    Scribe_References.CheckSaveReferenceToDestroyedThing(thing, label, saveDestroyedThings))
                {
                    break;
                }

                Scribe.saver.WriteElement(label, refee.GetUniqueLoadID());
                Scribe.saver.loadIDsErrorsChecker.RegisterReferenced(refee, label);
                break;

            case LoadSaveMode.LoadingVars:
                var xmlNode      = (XmlNode)Scribe.loader.curXmlParent[label];
                var targetLoadID = xmlNode?.InnerText;

                persistentWorld.LoadSaver.ReferenceTable.RequestReference(label, targetLoadID);

                if (refee != null)
                {
                    Scribe.loader.crossRefs.loadIDs.RegisterLoadIDReadFromXml(targetLoadID, refee.GetType(), label);
                }
                break;

            case LoadSaveMode.ResolvingCrossRefs:
                refee = persistentWorld.LoadSaver.ReferenceTable.ResolveReference(label);
                break;
            }

            return(false);
        }