public void DockBoat(BaseBoat boat, BaseHouse house) { List<ISpawnable> list = boat.GetMovingEntities(); foreach (ISpawnable o in list) { if (!(o is Item) || o == this || boat.IsComponentItem(o) || o is EffectItem || o == boat.TillerMan) continue; Item item = o as Item; if (!item.Deleted && boat.Contains(item)) { if (item is AddonComponent || item is BaseAddon) { BaseAddon addon = item is AddonComponent ? ((AddonComponent)item).Addon : (BaseAddon)item; Item deed = addon.Deed; bool retainDeedHue = false; int hue = 0; if (addon != null && addon.RetainDeedHue) { retainDeedHue = true; for (int j = 0; hue == 0 && j < addon.Components.Count; ++j) { AddonComponent c = addon.Components[j]; if (c.Hue != 0) hue = c.Hue; } } if (deed != null) { if (retainDeedHue) deed.Hue = hue; house.DropToMovingCrate(deed); } } else { item.Delete(); } } Container cont; if (boat is BaseGalleon) cont = ((BaseGalleon)boat).GalleonHold; else cont = boat.Hold; if (cont != null) { cont.Items.ForEach(i => { if (i is BaseWeapon) house.DropToMovingCrate(i); else i.Delete(); }); } } BaseDockedBoat model = boat.BoatItem; if (model == null || model.Deleted) model = boat.DockedBoat; if (model == null) return; model.BoatItem = boat; if (boat.IsClassicBoat && boat.Owner != null) boat.RemoveKeys(boat.Owner); house.DropToMovingCrate(model); boat.OnDryDock(); boat.Refresh(); boat.Internalize(); list.Clear(); list.TrimExcess(); }