private static void SwapThing(ThingWithComps thing, ThingDef newDef)
        {
            var map = thing.Map;
            var loc = thing.Position;
            var rot = thing.Rotation;

            var eqTracker = thing.ParentHolder as Pawn_EquipmentTracker;

            if (eqTracker != null)
            {
                eqTracker.Remove(thing);
            }
            else
            {
                thing.DeSpawn();
            }

            thing.def = newDef;

            // Refresh verbs.
            foreach (var comp in thing.AllComps)
            {
                if (comp is IVerbOwner verbOwner && verbOwner.VerbTracker is VerbTracker verbTracker)
                {
                    VerbsNeedReinitOnLoad(verbTracker);
                    _ = verbTracker.AllVerbs;
                }
            }

            // Refresh graphics.
            thing.Notify_ColorChanged();

            if (eqTracker != null)
            {
                eqTracker.AddEquipment(thing);
            }
            else if (GenSpawn.Spawn(thing, loc, map, rot) != null)
            {
                Find.Selector.Select(thing, playSound: false);
            }
        }