diff --git a/README.md b/README.md index 63adcf78..349916cc 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,6 @@ folder containing `src`). StardewModdingAPI StardewModdingAPI.AssemblyRewriters.dll StardewModdingAPI.config.json - StardewModdingAPI.data.json StardewModdingAPI.exe StardewModdingAPI.exe.mdb steam_appid.txt @@ -97,7 +96,6 @@ folder containing `src`). Newtonsoft.Json.dll StardewModdingAPI.AssemblyRewriters.dll StardewModdingAPI.config.json - StardewModdingAPI.data.json StardewModdingAPI.exe StardewModdingAPI.pdb StardewModdingAPI.xml diff --git a/src/StardewModdingAPI/Constants.cs b/src/StardewModdingAPI/Constants.cs index 76003b69..8b085eac 100644 --- a/src/StardewModdingAPI/Constants.cs +++ b/src/StardewModdingAPI/Constants.cs @@ -62,9 +62,6 @@ namespace StardewModdingAPI /// The file path for the SMAPI configuration file. internal static string ApiConfigPath => Path.Combine(Constants.ExecutionPath, $"{typeof(Program).Assembly.GetName().Name}.config.json"); - /// The file path for the SMAPI data file containing metadata about known mods. - internal static string ApiModMetadataPath => Path.Combine(Constants.ExecutionPath, $"{typeof(Program).Assembly.GetName().Name}.data.json"); - /// The file path to the log where the latest output should be saved. internal static string LogPath => Path.Combine(Constants.LogDir, "SMAPI-latest.txt"); diff --git a/src/StardewModdingAPI/Framework/Models/UserSettings.cs b/src/StardewModdingAPI/Framework/Models/SConfig.cs similarity index 56% rename from src/StardewModdingAPI/Framework/Models/UserSettings.cs rename to src/StardewModdingAPI/Framework/Models/SConfig.cs index a0074f77..558da82a 100644 --- a/src/StardewModdingAPI/Framework/Models/UserSettings.cs +++ b/src/StardewModdingAPI/Framework/Models/SConfig.cs @@ -1,15 +1,18 @@ namespace StardewModdingAPI.Framework.Models { - /// Contains user settings from SMAPI's JSON configuration file. - internal class UserSettings + /// The SMAPI configuration settings. + internal class SConfig { - /********* + /******** ** Accessors - *********/ + ********/ /// Whether to enable development features. public bool DeveloperMode { get; set; } /// Whether to check if a newer version of SMAPI is available on startup. public bool CheckForUpdates { get; set; } = true; + + /// A list of mod versions which should be considered incompatible. + public IncompatibleMod[] IncompatibleMods { get; set; } } } diff --git a/src/StardewModdingAPI/Program.cs b/src/StardewModdingAPI/Program.cs index b8a16e79..eadbaaeb 100644 --- a/src/StardewModdingAPI/Program.cs +++ b/src/StardewModdingAPI/Program.cs @@ -47,8 +47,8 @@ namespace StardewModdingAPI /// The core logger for SMAPI. private readonly Monitor Monitor; - /// The user settings for SMAPI. - private UserSettings Settings; + /// The SMAPI configuration settings. + private readonly SConfig Settings; /// Tracks whether the game should exit immediately and any pending initialisation should be cancelled. private readonly CancellationTokenSource CancellationTokenSource = new CancellationTokenSource(); @@ -87,6 +87,10 @@ namespace StardewModdingAPI /// Construct an instance. internal Program(bool writeToConsole) { + // load settings + this.Settings = JsonConvert.DeserializeObject(File.ReadAllText(Constants.ApiConfigPath)); + + // initialise this.Monitor = new Monitor("SMAPI", this.ConsoleManager, this.LogFile, this.ExitGameImmediately) { WriteToConsole = writeToConsole }; this.DeprecationManager = new DeprecationManager(this.Monitor, this.ModRegistry); } @@ -99,20 +103,6 @@ namespace StardewModdingAPI this.Monitor.Log($"SMAPI {Constants.ApiVersion} with Stardew Valley {Game1.version} on {Environment.OSVersion}", LogLevel.Info); Console.Title = $"SMAPI {Constants.ApiVersion} - running Stardew Valley {Game1.version}"; - // read settings - { - string settingsPath = Constants.ApiConfigPath; - if (File.Exists(settingsPath)) - { - string json = File.ReadAllText(settingsPath); - this.Settings = JsonConvert.DeserializeObject(json); - } - else - this.Settings = new UserSettings(); - - File.WriteAllText(settingsPath, JsonConvert.SerializeObject(this.Settings, Formatting.Indented)); - } - // inject compatibility shims #pragma warning disable 618 Command.Shim(this.CommandManager, this.DeprecationManager, this.ModRegistry); @@ -341,20 +331,6 @@ namespace StardewModdingAPI AssemblyLoader modAssemblyLoader = new AssemblyLoader(this.TargetPlatform, this.Monitor); AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => modAssemblyLoader.ResolveAssembly(e.Name); - // get known incompatible mods - IDictionary incompatibleMods; - try - { - incompatibleMods = File.Exists(Constants.ApiModMetadataPath) - ? JsonConvert.DeserializeObject(File.ReadAllText(Constants.ApiModMetadataPath)).ToDictionary(p => p.ID, p => p) - : new Dictionary(0); - } - catch (Exception ex) - { - incompatibleMods = new Dictionary(); - this.Monitor.Log($"Couldn't read metadata file at {Constants.ApiModMetadataPath}. SMAPI will still run, but some features may be disabled.\n{ex}", LogLevel.Warn); - } - // load mod assemblies int modsLoaded = 0; List deprecationWarnings = new List(); // queue up deprecation warnings to show after mod list @@ -413,23 +389,26 @@ namespace StardewModdingAPI } // validate known incompatible mods - IncompatibleMod compatibility; - if (incompatibleMods.TryGetValue(!string.IsNullOrWhiteSpace(manifest.UniqueID) ? manifest.UniqueID : manifest.EntryDll, out compatibility)) { - if (!compatibility.IsCompatible(manifest.Version)) + string modKey = !string.IsNullOrWhiteSpace(manifest.UniqueID) ? manifest.UniqueID : manifest.EntryDll; + IncompatibleMod compatibility = this.Settings.IncompatibleMods.FirstOrDefault(p => p.ID == modKey); + if(compatibility != null) { - bool hasOfficialUrl = !string.IsNullOrWhiteSpace(compatibility.UpdateUrl); - bool hasUnofficialUrl = !string.IsNullOrWhiteSpace(compatibility.UnofficialUpdateUrl); + if (!compatibility.IsCompatible(manifest.Version)) + { + bool hasOfficialUrl = !string.IsNullOrWhiteSpace(compatibility.UpdateUrl); + bool hasUnofficialUrl = !string.IsNullOrWhiteSpace(compatibility.UnofficialUpdateUrl); - string reasonPhrase = compatibility.ReasonPhrase ?? "it isn't compatible with the latest version of the game"; - string warning = $"Skipped {compatibility.Name} because {reasonPhrase}. Please check for a version newer than {compatibility.UpperVersion} here:"; - if (hasOfficialUrl) - warning += !hasUnofficialUrl ? $" {compatibility.UpdateUrl}" : $"{Environment.NewLine}- official mod: {compatibility.UpdateUrl}"; - if (hasUnofficialUrl) - warning += $"{Environment.NewLine}- unofficial update: {compatibility.UnofficialUpdateUrl}"; + string reasonPhrase = compatibility.ReasonPhrase ?? "it isn't compatible with the latest version of the game"; + string warning = $"Skipped {compatibility.Name} because {reasonPhrase}. Please check for a version newer than {compatibility.UpperVersion} here:"; + if (hasOfficialUrl) + warning += !hasUnofficialUrl ? $" {compatibility.UpdateUrl}" : $"{Environment.NewLine}- official mod: {compatibility.UpdateUrl}"; + if (hasUnofficialUrl) + warning += $"{Environment.NewLine}- unofficial update: {compatibility.UnofficialUpdateUrl}"; - this.Monitor.Log(warning, LogLevel.Error); - continue; + this.Monitor.Log(warning, LogLevel.Error); + continue; + } } } diff --git a/src/StardewModdingAPI/StardewModdingAPI.config.json b/src/StardewModdingAPI/StardewModdingAPI.config.json index 2abaf73a..e971c324 100644 --- a/src/StardewModdingAPI/StardewModdingAPI.config.json +++ b/src/StardewModdingAPI/StardewModdingAPI.config.json @@ -1,4 +1,241 @@ -{ +/* + + +This file contains advanced configuration for SMAPI. You +generally shouldn't change this file unless necessary. + + +*/ +{ "DeveloperMode": true, - "CheckForUpdates": true + "CheckForUpdates": true, + "IncompatibleMods": [ + /* versions which crash the game */ + { + "Name": "NPC Map Locations", + "ID": "NPCMapLocationsMod", + "LowerVersion": "1.42", + "UpperVersion": "1.43", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/239", + "ReasonPhrase": "this version has an update check error which crashes the game" + }, + + /* versions not compatible with Stardew Valley 1.1+ */ + { + "Name": "Chest Label System", + "ID": "SPDChestLabel", + "UpperVersion": "1.5", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/242", + "UnofficialUpdateUrl": "http://community.playstarbound.com/threads/125031", + "ForceCompatibleVersion": "^1.5-EntoPatch" + }, + + /* versions not compatible with Stardew Valley 1.2+ */ + { + "Name": "AccessChestAnywhere", + "ID": "AccessChestAnywhere", + "UpperVersion": "1.1", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/257", + "UnofficialUpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/518", + "Notes": "Crashes with 'Method not found: Void StardewValley.Item.set_Name(System.String)'." + }, + { + "Name": "Almighty Tool", + "ID": "AlmightyTool.dll", + "UpperVersion": "1.1.1", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/439", + "Notes": "Uses obsolete StardewModdingAPI.Extensions." + }, + { + "Name": "Better Sprinklers", + "ID": "SPDSprinklersMod", + "UpperVersion": "2.1", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/41", + "UnofficialUpdateUrl": "http://community.playstarbound.com/threads/125031", + "ForceCompatibleVersion": "^2.1-EntoPatch.7", + "Notes": "Uses obsolete StardewModdingAPI.Extensions." + }, + { + "Name": "Casks Anywhere", + "ID": "CasksAnywhere", + "UpperVersion": "1.1", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/878", + "Notes": "Uses obsolete StardewModdingAPI.Inheritance.ItemStackChange." + }, + { + "Name": "Chests Anywhere", + "ID": "ChestsAnywhere", + "UpperVersion": "1.8.2", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/518", + "Notes": "Crashes with 'Method not found: Void StardewValley.Menus.TextBox.set_Highlighted(Boolean)'." + }, + { + "Name": "Chests Anywhere", + "ID": "Pathoschild.ChestsAnywhere", + "UpperVersion": "1.9-beta", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/518", + "Notes": "ID changed in 1.9. Crashes with InvalidOperationException: 'The menu doesn't seem to have a player inventory'." + }, + { + "Name": "CJB Automation", + "ID": "CJBAutomation", + "UpperVersion": "1.4", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/211", + "Notes": "Crashes with 'Method not found: Void StardewValley.Item.set_Name(System.String)'." + }, + { + "Name": "CJB Cheats Menu", + "ID": "CJBCheatsMenu", + "UpperVersion": "1.13", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/4", + "Notes": "Uses removed Game1.borderFont." + }, + { + "Name": "CJB Item Spawner", + "ID": "CJBItemSpawner", + "UpperVersion": "1.6", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/93", + "Notes": "Uses removed Game1.borderFont." + }, + { + "Name": "Cooking Skill", + "ID": "CookingSkill", + "UpperVersion": "1.0.3", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/522", + "Notes": "Crashes with 'Method not found: Void StardewValley.Buff..ctor(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, System.String)'." + }, + { + "Name": "Enemy Health Bars", + "ID": "SPDHealthBar", + "UpperVersion": "1.7", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/193", + "Notes": "Uses obsolete GraphicsEvents.DrawTick." + }, + { + "Name": "Entoarox Framework", + "ID": "eacdb74b-4080-4452-b16b-93773cda5cf9", + "UpperVersion": "1.6.5", + "UpdateUrl": "http://community.playstarbound.com/resources/4228", + "Notes": "Uses obsolete StardewModdingAPI.Inheritance.SObject until 1.6.1; then crashes until 1.6.4 ('Entoarox Framework requested an immediate game shutdown: Fatal error attempting to update player tick properties System.NullReferenceException: Object reference not set to an instance of an object. at Entoarox.Framework.PlayerHelper.Update(Object s, EventArgs e)')." + }, + { + "Name": "Extended Fridge", + "ID": "Mystra007ExtendedFridge", + "UpperVersion": "1.0", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/485", + "Notes": "Actual upper version is 0.94, but mod incorrectly sets it to 1.0 in the manifest. Crashes with 'Field not found: StardewValley.Game1.mouseCursorTransparency'." + }, + { + "Name": "Get Dressed", + "ID": "GetDressed.dll", + "UpperVersion": "3.2", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/331", + "Notes": "Crashes with NullReferenceException in GameEvents.UpdateTick." + }, + { + "Name": "Lookup Anything", + "ID": "LookupAnything", + "UpperVersion": "1.10", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/541", + "Notes": "Crashes with FormatException when looking up NPCs." + }, + { + "Name": "Lookup Anything", + "ID": "Pathoschild.LookupAnything", + "UpperVersion": "1.10.1", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/541", + "Notes": "ID changed in 1.10.1. Crashes with FormatException when looking up NPCs." + }, + { + "Name": "Makeshift Multiplayer", + "ID": "StardewValleyMP", + "UpperVersion": "0.2.10", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/501", + "Notes": "Uses obsolete GraphicsEvents.OnPreRenderHudEventNoCheck." + }, + { + "Name": "NoSoilDecay", + "ID": "289dee03-5f38-4d8e-8ffc-e440198e8610", + "UpperVersion": "0.5", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/237", + "Notes": "Uses Assembly.GetExecutingAssembly().Location." + }, + { + "Name": "Point-and-Plant", + "ID": "PointAndPlant.dll", + "UpperVersion": "1.0.2", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/572", + "Notes": "Uses obsolete StardewModdingAPI.Extensions." + }, + { + "Name": "Reusable Wallpapers", + "ID": "dae1b553-2e39-43e7-8400-c7c5c836134b", + "UpperVersion": "1.5", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/356", + "Notes": "Uses obsolete StardewModdingAPI.Inheritance.ItemStackChange." + }, + { + "Name": "Save Anywhere", + "ID": "SaveAnywhere", + "UpperVersion": "2.0", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/444", + "Notes": "Depends on StarDustCore." + }, + { + "Name": "StackSplitX", + "ID": "StackSplitX.dll", + "UpperVersion": "1.0", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/798", + "Notes": "Uses SMAPI's internal SGame class." + }, + { + "Name": "StarDustCore", + "ID": "StarDustCore", + "UpperVersion": "1.0", + "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/683", + "Notes": "Crashes with 'Method not found: Void StardewModdingAPI.Command.CallCommand(System.String)'." + }, + { + "Name": "Teleporter", + "ID": "Teleporter", + "UpperVersion": "1.0.2", + "UpdateUrl": "http://community.playstarbound.com/resources/4374", + "Notes": "Crashes with 'InvalidOperationException: The StardewValley.Menus.MapPage object doesn't have a private 'points' instance field'." + }, + { + "Name": "Zoryn's Better RNG", + "ID": "76b6d1e1-f7ba-4d72-8c32-5a1e6d2716f6", + "UpperVersion": "1.5", + "UpdateUrl": "http://community.playstarbound.com/threads/108756", + "Notes": "Uses SMAPI's internal SGame class." + }, + { + "Name": "Zoryn's Calendar Anywhere", + "ID": "a41c01cd-0437-43eb-944f-78cb5a53002a", + "UpperVersion": "1.5", + "UpdateUrl": "http://community.playstarbound.com/threads/108756", + "Notes": "Uses SMAPI's internal SGame class." + }, + { + "Name": "Zoryn's Health Bars", + "ID": "HealthBars.dll", + "UpperVersion": "1.5", + "UpdateUrl": "http://community.playstarbound.com/threads/108756", + "Notes": "Uses SMAPI's internal SGame class." + }, + { + "Name": "Zoryn's Movement Mod", + "ID": "8a632929-8335-484f-87dd-c29d2ba3215d", + "UpperVersion": "1.5", + "UpdateUrl": "http://community.playstarbound.com/threads/108756", + "Notes": "Uses SMAPI's internal SGame class." + }, + { + "Name": "Zoryn's Regen Mod", + "ID": "dfac4383-1b6b-4f33-ae4e-37fc23e5252e", + "UpperVersion": "1.5", + "UpdateUrl": "http://community.playstarbound.com/threads/108756", + "Notes": "Uses SMAPI's internal SGame class." + } + ] } diff --git a/src/StardewModdingAPI/StardewModdingAPI.csproj b/src/StardewModdingAPI/StardewModdingAPI.csproj index 796980cb..72cc1ed2 100644 --- a/src/StardewModdingAPI/StardewModdingAPI.csproj +++ b/src/StardewModdingAPI/StardewModdingAPI.csproj @@ -150,6 +150,7 @@ + @@ -182,7 +183,6 @@ - @@ -209,9 +209,6 @@ Always - - Always - Always @@ -255,7 +252,6 @@ - diff --git a/src/StardewModdingAPI/StardewModdingAPI.data.json b/src/StardewModdingAPI/StardewModdingAPI.data.json deleted file mode 100644 index a28dc3e8..00000000 --- a/src/StardewModdingAPI/StardewModdingAPI.data.json +++ /dev/null @@ -1,236 +0,0 @@ -/* - - -This file contains advanced metadata for SMAPI. You shouldn't change this file. - - -*/ -[ - /* versions which crash the game */ - { - "Name": "NPC Map Locations", - "ID": "NPCMapLocationsMod", - "LowerVersion": "1.42", - "UpperVersion": "1.43", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/239", - "ReasonPhrase": "this version has an update check error which crashes the game" - }, - - /* versions not compatible with Stardew Valley 1.1+ */ - { - "Name": "Chest Label System", - "ID": "SPDChestLabel", - "UpperVersion": "1.5", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/242", - "UnofficialUpdateUrl": "http://community.playstarbound.com/threads/125031", - "ForceCompatibleVersion": "^1.5-EntoPatch" - }, - - /* versions not compatible with Stardew Valley 1.2+ */ - { - "Name": "AccessChestAnywhere", - "ID": "AccessChestAnywhere", - "UpperVersion": "1.1", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/257", - "UnofficialUpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/518", - "Notes": "Crashes with 'Method not found: Void StardewValley.Item.set_Name(System.String)'." - }, - { - "Name": "Almighty Tool", - "ID": "AlmightyTool.dll", - "UpperVersion": "1.1.1", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/439", - "Notes": "Uses obsolete StardewModdingAPI.Extensions." - }, - { - "Name": "Better Sprinklers", - "ID": "SPDSprinklersMod", - "UpperVersion": "2.1", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/41", - "UnofficialUpdateUrl": "http://community.playstarbound.com/threads/125031", - "ForceCompatibleVersion": "^2.1-EntoPatch.7", - "Notes": "Uses obsolete StardewModdingAPI.Extensions." - }, - { - "Name": "Casks Anywhere", - "ID": "CasksAnywhere", - "UpperVersion": "1.1", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/878", - "Notes": "Uses obsolete StardewModdingAPI.Inheritance.ItemStackChange." - }, - { - "Name": "Chests Anywhere", - "ID": "ChestsAnywhere", - "UpperVersion": "1.8.2", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/518", - "Notes": "Crashes with 'Method not found: Void StardewValley.Menus.TextBox.set_Highlighted(Boolean)'." - }, - { - "Name": "Chests Anywhere", - "ID": "Pathoschild.ChestsAnywhere", - "UpperVersion": "1.9-beta", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/518", - "Notes": "ID changed in 1.9. Crashes with InvalidOperationException: 'The menu doesn't seem to have a player inventory'." - }, - { - "Name": "CJB Automation", - "ID": "CJBAutomation", - "UpperVersion": "1.4", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/211", - "Notes": "Crashes with 'Method not found: Void StardewValley.Item.set_Name(System.String)'." - }, - { - "Name": "CJB Cheats Menu", - "ID": "CJBCheatsMenu", - "UpperVersion": "1.13", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/4", - "Notes": "Uses removed Game1.borderFont." - }, - { - "Name": "CJB Item Spawner", - "ID": "CJBItemSpawner", - "UpperVersion": "1.6", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/93", - "Notes": "Uses removed Game1.borderFont." - }, - { - "Name": "Cooking Skill", - "ID": "CookingSkill", - "UpperVersion": "1.0.3", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/522", - "Notes": "Crashes with 'Method not found: Void StardewValley.Buff..ctor(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, System.String)'." - }, - { - "Name": "Enemy Health Bars", - "ID": "SPDHealthBar", - "UpperVersion": "1.7", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/193", - "Notes": "Uses obsolete GraphicsEvents.DrawTick." - }, - { - "Name": "Entoarox Framework", - "ID": "eacdb74b-4080-4452-b16b-93773cda5cf9", - "UpperVersion": "1.6.5", - "UpdateUrl": "http://community.playstarbound.com/resources/4228", - "Notes": "Uses obsolete StardewModdingAPI.Inheritance.SObject until 1.6.1; then crashes until 1.6.4 ('Entoarox Framework requested an immediate game shutdown: Fatal error attempting to update player tick properties System.NullReferenceException: Object reference not set to an instance of an object. at Entoarox.Framework.PlayerHelper.Update(Object s, EventArgs e)')." - }, - { - "Name": "Extended Fridge", - "ID": "Mystra007ExtendedFridge", - "UpperVersion": "1.0", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/485", - "Notes": "Actual upper version is 0.94, but mod incorrectly sets it to 1.0 in the manifest. Crashes with 'Field not found: StardewValley.Game1.mouseCursorTransparency'." - }, - { - "Name": "Get Dressed", - "ID": "GetDressed.dll", - "UpperVersion": "3.2", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/331", - "Notes": "Crashes with NullReferenceException in GameEvents.UpdateTick." - }, - { - "Name": "Lookup Anything", - "ID": "LookupAnything", - "UpperVersion": "1.10", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/541", - "Notes": "Crashes with FormatException when looking up NPCs." - }, - { - "Name": "Lookup Anything", - "ID": "Pathoschild.LookupAnything", - "UpperVersion": "1.10.1", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/541", - "Notes": "ID changed in 1.10.1. Crashes with FormatException when looking up NPCs." - }, - { - "Name": "Makeshift Multiplayer", - "ID": "StardewValleyMP", - "UpperVersion": "0.2.10", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/501", - "Notes": "Uses obsolete GraphicsEvents.OnPreRenderHudEventNoCheck." - }, - { - "Name": "NoSoilDecay", - "ID": "289dee03-5f38-4d8e-8ffc-e440198e8610", - "UpperVersion": "0.5", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/237", - "Notes": "Uses Assembly.GetExecutingAssembly().Location." - }, - { - "Name": "Point-and-Plant", - "ID": "PointAndPlant.dll", - "UpperVersion": "1.0.2", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/572", - "Notes": "Uses obsolete StardewModdingAPI.Extensions." - }, - { - "Name": "Reusable Wallpapers", - "ID": "dae1b553-2e39-43e7-8400-c7c5c836134b", - "UpperVersion": "1.5", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/356", - "Notes": "Uses obsolete StardewModdingAPI.Inheritance.ItemStackChange." - }, - { - "Name": "Save Anywhere", - "ID": "SaveAnywhere", - "UpperVersion": "2.0", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/444", - "Notes": "Depends on StarDustCore." - }, - { - "Name": "StackSplitX", - "ID": "StackSplitX.dll", - "UpperVersion": "1.0", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/798", - "Notes": "Uses SMAPI's internal SGame class." - }, - { - "Name": "StarDustCore", - "ID": "StarDustCore", - "UpperVersion": "1.0", - "UpdateUrl": "http://www.nexusmods.com/stardewvalley/mods/683", - "Notes": "Crashes with 'Method not found: Void StardewModdingAPI.Command.CallCommand(System.String)'." - }, - { - "Name": "Teleporter", - "ID": "Teleporter", - "UpperVersion": "1.0.2", - "UpdateUrl": "http://community.playstarbound.com/resources/4374", - "Notes": "Crashes with 'InvalidOperationException: The StardewValley.Menus.MapPage object doesn't have a private 'points' instance field'." - }, - { - "Name": "Zoryn's Better RNG", - "ID": "76b6d1e1-f7ba-4d72-8c32-5a1e6d2716f6", - "UpperVersion": "1.5", - "UpdateUrl": "http://community.playstarbound.com/threads/108756", - "Notes": "Uses SMAPI's internal SGame class." - }, - { - "Name": "Zoryn's Calendar Anywhere", - "ID": "a41c01cd-0437-43eb-944f-78cb5a53002a", - "UpperVersion": "1.5", - "UpdateUrl": "http://community.playstarbound.com/threads/108756", - "Notes": "Uses SMAPI's internal SGame class." - }, - { - "Name": "Zoryn's Health Bars", - "ID": "HealthBars.dll", - "UpperVersion": "1.5", - "UpdateUrl": "http://community.playstarbound.com/threads/108756", - "Notes": "Uses SMAPI's internal SGame class." - }, - { - "Name": "Zoryn's Movement Mod", - "ID": "8a632929-8335-484f-87dd-c29d2ba3215d", - "UpperVersion": "1.5", - "UpdateUrl": "http://community.playstarbound.com/threads/108756", - "Notes": "Uses SMAPI's internal SGame class." - }, - { - "Name": "Zoryn's Regen Mod", - "ID": "dfac4383-1b6b-4f33-ae4e-37fc23e5252e", - "UpperVersion": "1.5", - "UpdateUrl": "http://community.playstarbound.com/threads/108756", - "Notes": "Uses SMAPI's internal SGame class." - } -] diff --git a/src/prepare-install-package.targets b/src/prepare-install-package.targets index bd9287f1..709bd8d4 100644 --- a/src/prepare-install-package.targets +++ b/src/prepare-install-package.targets @@ -28,7 +28,6 @@ - @@ -43,7 +42,6 @@ -