summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/wwwroot
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI.Web/wwwroot')
-rw-r--r--src/SMAPI.Web/wwwroot/Content/css/index.css24
-rw-r--r--src/SMAPI.Web/wwwroot/Content/images/ko-fi.pngbin0 -> 2435 bytes
-rw-r--r--src/SMAPI.Web/wwwroot/Content/images/patreon.pngbin0 -> 4180 bytes
-rw-r--r--src/SMAPI.Web/wwwroot/Content/images/paypal.pngbin0 -> 2013 bytes
-rw-r--r--src/SMAPI.Web/wwwroot/Content/js/mods.js48
-rw-r--r--src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json862
6 files changed, 460 insertions, 474 deletions
diff --git a/src/SMAPI.Web/wwwroot/Content/css/index.css b/src/SMAPI.Web/wwwroot/Content/css/index.css
index 979af4af..93a85bed 100644
--- a/src/SMAPI.Web/wwwroot/Content/css/index.css
+++ b/src/SMAPI.Web/wwwroot/Content/css/index.css
@@ -106,7 +106,25 @@ h1 {
padding-left: 1em;
}
-#support-links li small {
- display: block;
- width: 50em;
+#donate-links li {
+ list-style: none;
+ margin-bottom: 5px;
+}
+
+#donate-links .donate-button {
+ display: inline-block;
+ min-width: 10em;
+ background: #2A413B;
+ padding: 6px 12px;
+ font-family: Quicksand, Helvetica, Century Gothic, sans-serif;
+ text-decoration: none;
+ font-weight: 700;
+ color: #FFF;
+ border-radius: 8px;
+}
+
+#donate-links .donate-button img {
+ vertical-align: middle;
+ max-height: 15px;
+ max-width: 15px;
}
diff --git a/src/SMAPI.Web/wwwroot/Content/images/ko-fi.png b/src/SMAPI.Web/wwwroot/Content/images/ko-fi.png
new file mode 100644
index 00000000..a483f452
--- /dev/null
+++ b/src/SMAPI.Web/wwwroot/Content/images/ko-fi.png
Binary files differ
diff --git a/src/SMAPI.Web/wwwroot/Content/images/patreon.png b/src/SMAPI.Web/wwwroot/Content/images/patreon.png
new file mode 100644
index 00000000..d589fedc
--- /dev/null
+++ b/src/SMAPI.Web/wwwroot/Content/images/patreon.png
Binary files differ
diff --git a/src/SMAPI.Web/wwwroot/Content/images/paypal.png b/src/SMAPI.Web/wwwroot/Content/images/paypal.png
new file mode 100644
index 00000000..225c9d7b
--- /dev/null
+++ b/src/SMAPI.Web/wwwroot/Content/images/paypal.png
Binary files differ
diff --git a/src/SMAPI.Web/wwwroot/Content/js/mods.js b/src/SMAPI.Web/wwwroot/Content/js/mods.js
index 874fbf25..130f60be 100644
--- a/src/SMAPI.Web/wwwroot/Content/js/mods.js
+++ b/src/SMAPI.Web/wwwroot/Content/js/mods.js
@@ -11,11 +11,7 @@ smapi.modList = function (mods, enableBeta) {
soon: 0,
broken: 0,
abandoned: 0,
- invalid: 0,
- smapi3_unknown: 0,
- smapi3_ok: 0,
- smapi3_broken: 0,
- smapi3_soon: 0
+ invalid: 0
};
var data = {
mods: mods,
@@ -52,16 +48,6 @@ smapi.modList = function (mods, enableBeta) {
nexus: { value: true, label: "Nexus" },
custom: { value: true }
}
- },
- smapi3: {
- label: "SMAPI 3.0",
- value: {
- // note: keys must match status returned by the API
- ok: { value: true, label: "ready" },
- soon: { value: true },
- broken: { value: true },
- unknown: { value: true }
- }
}
},
search: ""
@@ -87,8 +73,6 @@ smapi.modList = function (mods, enableBeta) {
else
delete data.filters.betaStatus;
- window.boop = data.filters;
-
// init mods
for (var i = 0; i < data.mods.length; i++) {
var mod = mods[i];
@@ -99,24 +83,6 @@ smapi.modList = function (mods, enableBeta) {
// set overall compatibility
mod.LatestCompatibility = mod.BetaCompatibility || mod.Compatibility;
- // set SMAPI 3.0 display text
- switch (mod.Smapi3Status) {
- case "ok":
- mod.Smapi3DisplayText = "✓ yes";
- mod.Smapi3Tooltip = "The latest version of this mod is compatible with SMAPI 3.0.";
- break;
-
- case "broken":
- mod.Smapi3DisplayText = "✖ no";
- mod.Smapi3Tooltip = "This mod will break in SMAPI 3.0; consider notifying the author.";
- break;
-
- default:
- mod.Smapi3DisplayText = "↻ " + mod.Smapi3Status;
- mod.Smapi3Tooltip = "This mod has a pending update for SMAPI 3.0 which hasn't been released yet.";
- break;
- }
-
// concatenate searchable text
mod.SearchableText = [mod.Name, mod.AlternateNames, mod.Author, mod.AlternateAuthors, mod.Compatibility.Summary, mod.BrokeIn];
if (mod.Compatibility.UnofficialVersion)
@@ -173,7 +139,6 @@ smapi.modList = function (mods, enableBeta) {
if (mod.Visible) {
stats.total++;
stats[this.getCompatibilityGroup(mod)]++;
- stats["smapi3_" + mod.Smapi3Status]++;
}
}
},
@@ -188,6 +153,10 @@ smapi.modList = function (mods, enableBeta) {
matchesFilters: function(mod, searchWords) {
var filters = data.filters;
+ // check hash
+ if (location.hash === "#" + mod.Slug)
+ return true;
+
// check source
if (!filters.source.value.open.value && mod.SourceUrl)
return false;
@@ -206,10 +175,6 @@ smapi.modList = function (mods, enableBeta) {
return false;
}
- // check SMAPI 3.0 compatibility
- if (filters.smapi3.value[mod.Smapi3Status] && !filters.smapi3.value[mod.Smapi3Status].value)
- return false;
-
// check download sites
var ignoreSites = [];
@@ -281,4 +246,7 @@ smapi.modList = function (mods, enableBeta) {
}
});
app.applyFilters();
+ window.addEventListener("hashchange", function () {
+ app.applyFilters();
+ });
};
diff --git a/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json b/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json
index 9de692fe..d0c55552 100644
--- a/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json
+++ b/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json
@@ -1,434 +1,434 @@
{
- /**
- * 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",
- "1.3.1 | Status": "AssumeBroken" // causes runtime crashes
- },
-
- "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"
- },
-
- "Rubydew": {
- "ID": "bwdy.rubydew",
- "SuppressWarnings": "UsesDynamic", // mod explicitly loads DLLs for Linux/Mac compatibility
- "Default | UpdateKey": "Nexus:3656"
- },
-
- "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 Sprinkler 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" }
- },
-
- "Chefs Closet": {
- "ID": "Duder.ChefsCloset",
- "MapLocalVersions": { "1.3-1": "1.3" }
- },
-
- "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
- },
-
- "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" }
- },
-
- "Multiple Sprites and Portraits On Rotation (File Loading)": {
- "ID": "FileLoading",
- "MapLocalVersions": { "1.1": "1.12" }
- },
-
- "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" }
- },
-
- "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" }
- },
-
-
- /*********
- ** 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 in SDV 1.3.36
- *********/
- "2cute FarmCave": {
- "ID": "taintedwheat.2CuteFarmCave",
- "Default | UpdateKey": "Nexus:843",
- "~2.0 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- "Ace's Expanded Caves - Default Cave": {
- "ID": "Acerbicon.AECdefault",
- "Default | UpdateKey": "Nexus:2131",
- "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- "Ace's Expanded Caves - Desert Cave": {
- "ID": "Acerbicon.AECdesert",
- "Default | UpdateKey": "Nexus:2131",
- "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- "Ace's Expanded Caves - Ice Cave": {
- "ID": "Acerbicon.AECice",
- "Default | UpdateKey": "Nexus:2131",
- "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- "Ace's Expanded Caves - Lava Cave": {
- "ID": "Acerbicon.AEClava",
- "Default | UpdateKey": "Nexus:2131",
- "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- "Ace's Expanded Caves - Slime Cave": {
- "ID": "Acerbicon.AECslime",
- "Default | UpdateKey": "Nexus:2131",
- "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- "Green Pastures Farm": {
- "ID": "bugbuddy.GreenPasturesFarm",
- "Default | UpdateKey": "Nexus:2326",
- "~1.0 | Status": "AssumeBroken" // references deleted Content/weapons.xnb
- },
-
- "Immersive Farm 2": {
- "ID": "zander.immersivefarm2",
- "~2.0.1 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- "Karmylla's Immersive Map Edits": {
- "ID": "Karmylla.ImmersiveMapEdits",
- "Default | UpdateKey": "Nexus:1149",
- "~2.4 | Status": "AssumeBroken" // references deleted Content/weapons.xnb
- },
-
- "Secret Gardens Greenhouse": {
- "ID": "jessebot.secretgardens",
- "Default | UpdateKey": "Nexus:3067",
- "~2.0.1 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
- },
-
- /*********
- ** 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)
- },
-
- /*********
- ** Broke circa SDV 1.2
- *********/
- "Move Faster": {
- "ID": "shuaiz.MoveFasterMod",
- "~1.0.1 | Status": "AssumeBroken" // doesn't do anything as of SDV 1.2.33 (bad Harmony patch?)
+ /**
+ * 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",
+ "1.3.1 | Status": "AssumeBroken" // causes runtime crashes
+ },
+
+ "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"
+ },
+
+ "Rubydew": {
+ "ID": "bwdy.rubydew",
+ "SuppressWarnings": "UsesDynamic", // mod explicitly loads DLLs for Linux/Mac compatibility
+ "Default | UpdateKey": "Nexus:3656"
+ },
+
+ "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 Sprinkler 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" }
+ },
+
+ "Chefs Closet": {
+ "ID": "Duder.ChefsCloset",
+ "MapLocalVersions": { "1.3-1": "1.3" }
+ },
+
+ "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
+ },
+
+ "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" }
+ },
+
+ "Multiple Sprites and Portraits On Rotation (File Loading)": {
+ "ID": "FileLoading",
+ "MapLocalVersions": { "1.1": "1.12" }
+ },
+
+ "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" }
+ },
+
+ "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" }
+ },
+
+
+ /*********
+ ** 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 in SDV 1.3.36
+ *********/
+ "2cute FarmCave": {
+ "ID": "taintedwheat.2CuteFarmCave",
+ "Default | UpdateKey": "Nexus:843",
+ "~2.0 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ "Ace's Expanded Caves - Default Cave": {
+ "ID": "Acerbicon.AECdefault",
+ "Default | UpdateKey": "Nexus:2131",
+ "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ "Ace's Expanded Caves - Desert Cave": {
+ "ID": "Acerbicon.AECdesert",
+ "Default | UpdateKey": "Nexus:2131",
+ "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ "Ace's Expanded Caves - Ice Cave": {
+ "ID": "Acerbicon.AECice",
+ "Default | UpdateKey": "Nexus:2131",
+ "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ "Ace's Expanded Caves - Lava Cave": {
+ "ID": "Acerbicon.AEClava",
+ "Default | UpdateKey": "Nexus:2131",
+ "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ "Ace's Expanded Caves - Slime Cave": {
+ "ID": "Acerbicon.AECslime",
+ "Default | UpdateKey": "Nexus:2131",
+ "~1.2.2 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ "Green Pastures Farm": {
+ "ID": "bugbuddy.GreenPasturesFarm",
+ "Default | UpdateKey": "Nexus:2326",
+ "~1.0 | Status": "AssumeBroken" // references deleted Content/weapons.xnb
+ },
+
+ "Immersive Farm 2": {
+ "ID": "zander.immersivefarm2",
+ "~2.0.1 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ "Karmylla's Immersive Map Edits": {
+ "ID": "Karmylla.ImmersiveMapEdits",
+ "Default | UpdateKey": "Nexus:1149",
+ "~2.4 | Status": "AssumeBroken" // references deleted Content/weapons.xnb
+ },
+
+ "Secret Gardens Greenhouse": {
+ "ID": "jessebot.secretgardens",
+ "Default | UpdateKey": "Nexus:3067",
+ "~2.0.1 | Status": "AssumeBroken" // references deleted Content/Mine.xnb
+ },
+
+ /*********
+ ** 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)
+ },
+
+ /*********
+ ** Broke circa SDV 1.2
+ *********/
+ "Move Faster": {
+ "ID": "shuaiz.MoveFasterMod",
+ "~1.0.1 | Status": "AssumeBroken" // doesn't do anything as of SDV 1.2.33 (bad Harmony patch?)
+ }
}
- }
}