summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/StardewModdingAPI.Tests/Core/ModResolverTests.cs2
-rw-r--r--src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs29
-rw-r--r--src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs18
-rw-r--r--src/StardewModdingAPI/Framework/Models/ModDataRecord.cs7
-rw-r--r--src/StardewModdingAPI/StardewModdingAPI.config.json335
-rw-r--r--src/StardewModdingAPI/StardewModdingAPI.csproj1
6 files changed, 253 insertions, 139 deletions
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<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
- "UpdateUr