{ /** * Metadata about some SMAPI mods used in compatibility, update, and dependency checks. This * field shouldn't be edited by players in most cases. * * Standard fields * =============== * The predefined fields are documented below (only 'ID' is required). Each entry's key is the * default display name for the mod if one isn't available (e.g. in dependency checks). * * - ID: the mod's latest unique ID (if any). * * - FormerIDs: uniquely identifies the mod across multiple versions, and supports matching * other fields if no ID was specified. This doesn't include the latest ID, if any. Multiple * variants can be separated with '|'. * * - MapLocalVersions and MapRemoteVersions correct local manifest versions and remote versions * during update checks. For example, if the API returns version '1.1-1078' where '1078' is * intended to be a build number, MapRemoteVersions can map it to '1.1' when comparing to the * mod's current version. This is only meant to support legacy mods with injected update keys. * * Versioned metadata * ================== * Each record can also specify extra metadata using the field keys below. * * Each key consists of a field name prefixed with any combination of version range and 'Default', * separated by pipes (whitespace trimmed). For example, 'UpdateKey' will always override, * 'Default | UpdateKey' will only override if the mod has no update keys, and * '~1.1 | Default | Name' will do the same up to version 1.1. * * The version format is 'min~max' (where either side can be blank for unbounded), or a single * version number. * * These are the valid field names: * * - UpdateKey: the update key to set in the mod's manifest. This is used to enable update * checks for older mods that haven't been updated to use it yet. * * - Status: overrides compatibility checks. The possible values are Obsolete (SMAPI won't load * it because the mod should no longer be used), AssumeBroken (SMAPI won't load it because * the specified version isn't compatible), or AssumeCompatible (SMAPI will try to load it * even if it detects incompatible code). * * Note that this shouldn't be set to 'AssumeBroken' if SMAPI can detect the incompatibility * automatically, since that hides the details from trace logs. * * - StatusReasonPhrase: a message to show to the player explaining why the mod can't be loaded * (if applicable). If blank, will default to a generic not-compatible message. * * - AlternativeUrl: a URL where the player can find an unofficial update or alternative if the * mod is no longer compatible. */ "ModData": { /********* ** Common dependencies for friendly errors *********/ "Advanced Location Loader": { "ID": "Entoarox.AdvancedLocationLoader", "Default | UpdateKey": "Nexus:2270" }, "Content Patcher": { "ID": "Pathoschild.ContentPatcher", "Default | UpdateKey": "Nexus:1915" }, "Custom Farming Redux": { "ID": "Platonymous.CustomFarming", "Default | UpdateKey": "Nexus:991" }, "Custom Shirts": { "ID": "Platonymous.CustomShirts", "Default | UpdateKey": "Nexus:2416" }, "Entoarox Framework": { "ID": "Entoarox.EntoaroxFramework", "Default | UpdateKey": "Nexus:2269" }, "JSON Assets": { "ID": "spacechase0.JsonAssets", "Default | UpdateKey": "Nexus:1720" }, "Mail Framework": { "ID": "DIGUS.MailFrameworkMod", "Default | UpdateKey": "Nexus:1536" }, "MTN": { "ID": "SgtPickles.MTN", "Default | UpdateKey": "Nexus:2256", "~1.2.6 | Status": "AssumeBroken" // replaces Game1.multiplayer, which breaks SMAPI's multiplayer API. }, "PyTK": { "ID": "Platonymous.Toolkit", "Default | UpdateKey": "Nexus:1726" }, "SpaceCore": { "ID": "spacechase0.SpaceCore", "Default | UpdateKey": "Nexus:1348" }, "Stardust Core": { "ID": "Omegasis.StardustCore", "Default | UpdateKey": "Nexus:2341" }, "TMX Loader": { "ID": "Platonymous.TMXLoader", "Default | UpdateKey": "Nexus:1820" }, /********* ** Map versions *********/ "Adjust Artisan Prices": { "ID": "ThatNorthernMonkey.AdjustArtisanPrices", "FormerIDs": "1e36d4ca-c7ef-4dfb-9927-d27a6c3c8bdc", // changed in 0.0.2-pathoschild-update "MapRemoteVersions": { "0.01": "0.0.1" } }, "Almighty Farming Tool": { "ID": "439", "MapRemoteVersions": { "1.21": "1.2.1", "1.22-unofficial.3.mizzion": "1.2.2-unofficial.3.mizzion" } }, "Basic Sprinklers Improved": { "ID": "lrsk_sdvm_bsi.0117171308", "MapRemoteVersions": { "1.0.2": "1.0.1-release" } // manifest not updated }, "Better Shipping Box": { "ID": "Kithio:BetterShippingBox", "MapLocalVersions": { "1.0.1": "1.0.2" } }, "Birthday Mail": { "ID": "KathrynHazuka.BirthdayMail", "FormerIDs": "005e02dc-d900-425c-9c68-1ff55c5a295d", // changed in 1.2.3-pathoschild-update "MapRemoteVersions": { "1.3.1": "1.3" } // manifest not updated }, "Casks Anywhere": { "ID": "CasksAnywhere", "MapLocalVersions": { "1.1-alpha": "1.1" } }, "Chefs Closet": { "ID": "Duder.ChefsCloset", "MapLocalVersions": { "1.3-1": "1.3" } }, "Cobalt": { "ID": "spacechase0.Cobalt", "MapRemoteVersions": { "1.1.3": "1.1.2" } // not updated in manifest }, "Configurable Machines": { "ID": "21da6619-dc03-4660-9794-8e5b498f5b97", "MapLocalVersions": { "1.2-beta": "1.2" } }, "Crafting Counter": { "ID": "lolpcgaming.CraftingCounter", "MapRemoteVersions": { "1.1": "1.0" } // not updated in manifest }, "Customizable Cart Redux": { "ID": "KoihimeNakamura.CCR", "MapLocalVersions": { "1.1-20170917": "1.1" } }, "Custom Linens": { "ID": "Mevima.CustomLinens", "MapRemoteVersions": { "1.1": "1.0" } // manifest not updated }, "Dynamic Horses": { "ID": "Bpendragon-DynamicHorses", "MapRemoteVersions": { "1.2": "1.1-release" } // manifest not updated }, "Dynamic Machines": { "ID": "DynamicMachines", "MapLocalVersions": { "1.1": "1.1.1" } }, "Hunger Mod (skn)": { "ID": "skn.HungerMod", "MapRemoteVersions": { "1.2.1": "1.0" } // manifest not updated }, "Idle Pause": { "ID": "Veleek.IdlePause", "MapRemoteVersions": { "1.2": "1.1" } // manifest not updated }, "Item Auto Stacker": { "ID": "cat.autostacker", "MapRemoteVersions": { "1.0.1": "1.0" } // manifest not updated }, "Move Faster": { "ID": "shuaiz.MoveFasterMod", "~1.0.1 | Status": "AssumeBroken" // doesn't do anything as of SDV 1.2.33 (bad Harmony patch?) }, "Multiple Sprites and Portraits On Rotation (File Loading)": { "ID": "FileLoading", "MapLocalVersions": { "1.1": "1.12" } }, "Night Owl": { "ID": "Omegasis.NightOwl", "MapLocalVersions": { "2.1": "1.3" } // 1.3 had wrong version in manifest }, "Point-and-Plant": { "ID": "jwdred.PointAndPlant", "MapRemoteVersions": { "1.0.3": "1.0.2" } // manifest not updated }, "Relationship Status": { "ID": "relationshipstatus", "MapRemoteVersions": { "1.0.5": "1.0.4" } // not updated in manifest }, "ReRegeneration": { "ID": "lrsk_sdvm_rerg.0925160827", "MapLocalVersions": { "1.1.2-release": "1.1.2" } }, "Shop Expander": { "ID": "Entoarox.ShopExpander", "FormerIDs": "EntoaroxShopExpander", // changed in 1.5.2 "MapRemoteVersions": { "1.6.0b": "1.6.0" } }, "Showcase Mod": { "ID": "Igorious.Showcase", "MapLocalVersions": { "0.9-500": "0.9" } }, "Siv's Marriage Mod": { "ID": "6266959802", // official version "FormerIDs": "Siv.MarriageMod | medoli900.Siv's Marriage Mod", // 1.2.3-unofficial versions "MapLocalVersions": { "0.0": "1.4" } }, "Solar Eclipse Event": { "ID": "KoihimeNakamura.SolarEclipseEvent", "MapLocalVersions": { "1.3.1-20180131": "1.3.1" } }, "Time Reminder": { "ID": "KoihimeNakamura.TimeReminder", "MapLocalVersions": { "1.0-20170314": "1.0.2" } }, /********* ** Obsolete *********/ "Animal Mood Fix": { "ID": "GPeters-AnimalMoodFix", "~ | Status": "Obsolete", "~ | StatusReasonPhrase": "the animal mood bugs were fixed in Stardew Valley 1.2." }, "Colored Chests": { "ID": "4befde5c-731c-4853-8e4b-c5cdf946805f", "~ | Status": "Obsolete", "~ | StatusReasonPhrase": "colored chests were added in Stardew Valley 1.1." }, "Modder Serialization Utility": { "ID": "SerializerUtils-0-1", "~ | Status": "Obsolete", "~ | StatusReasonPhrase": "it's no longer maintained or used." }, "No Debug Mode": { "ID": "NoDebugMode", "~ | Status": "Obsolete", "~ | StatusReasonPhrase": "debug mode was removed in SMAPI 1.0." }, /********* ** Broke circa SDV 1.3 *********/ "Canon-Friendly Dialogue Expansion": { "ID": "gizzymo.canonfriendlyexpansion", "~1.1.1 | Status": "AssumeBroken" // causes a save crash on certain dates }, "Everytime Submarine": { "ID": "MustafaDemirel.EverytimeSubmarine", "~1.0.0 | Status": "AssumeBroken" // breaks player saves if their beach bridge is fixed }, "Always Scroll Map": { "ID": "bcmpinc.AlwaysScrollMap", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "Arcade Pong": { "ID": "Platonymous.ArcadePong", "~1.0.2 | Status": "AssumeBroken" // broke in SMAPI 2.6-beta.16 due to reflection into SMAPI internals }, "BJS Night Sounds": { "ID": "BunnyJumps.BJSNightSounds", "~1.0.0 | Status": "AssumeBroken" // runtime errors with Harmony 1.2.0.1 in SMAPI 2.8+ }, "Craft Counter": { "ID": "bcmpinc.CraftCounter", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "Fishing Adjust": { "ID": "shuaiz.FishingAdjustMod", "~2.0.1 | Status": "AssumeBroken" // Method not found: 'Void Harmony.HarmonyInstance.Patch(System.Reflection.MethodBase, Harmony.HarmonyMethod, Harmony.HarmonyMethod, Harmony.HarmonyMethod)' }, "Fishing Automaton": { "ID": "Drynwynn.FishingAutomaton", "~1.1 | Status": "AssumeBroken" // runtime errors with Harmony 1.2.0.1 in SMAPI 2.8+ }, "Fix Animal Tools": { "ID": "bcmpinc.FixAnimalTools", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "Fix Scythe Exp": { "ID": "bcmpinc.FixScytheExp", "~0.3 | Status": "AssumeBroken" // broke in 1.3: Exception from HarmonyInstance "bcmpinc.FixScytheExp" [...] Bad label content in ILGenerator. }, "Grass Growth": { "ID": "bcmpinc.GrassGrowth", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "More Silo Storage": { "ID": "OrneryWalrus.MoreSiloStorage", "~1.0.1 | Status": "AssumeBroken" // broke in SDV 1.3 }, "Movement Speed": { "ID": "bcmpinc.MovementSpeed", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "No Added Flying Mine Monsters": { "ID": "Drynwynn.NoAddedFlyingMineMonsters", "~1.1 | Status": "AssumeBroken" // runtime errors with Harmony 1.2.0.1 in SMAPI 2.8+ }, "Server Bookmarker": { "ID": "Ilyaki.ServerBookmarker", "~1.0.0 | Status": "AssumeBroken" // broke in Stardew Valley 1.3.29 (runtime errors) }, "Skill Prestige: Cooking Adapter": { "ID": "Alphablackwolf.CookingSkillPrestigeAdapter", "FormerIDs": "20d6b8a3-b6e7-460b-a6e4-07c2b0cb6c63", // changed circa 1.1 "MapRemoteVersions": { "1.2.3": "1.1" } // manifest not updated }, "Skull Cave Saver": { "ID": "cantorsdust.SkullCaveSaver", "FormerIDs": "8ac06349-26f7-4394-806c-95d48fd35774 | community.SkullCaveSaver", // changed in 1.1 and 1.2.2 "1.3-beta | Status": "AssumeBroken" // doesn't work in multiplayer, no longer maintained }, "Split Screen": { "ID": "Ilyaki.SplitScreen", "~3.0.1 | Status": "AssumeBroken" // broke in SMAPI 2.6-beta.16 due to reflection into SMAPI internals }, "Stardew Hack": { "ID": "bcmpinc.StardewHack", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "Stephan's Lots of Crops": { "ID": "stephansstardewcrops", "MapRemoteVersions": { "1.41": "1.1" }, // manifest not updated "~1.1 | Status": "AssumeBroken" // broke in SDV 1.3 (overwrites vanilla items) }, "Summit Reborn": { "ID": "KoihimeNakamura.summitreborn", "FormerIDs": "emissaryofinfinity.summitreborn", // changed in 1.0.2 "~1.0.2 | Status": "AssumeBroken" // broke in SDV 1.3 (runtime errors) }, "Tilled Soil Decay": { "ID": "bcmpinc.TilledSoilDecay", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "Tree Spread": { "ID": "bcmpinc.TreeSpread", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) }, "Yet Another Harvest With Scythe Mod": { "ID": "bcmpinc.HarvestWithScythe", "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request) } } }