/// <summary> /// Adds dimension containing buildings if there were none. Should be called when first Interdimensional Shed is built. /// </summary> public override void InitializeDimensionBuilding() { if (dimensionInfo == null || getDimensionLocation() != null) { return; } // TODO Possibly unnecessary. Depends on host event rules Game1.addMail(ModEntry.ShedPurchaseMailId, true, true); Utility.TraceLog($"Initializing dimension building for {dimensionInfo.DisplayName}"); var farmhouseWarp = Game1.getFarm().GetMainFarmHouseEntry(); var b = new DimensionBuilding(dimensionInfo, new BluePrint("Big Shed"), new Vector2(-100, -100)); foreach (var warp in b.indoors.Value.warps) { // Give the warp back sensible defaults, since these are off the map warp.TargetX = farmhouseWarp.X; warp.TargetY = farmhouseWarp.Y; } Game1.getFarm().buildings.Add(b); Utility.TraceLog($"Dimension building initialized for {dimensionInfo.DisplayName}"); }
public void InitializeAfterLoad() { var farmBuildings = Game1.getFarm().buildings; // Take any buildings for which mods have been unloaded out of the pool unloadedDimensionBuildings.AddRange(farmBuildings.Where(building => building.modData.ContainsKey(DimensionBuilding.ModData_ShedDimensionKey) && data.getDimensionInfo(building.modData[DimensionBuilding.ModData_ShedDimensionKey]) == null)); if (unloadedDimensionBuildings.Count() > 0) { Utility.Log($"Hiding buildings which are missing mod data: {string.Join(", ", unloadedDimensionBuildings.Select(b => b.modData[DimensionBuilding.ModData_ShedDimensionKey]))}"); } // The vanilla saved versions of our custom buildings vanillaBuildings.AddRange(Game1.getFarm().buildings.Where(building => building.modData.ContainsKey(DimensionBuilding.ModData_ShedDimensionKey))); // Change the vanilla into custom versions customBuildings.AddRange(vanillaBuildings.Select(building => { var db = new DimensionBuilding( data.getDimensionInfo(building.modData[DimensionBuilding.ModData_ShedDimensionKey]), new BluePrint(building.buildingType.Value), new Vector2(building.tileX.Value, building.tileY.Value)); db.modData = building.modData; Utility.TransferObjects(building.indoors.Value, db.indoors.Value); return(db); })); AfterSaved(); }