diff options
Diffstat (limited to 'src/StardewModdingAPI')
5 files changed, 252 insertions, 138 deletions
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<string> updateUrls = new List<string>(); + 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 +{ + /// <summary>Default values for support fields to inject into the manifest.</summary> + internal class ModDataDefaults + { + /********* + ** Accessors + *********/ + /// <summary>The mod's unique ID in the Chucklefish mod site (if any), used for update checks.</summary> + public string ChucklefishID { get; set; } + + /// <summary>The mod's unique ID in Nexus Mods (if any), used for update checks.</summary> + public string NexusID { get; set; } + + /// <summary>The mod's organisation and project name on GitHub (if any), used for update checks.</summary> + 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 /// <summary>The mod name.</summary> public string Name { get; set; } - /// <summary>The URLs the user can check for a newer version.</summary> - public string[] UpdateUrls { get; set; } + /// <summary>Default values for support fields to inject into the manifest.</summary> + public ModDataDefaults Defaults { get; set; } + + /// <summary>The URL where the player can get an unofficial or alternative version of the mod if the official version isn't compatible.</summary> + public string AlternativeUrl { get; set; } /// <summary>The compatibility of given mod versions (if any).</summary> [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 f |
