diff --git a/src/StardewModdingAPI.Tests/Core/ModResolverTests.cs b/src/StardewModdingAPI.Tests/Core/ModResolverTests.cs index 2d65eee9..6a3fded6 100644 --- a/src/StardewModdingAPI.Tests/Core/ModResolverTests.cs +++ b/src/StardewModdingAPI.Tests/Core/ModResolverTests.cs @@ -144,7 +144,7 @@ namespace StardewModdingAPI.Tests.Core this.SetupMetadataForValidation(mock, new ModDataRecord { Compatibility = new[] { new ModCompatibility("~1.0", ModStatus.AssumeBroken, null) }, - UpdateUrls = new[] { "http://example.org" } + AlternativeUrl = "http://example.org" }); // act diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs index 31ba5bc5..4d20e7c8 100644 --- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs +++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs @@ -53,17 +53,22 @@ namespace StardewModdingAPI.Framework.ModLoading error = $"parsing its manifest failed:\n{ex.GetLogSummary()}"; } - // validate metadata + // get internal data record (if any) ModDataRecord dataRecord = null; if (manifest != null) { - // get unique key for lookups string key = !string.IsNullOrWhiteSpace(manifest.UniqueID) ? manifest.UniqueID : manifest.EntryDll; - - // get data record dataRecord = dataRecords.FirstOrDefault(record => record.ID.Matches(key, manifest)); } + // apply defaults + if (dataRecord?.Defaults != null) + { + manifest.ChucklefishID = manifest.ChucklefishID ?? dataRecord.Defaults.ChucklefishID; + manifest.GitHubProject = manifest.GitHubProject ?? dataRecord.Defaults.GitHubProject; + manifest.NexusID = manifest.NexusID ?? dataRecord.Defaults.NexusID; + } + // build metadata string displayName = !string.IsNullOrWhiteSpace(manifest?.Name) ? manifest.Name @@ -100,13 +105,27 @@ namespace StardewModdingAPI.Framework.ModLoading case ModStatus.AssumeBroken: { + // get reason string reasonPhrase = compatibility.ReasonPhrase ?? "it's no longer compatible"; + + // get update URLs + List updateUrls = new List(); + if (!string.IsNullOrWhiteSpace(mod.Manifest.ChucklefishID)) + updateUrls.Add($"https://community.playstarbound.com/resources/{mod.Manifest.ChucklefishID}"); + if (!string.IsNullOrWhiteSpace(mod.Manifest.NexusID)) + updateUrls.Add($"http://nexusmods.com/stardewvalley/mods/{mod.Manifest.NexusID}"); + if (!string.IsNullOrWhiteSpace(mod.Manifest.GitHubProject)) + updateUrls.Add($"https://github.com/{mod.Manifest.GitHubProject}/releases"); + if (mod.DataRecord.AlternativeUrl != null) + updateUrls.Add(mod.DataRecord.AlternativeUrl); + + // build error string error = $"{reasonPhrase}. Please check for a "; if (mod.Manifest.Version.Equals(compatibility.UpperVersion)) error += "newer version"; else error += $"version newer than {compatibility.UpperVersion}"; - error += " at " + string.Join(" or ", mod.DataRecord.UpdateUrls); + error += " at " + string.Join(" or ", updateUrls); mod.SetStatus(ModMetadataStatus.Failed, error); } diff --git a/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs b/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs new file mode 100644 index 00000000..e0ab94b8 --- /dev/null +++ b/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs @@ -0,0 +1,18 @@ +namespace StardewModdingAPI.Framework.Models +{ + /// Default values for support fields to inject into the manifest. + internal class ModDataDefaults + { + /********* + ** Accessors + *********/ + /// The mod's unique ID in the Chucklefish mod site (if any), used for update checks. + public string ChucklefishID { get; set; } + + /// The mod's unique ID in Nexus Mods (if any), used for update checks. + public string NexusID { get; set; } + + /// The mod's organisation and project name on GitHub (if any), used for update checks. + public string GitHubProject { get; set; } + } +} diff --git a/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs b/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs index de219076..9f19d5f0 100644 --- a/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs +++ b/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs @@ -17,8 +17,11 @@ namespace StardewModdingAPI.Framework.Models /// The mod name. public string Name { get; set; } - /// The URLs the user can check for a newer version. - public string[] UpdateUrls { get; set; } + /// Default values for support fields to inject into the manifest. + public ModDataDefaults Defaults { get; set; } + + /// The URL where the player can get an unofficial or alternative version of the mod if the official version isn't compatible. + public string AlternativeUrl { get; set; } /// The compatibility of given mod versions (if any). [JsonConverter(typeof(SFieldConverter))] diff --git a/src/StardewModdingAPI/StardewModdingAPI.config.json b/src/StardewModdingAPI/StardewModdingAPI.config.json index 75b884f5..d2d28625 100644 --- a/src/StardewModdingAPI/StardewModdingAPI.config.json +++ b/src/StardewModdingAPI/StardewModdingAPI.config.json @@ -48,7 +48,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "AccessChestAnywhere", "ID": "AccessChestAnywhere", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/257", "http://www.nexusmods.com/stardewvalley/mods/518" ], + "Defaults": { "NexusID": 257 }, + "AlternativeUrl": "https://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SDV 1.1 } @@ -56,7 +57,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "AdjustArtisanPrices", "ID": "1e36d4ca-c7ef-4dfb-9927-d27a6c3c8bdc", - "UpdateUrls": [ "http://community.playstarbound.com/resources/3532", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 3532 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.1": { "Status": "AssumeBroken" } // broke in SMAPI 1.9 } @@ -64,7 +66,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Advanced Location Loader", "ID": "Entoarox.AdvancedLocationLoader", - "UpdateUrls": [ "http://community.playstarbound.com/resources/3619" ], + "Defaults": { "ChucklefishID": 3619 }, "Compatibility": { "~1.2.10": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -72,7 +74,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "AgingMod", "ID": "skn.AgingMod", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1129", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1129 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -80,7 +83,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Almighty Tool", "ID": "AlmightyTool.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/439" ], + "Defaults": { "NexusID": 439 }, "Compatibility": { "~1.1.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -95,7 +98,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Animal Sitter", "ID": "AnimalSitter.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/581", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 581 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.8": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -103,7 +107,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "A Tapper's Dream", "ID": "ddde5195-8f85-4061-90cc-0d4fd5459358", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/260", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 260 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.4": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -111,7 +116,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Better Sprinklers", "ID": "SPDSprinklersMod | Speeder.BetterSprinklers", // changed in 2.3 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/41", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 41 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~2.3.1-pathoschild-update": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -119,7 +125,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Birthday Mail", "ID": "005e02dc-d900-425c-9c68-1ff55c5a295d", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/276", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 276 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.2.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -127,7 +134,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Build Endurance", "ID": "{ID:'4be88c18-b6f3-49b0-ba96-f94b1a5be890', Name:'BuildEndurance'}", // disambiguate from other Alpha_Omegasis mods - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/445", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 445 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -135,7 +143,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Build Health", "ID": "{ID:'4be88c18-b6f3-49b0-ba96-f94b1a5be890', Name:'BuildHealth'}", // disambiguate from other Alpha_Omegasis mods - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/446", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 446 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -143,7 +152,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Buy Cooking Recipes", "ID": "Denifia.BuyRecipes", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1126", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1126 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -151,7 +161,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Buy Back Collectables", "ID": "BuyBackCollectables", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/507", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 507 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -159,7 +170,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Chest Label System", "ID": "SPDChestLabel", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/242", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 242 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SDV 1.1 } @@ -167,7 +179,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Chest Pooling", "ID": "ChestPooling.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/111988" ], + "Defaults": { "GitHubProject": "mralbobo/stardew-chest-pooling" }, "Compatibility": { "~1.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -175,7 +187,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Chests Anywhere", "ID": "ChestsAnywhere | Pathoschild.ChestsAnywhere", // changed in 1.9 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/518" ], + "Defaults": { "NexusID": 518 }, "Compatibility": { "~1.9-beta": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -183,7 +195,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Choose Baby Gender", "ID": "ChooseBabyGender.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/590", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 590 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -191,7 +204,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "CJB Automation", "ID": "CJBAutomation", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/211", "http://www.nexusmods.com/stardewvalley/mods/1063" ], + "Defaults": { "NexusID": 211 }, + "AlternativeUrl": "http://www.nexusmods.com/stardewvalley/mods/1063", "Compatibility": { "~1.4": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -199,7 +213,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "CJB Cheats Menu", "ID": "CJBCheatsMenu", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/4" ], + "Defaults": { "NexusID": 4 }, "Compatibility": { "~1.12": { "Status": "AssumeBroken" } // broke in SDV 1.1 } @@ -207,7 +221,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "CJB Item Spawner", "ID": "CJBItemSpawner", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/93" ], + "Defaults": { "NexusID": 93 }, "Compatibility": { "~1.5": { "Status": "AssumeBroken" } // broke in SDV 1.1 } @@ -215,7 +229,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "CJB Show Item Sell Price", "ID": "CJBShowItemSellPrice", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/93" ], + "Defaults": { "NexusID": 5 }, "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -223,7 +237,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Climates of Ferngill", "ID": "KoihimeNakamura.ClimatesOfFerngill", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/604", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 604 }, "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -231,7 +245,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Cold Weather Haley", "ID": "LordXamon.ColdWeatherHaleyPRO", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1169", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1169 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -246,7 +261,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Combat with Farm Implements", "ID": "SPDFarmingImplementsInCombat", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/313", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 313 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -254,7 +270,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Configurable Shipping Dates", "ID": "ConfigurableShippingDates", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/675", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 675 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -262,7 +279,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Cooking Skill", "ID": "CookingSkill | spacechase0.CookingSkill", // changed in 1.0.4–6 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/522" ], + "Defaults": { "NexusID": 522 }, "Compatibility": { "~1.0.6": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -270,7 +287,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "CrabNet", "ID": "CrabNet.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/584", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 584 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.4": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -278,7 +296,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Customize Exterior", "ID": "CustomizeExterior", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1099" ], + "Defaults": { "NexusID": 1099 }, "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -286,7 +304,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Customizable Traveling Cart Days", "ID": "TravelingCartYyeahdude", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/567", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 567 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -294,7 +313,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Daily News", "ID": "bashNinja.DailyNews", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1141", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1141 }, "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -302,7 +321,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Dynamic Checklist", "ID": "gunnargolf.DynamicChecklist", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1145", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1145 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -310,7 +330,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Dynamic Machines", "ID": "DynamicMachines", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/374", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 374 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -318,7 +339,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Empty Hands", "ID": "QuicksilverFox.EmptyHands", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1176", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1176 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -326,7 +348,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Enemy Health Bars", "ID": "SPDHealthBar", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/193", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 193 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.7": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -334,7 +357,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Entoarox Framework", "ID": "eacdb74b-4080-4452-b16b-93773cda5cf9 | Entoarox.EntoaroxFramework", // changed in ??? - "UpdateUrls": [ "http://community.playstarbound.com/resources/4228" ], + "Defaults": { "ChucklefishID": 4228 }, "Compatibility": { "~1.7.9": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -342,7 +365,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Extended Fridge", "ID": "Mystra007ExtendedFridge", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/485", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 485 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -350,7 +374,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Extended Greenhouse", "ID": "ExtendedGreenhouse", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4303", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4303 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -358,7 +383,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Fall 28 Snow Day", "ID": "{ID:'7ad4f6f7-c3de-4729-a40f-7a11d2b2a358', Name:'Fall28 Snow Day'}", // disambiguate from other mods by Alpha_Omegasis - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/486", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 486 }, "Compatibility": { "~1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -366,7 +391,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Farm Automation: Barn Door Automation", "ID": "FarmAutomation.BarnDoorAutomation.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/111931", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -374,7 +399,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Farm Automation: Item Collector", "ID": "FarmAutomation.ItemCollector.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/111931", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -382,7 +407,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Farm Automation Unofficial: Item Collector", "ID": "Maddy99.FarmAutomation.ItemCollector", - "UpdateUrls": [ "http://community.playstarbound.com/threads/125172", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.5": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -390,7 +415,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Farm Expansion", "ID": "3888bdfd-73f6-4776-8bb7-8ad45aea1915 | AdvizeFarmExpansionMod-2-0 | AdvizeFarmExpansionMod-2-0-5", // changed in 2.0 and 2.0.5 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/130", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 130 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~2.0.5": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -398,7 +424,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Farm Resource Generator", "ID": "FarmResourceGenerator.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/647", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 647 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.4": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -406,7 +433,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Faster Run", "ID": "FasterRun.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/733", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 733 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -414,7 +442,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "FlorenceMod", "ID": "FlorenceMod.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/591", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 591 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -422,7 +451,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Forage at the Farm", "ID": "ForageAtTheFarm", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/673", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 673 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.5.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -430,7 +460,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Instant Geode", "ID": "InstantGeode", - "UpdateUrls": [ "http://community.playstarbound.com/threads/109038", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.12": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -438,7 +468,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Gate Opener", "ID": "GateOpener.dll | mralbobo.GateOpener", // changed in 1.1 - "UpdateUrls": [ "http://community.playstarbound.com/threads/111988" ], + "Defaults": { "GitHubProject": "mralbobo/stardew-gate-opener" }, "Compatibility": { "~1.0.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -446,7 +476,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "GenericShopExtender", "ID": "GenericShopExtender", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/814", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 814 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.1.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -454,7 +485,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Get Dressed", "ID": "GetDressed.dll | Advize.GetDressed", // changed in 3.3 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/331" ], + "Defaults": { "NexusID": 331 }, "Compatibility": { "~3.3": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -462,7 +493,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Gift Taste Helper", "ID": "8008db57-fa67-4730-978e-34b37ef191d6", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/229" ], + "Defaults": { "NexusID": 229 }, "Compatibility": { "~2.3.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -470,7 +501,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Happy Animals", "ID": "HappyAnimals", - "UpdateUrls": [ "https://community.playstarbound.com/threads/126655", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -478,7 +509,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Happy Birthday", "ID": "{ID:'HappyBirthday', Author:'Alpha_Omegasis'}", // disambiguate from Oxyligen's fork - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/520", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 520 }, "Compatibility": { "~1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -486,7 +517,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Harvest With Scythe", "ID": "965169fd-e1ed-47d0-9f12-b104535fb4bc", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/236", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 236 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.6": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -494,7 +526,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Hunger for Food", "ID": "HungerForFoodByTigerle", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/810", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 810 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.1.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -502,7 +535,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Improved Quality of Life", "ID": "Demiacle.ImprovedQualityOfLife", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1025", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1025 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -510,7 +544,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Less Strict Over-Exertion (AntiExhaustion)", "ID": "BALANCEMOD_AntiExhaustion", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/637", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 637 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -518,7 +553,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Lookup Anything", "ID": "LookupAnything | Pathoschild.LookupAnything", // changed in 1.10.1 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/541" ], + "Defaults": { "NexusID": 541 }, "Compatibility": { "~1.10.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -526,7 +561,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Loved Labels", "ID": "LovedLabels.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/279" ], + "Defaults": { "NexusID": 279 }, "Compatibility": { "~2.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -534,7 +569,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Luck Skill", "ID": "LuckSkill | spacechase0.LuckSkill", // changed in 0.1.4 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/521" ], + "Defaults": { "NexusID": 521 }, "Compatibility": { "~0.1.4": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -542,7 +577,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "MailOrderPigs", "ID": "MailOrderPigs.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/632", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 632 }, "Compatibility": { "~1.0.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -550,7 +585,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Makeshift Multiplayer", "ID": "StardewValleyMP | spacechase0.StardewValleyMP", // changed in 0.3 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/501", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 501 }, "Compatibility": { "~0.3.6": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -558,7 +593,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Message Box [API]? (ChatMod)", "ID": "Kithio:ChatMod", - "UpdateUrls": [ "http://community.playstarbound.com/resources/message-box-api.4296", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4296 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -573,7 +609,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "More Artifact Spots", "ID": "451", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/451", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 451 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -581,7 +618,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "More Pets", "ID": "821ce8f6-e629-41ad-9fde-03b54f68b0b6MOREPETS | Entoarox.MorePets", // changed in 1.3 - "UpdateUrls": [ "http://community.playstarbound.com/resources/4288" ], + "Defaults": { "ChucklefishID": 4288 }, "Compatibility": { "~1.3.2": { "Status": "AssumeBroken" } // overhauled for SMAPI 1.11+ compatibility } @@ -589,7 +626,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "More Rain", "ID": "{ID:'4108e859-333c-4fec-a1a7-d2e18c1019fe', Name:'More_Rain'}", // disambiguate from other mods by Alpha_Omegasis - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/441", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 441 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.4": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -597,7 +635,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Multiple Sprites and Portraits On Rotation (File Loading)", "ID": "FileLoading", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1094", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1094 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.12": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -605,7 +644,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Museum Rearranger", "ID": "{ID:'7ad4f6f7-c3de-4729-a40f-7a11d2b2a358', Name:'Museum Rearranger'}", // disambiguate from other mods by Alpha_Omegasis - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/428", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 428 }, "Compatibility": { "~1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -613,15 +652,16 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "New Machines", "ID": "F70D4FAB-0AB2-4B78-9F1B-AF2CA2236A59", - "UpdateUrls": [ "http://community.playstarbound.com/resources/3683", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 3683 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~4.2.1343": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } }, { "Name": "Night Owl", + "Defaults": { "NexusID": 433 }, "ID": "{ID:'SaveAnywhere', Name:'Stardew_NightOwl'}", // disambiguate from Save Anywhere - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/433", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], "Compatibility": { "~2.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -636,7 +676,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "NoSoilDecay", "ID": "289dee03-5f38-4d8e-8ffc-e440198e8610", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/237", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 237 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.5": { "Status": "AssumeBroken" } // broke in SDV 1.2, and uses Assembly.GetExecutingAssembly().Location } @@ -644,7 +685,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "NPC Map Locations", "ID": "NPCMapLocationsMod", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/239" ], + "Defaults": { "NexusID": 239 }, "Compatibility": { "1.42~1.43": { "Status": "AssumeBroken", "ReasonPhrase": "this version has an update check error which crashes the game." } } @@ -652,7 +693,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "NPC Speak", "ID": "NpcEcho.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/694", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 694 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -660,7 +702,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "OmniFarm", "ID": "BlueMod_OmniFarm", - "UpdateUrls": [ "http://community.playstarbound.com/threads/127299", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "GitHubProject": "lambui/StardewValleyMod_OmniFarm" }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~2.0.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -668,7 +711,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Part of the Community", "ID": "SB_PotC", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/923" ], + "Defaults": { "NexusID": 923 }, "Compatibility": { "~1.0.8": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -676,7 +719,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "PelicanFiber", "ID": "PelicanFiber.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/631", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 631 }, "Compatibility": { "~3.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -684,7 +727,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "PelicanTTS", "ID": "Platonymous.PelicanTTS", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1079", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1079 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -692,7 +736,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Persival's BundleMod", "ID": "BundleMod.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/438", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 438 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.1 } @@ -700,7 +745,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Point-and-Plant", "ID": "PointAndPlant.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/572", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 572 }, "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -708,7 +753,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "PrairieKingMadeEasy", "ID": "PrairieKingMadeEasy.dll", - "UpdateUrls": [ "http://community.playstarbound.com/resources/3594", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 3594 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -716,7 +762,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "RainRandomizer", "ID": "RainRandomizer.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/111526", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -724,7 +770,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "RelationshipsEnhanced", "ID": "relationshipsenhanced", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4435", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4435 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -732,7 +779,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "RelationShipStatus", "ID": "relationshipstatus", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/751", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 751 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.5": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -740,7 +788,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Replanter", "ID": "Replanter.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/589", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 589 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.4": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -748,7 +797,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Reusable Wallpapers and Floors (Wallpaper Retain)", "ID": "dae1b553-2e39-43e7-8400-c7c5c836134b", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/356", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 356 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.5": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -756,7 +806,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Rush Orders", "ID": "RushOrders | spacechase0.RushOrders", // changed in 1.1 - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/605" ], + "Defaults": { "NexusID": 605 }, "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -764,7 +814,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Save Anywhere", "ID": "{ID:'SaveAnywhere', Name:'Save Anywhere'}", // disambiguate from Night Owl - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/444", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 444 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~2.4": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -772,7 +823,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Seasonal Immersion", "ID": "EntoaroxSeasonalHouse | EntoaroxSeasonalBuildings | EntoaroxSeasonalImmersion | Entoarox.SeasonalImmersion", // changed in 1.1, 1.6 or earlier, and 1.7 - "UpdateUrls": [ "http://community.playstarbound.com/resources/4262", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4262 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.8.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -780,7 +832,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Send Items", "ID": "Denifia.SendItems", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1087", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1087 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -788,7 +841,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Shed Notifications (BuildingsNotifications)", "ID": "TheCroak.BuildingsNotifications", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/620", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 620 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.4.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -796,7 +850,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Shenandoah Project", "ID": "Shenandoah Project", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/756", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 756 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -804,7 +859,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Shipment Tracker", "ID": "7e474181-e1a0-40f9-9c11-d08a3dcefaf3", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/321", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 321 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -812,7 +868,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Shop Expander", "ID": "821ce8f6-e629-41ad-9fde-03b54f68b0b6 | EntoaroxShopExpander | Entoarox.ShopExpander", // changed in 1.5 and 1.5.2 - "UpdateUrls": [ "http://community.playstarbound.com/resources/4381", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4381 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.5.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -820,7 +877,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Showcase Mod", "ID": "Igorious.Showcase", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4487", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4487 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.9": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -828,7 +886,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Simple Sprinklers", "ID": "SimpleSprinkler.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/76", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 76 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.4": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -836,7 +895,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Siv's Marriage Mod", "ID": "6266959802", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/366", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 366 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.2.2": { "Status": "AssumeBroken" } // broke in SMAPI 1.9 (has multiple Mod instances) } @@ -844,7 +904,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Skill Prestige", "ID": "6b843e60-c8fc-4a25-a67b-4a38ac8dcf9b", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/569", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 569 }, "Compatibility": { "~1.0.9": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -852,7 +912,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Skill Prestige: Cooking Adapter", "ID": "20d6b8a3-b6e7-460b-a6e4-07c2b0cb6c63", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/569", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 569 }, "Compatibility": { "~1.0.9": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -860,7 +920,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Slower Fence Decay", "ID": "SPDSlowFenceDecay", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/252", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 252 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~0.5.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -868,7 +929,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Smart Mod", "ID": "KuroBear.SmartMod", - "UpdateUrls": [ "http://community.playstarbound.com/threads/108104", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~2.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -876,7 +937,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Solar Eclipse Event", "ID": "KoihimeNakamura.SolarEclipseEvent", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/897", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 897 }, "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -884,7 +945,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Sprinkles", "ID": "Platonymous.Sprinkles", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4592", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4592 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -892,7 +954,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Sprint and Dash", "ID": "SPDSprintAndDash", - "UpdateUrls": [ "http://community.playstarbound.com/resources/3531", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 3531 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -900,7 +963,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Sprint and Dash Redux", "ID": "SPDSprintAndDash", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4201" ], + "Defaults": { "ChucklefishID": 4201 }, "Compatibility": { "~1.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -908,7 +971,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Sprinting Mod", "ID": "a10d3097-b073-4185-98ba-76b586cba00c", - "UpdateUrls": [ "http://community.playstarbound.com/threads/108313", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "GitHubProject": "oliverpl/SprintingMod" }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~2.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -916,7 +980,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "StackSplitX", "ID": "StackSplitX.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/798" ], + "Defaults": { "NexusID": 798 }, "Compatibility": { "~1.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -924,7 +988,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "StaminaRegen", "ID": "StaminaRegen.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/111526", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -932,7 +996,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Stardew Auto Backup", "ID": "{ID:'4be88c18-b6f3-49b0-ba96-f94b1a5be890', Name:'Stardew_Save_Backup'}", // disambiguate from other Alpha_Omegasis mods - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/435", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 435 }, "Compatibility": { "~1.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -940,7 +1004,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Stardew Notification", "ID": "stardewnotification", - "UpdateUrls": [ "http://community.playstarbound.com/threads/127979", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "GitHubProject": "monopandora/StardewNotification" }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.7": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -948,7 +1013,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Stardew Symphony", "ID": "{ID:'4108e859-333c-4fec-a1a7-d2e18c1019fe', Name:'Stardew_Symphony'}", // disambiguate other mods by Alpha_Omegasis - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/425", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 425 }, "Compatibility": { "~1.3": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -963,7 +1028,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "StashItemsToChest", "ID": "BlueMod_StashItemsToChest", - "UpdateUrls": [ "http://community.playstarbound.com/threads/126906", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "GitHubProject": "lambui/StardewValleyMod_StashItemsToChest" }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -971,7 +1037,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Stone Bridge Over Pond (PondWithBridge)", "ID": "PondWithBridge.dll", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/316", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 316 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -979,7 +1046,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Super Greenhouse Warp Modifier", "ID": "SuperGreenhouse", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4334", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4334 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -987,7 +1055,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Tainted Cellar", "ID": "TaintedCellar.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/115735", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.1 or 1.11 } @@ -995,7 +1063,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Teleporter", "ID": "Teleporter", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4374", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4374 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1003,7 +1072,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Three-heart Dance Partner", "ID": "ThreeHeartDancePartner", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/500", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 500 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1011,7 +1081,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "TimeSpeed", "ID": "TimeSpeed.dll | {ID:'4108e859-333c-4fec-a1a7-d2e18c1019fe', Name:'TimeSpeed'} | {ID:'4108e859-333c-4fec-a1a7-d2e18c1019fe', Name:'TimeSpeed Mod (unofficial)'} | community.TimeSpeed", // changed in 2.0.3 and 2.1; disambiguate other mods by Alpha_Omegasis - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/169" ], + "Defaults": { "NexusID": 169 }, "Compatibility": { "~2.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1019,7 +1089,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "UiModSuite", "ID": "Demiacle.UiModSuite", - "UpdateUrls": [ "http://www.nexusmods.com/stardewvalley/mods/1023", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "NexusID": 1023 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1027,7 +1098,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "WakeUp", "ID": "WakeUp.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/111526", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -1035,7 +1106,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Wallpaper Fix", "ID": "WallpaperFix.dll", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4211", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4211 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.1": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -1043,7 +1115,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Weather Controller", "ID": "WeatherController.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/111526", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1051,7 +1123,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Wonderful Farm Life", "ID": "WonderfulFarmLife.dll", - "UpdateUrls": [ "http://community.playstarbound.com/threads/115384", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0": { "Status": "AssumeBroken" } // broke in SDV 1.1 or 1.11 } @@ -1066,7 +1138,8 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Xnb Loader", "ID": "Entoarox.XnbLoader", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4506", "http://stardewvalleywiki.com/Modding:SMAPI_2.0" ], + "Defaults": { "ChucklefishID": 4506 }, + "AlternativeUrl": "http://stardewvalleywiki.com/Modding:SMAPI_2.0", "Compatibility": { "~1.0.6": { "Status": "AssumeBroken" } // broke in SMAPI 2.0 } @@ -1074,7 +1147,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "zDailyIncrease", "ID": "zdailyincrease", - "UpdateUrls": [ "http://community.playstarbound.com/resources/4247" ], + "Defaults": { "ChucklefishID": 4247 }, "Compatibility": { "~1.2": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1082,7 +1155,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Zoom Out Extreme", "ID": "ZoomMod", - "UpdateUrls": [ "http://community.playstarbound.com/threads/115028" ], + "AlternativeUrl": "http://community.playstarbound.com/threads/115028", "Compatibility": { "~0.1": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1090,7 +1163,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Zoryn's Better RNG", "ID": "76b6d1e1-f7ba-4d72-8c32-5a1e6d2716f6 | Zoryn.BetterRNG", // changed in 1.6 - "UpdateUrls": [ "https://github.com/Zoryn4163/SMAPI-Mods/releases" ], + "Defaults": { "GitHubProject": "Zoryn4163/SMAPI-Mods" }, "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1098,7 +1171,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Zoryn's Calendar Anywhere", "ID": "a41c01cd-0437-43eb-944f-78cb5a53002a | Zoryn.CalendarAnywhere", // changed in 1.6 - "UpdateUrls": [ "https://github.com/Zoryn4163/SMAPI-Mods/releases" ], + "Defaults": { "GitHubProject": "Zoryn4163/SMAPI-Mods" }, "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1106,7 +1179,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Zoryn's Health Bars", "ID": "HealthBars.dll | Zoryn.HealthBars", // changed in 1.6 - "UpdateUrls": [ "https://github.com/Zoryn4163/SMAPI-Mods/releases" ], + "Defaults": { "GitHubProject": "Zoryn4163/SMAPI-Mods" }, "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1114,7 +1187,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Zoryn's Junimo Deposit Anywhere", "ID": "f93a4fe8-cade-4146-9335-b5f82fbbf7bc | Zoryn.JunimoDepositAnywhere", // changed in 1.6 - "UpdateUrls": [ "https://github.com/Zoryn4163/SMAPI-Mods/releases" ], + "Defaults": { "GitHubProject": "Zoryn4163/SMAPI-Mods" }, "Compatibility": { "~1.7": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1122,7 +1195,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Zoryn's Movement Mod", "ID": "8a632929-8335-484f-87dd-c29d2ba3215d | Zoryn.MovementModifier", // changed in 1.6 - "UpdateUrls": [ "https://github.com/Zoryn4163/SMAPI-Mods/releases" ], + "Defaults": { "GitHubProject": "Zoryn4163/SMAPI-Mods" }, "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SDV 1.2 } @@ -1130,7 +1203,7 @@ This file contains advanced configuration for SMAPI. You generally shouldn't cha { "Name": "Zoryn's Regen Mod", "ID": "dfac4383-1b6b-4f33-ae4e-37fc23e5252e | Zoryn.RegenMod", // changed in 1.6 - "UpdateUrls": [ "https://github.com/Zoryn4163/SMAPI-Mods/releases" ], + "Defaults": { "GitHubProject": "Zoryn4163/SMAPI-Mods" }, "Compatibility": { "~1.6": { "Status": "AssumeBroken" } // broke in SDV 1.2 } diff --git a/src/StardewModdingAPI/StardewModdingAPI.csproj b/src/StardewModdingAPI/StardewModdingAPI.csproj index 8863590b..5bf46ac6 100644 --- a/src/StardewModdingAPI/StardewModdingAPI.csproj +++ b/src/StardewModdingAPI/StardewModdingAPI.csproj @@ -91,6 +91,7 @@ Properties\GlobalAssemblyInfo.cs +