internal void ReclaimWeapons(bool force = false)
        {
            if (base.Map == null)
            {
                return;
            }

            List <ThingWithComps> l = BuildingUtil.FindThingsOfTypeNextTo <ThingWithComps>(base.Map, base.Position, 1);

            if (l.Count > 0)
            {
                foreach (ThingWithComps t in l)
                {
                    if (!this.AddWeapon(t) &&
                        force &&
                        t.Spawned &&
                        (t.def.IsWeapon || CombatExtendedUtil.IsAmmo(t)) &&
                        !t.def.defName.Equals("WoodLog"))
                    {
                        t.DeSpawn();
                        if (this.forceAddedWeapons == null)
                        {
                            forceAddedWeapons = new List <Thing>(l.Count);
                        }
                        this.forceAddedWeapons.Add(t);
                    }
                }
                l.Clear();
            }
        }
        public override void Notify_ReceivedThing(Thing newItem)
        {
            if (!this.AllowAdds)
            {
                if (!newItem.Spawned)
                {
                    DropThing(newItem);
                }
                return;
            }

            if (!((newItem is ThingWithComps) && ((ThingWithComps)newItem).def.IsWeapon) &&
                !CombatExtendedUtil.IsAmmo(newItem))
            {
                if (!newItem.Spawned)
                {
                    DropThing(newItem);
                }
                return;
            }

            base.Notify_ReceivedThing(newItem);

            if (!CombatExtendedUtil.AddAmmo(newItem))
            {
                if (newItem is ThingWithComps &&
                    !this.Contains((ThingWithComps)newItem))
                {
                    // Must go after 'contains' check. In the case of 'drop on floor' Notify_ReceiveThing gets called before the weapon is removed from the list
                    if (newItem.Spawned)
                    {
                        newItem.DeSpawn();
                    }

                    if (!this.AddWeapon(newItem as ThingWithComps) &&
                        !WorldComp.Add(newItem as ThingWithComps))
                    {
                        BuildingUtil.DropThing(newItem, this, this.CurrentMap, true);
                    }
                }
            }
        }