Changes

→‎Minimum SMAPI version: + MinimumGameVersion in SMAPI 4.0.6
Line 1: Line 1:  
{{../../header}}
 
{{../../header}}
   −
==Manifest==
+
Every SMAPI mod or content pack must have a <samp>manifest.json</samp> file in its folder. SMAPI uses this to identify and load the mod, perform update checks, etc. The manifest info is also available to any mod in code (using <samp>this.ModManifest</samp> for the current mod's manifest, or [[../#Mod registry|mod registry]] for other mods' manifests).
Every SMAPI mod or content pack has a <tt>manifest.json</tt> file with info about it. That info is available in that mod's code (using <tt>this.ModManifest</tt>) and to other mods (using the [[#Mod registry|mod registry]]).
      +
==Basic examples==
 
Here's the basic format (see below for details on each field):
 
Here's the basic format (see below for details on each field):
 
{| class="wikitable"
 
{| class="wikitable"
Line 10: Line 10:  
! For a content pack
 
! For a content pack
 
|-
 
|-
| <source lang="javascript">
+
| <syntaxhighlight lang="javascript">
 
{
 
{
  "Name": "YourProjectName",
+
    "Name": "Your Project Name",
  "Author": "your name",
+
    "Author": "your name",
  "Version": "1.0.0",
+
    "Version": "1.0.0",
  "Description": "One or two sentences about the mod.",
+
    "Description": "One or two sentences about the mod.",
  "UniqueID": "YourName.YourProjectName",
+
    "UniqueID": "YourName.YourProjectName",
  "EntryDll": "YourDllFileName.dll",
+
    "EntryDll": "YourDllFileName.dll",
  "MinimumApiVersion": "2.0",
+
    "UpdateKeys": []
  "UpdateKeys": []
   
}
 
}
</source>
+
</syntaxhighlight>
| <source lang="javascript">
+
| <syntaxhighlight lang="javascript">
 
{
 
{
  "Name": "YourProjectName",
+
    "Name": "Your Project Name",
  "Author": "your name",
+
    "Author": "your name",
  "Version": "1.0.0",
+
    "Version": "1.0.0",
  "Description": "One or two sentences about the mod.",
+
    "Description": "One or two sentences about the mod.",
  "UniqueID": "YourName.YourProjectName",
+
    "UniqueID": "YourName.YourProjectName",
  "MinimumApiVersion": "2.0",
+
    "UpdateKeys": [],
  "UpdateKeys": [],
+
    "ContentPackFor": {
  "ContentPackFor": {
+
        "UniqueID": "Pathoschild.ContentPatcher"
      "UniqueID": "Pathoschild.ContentPatcher", // the ID of required mod
+
    }
      "MinimumVersion": "1.3.0" // optional
  −
  }
   
}
 
}
</source>
+
</syntaxhighlight>
 
|}
 
|}
    +
==Fields==
 
===Basic fields===
 
===Basic fields===
 
All mods should specify the following fields.
 
All mods should specify the following fields.
Line 47: Line 45:  
! description
 
! description
 
|-
 
|-
| <tt>Name</tt>
+
| <samp>Name</samp>
| The mod name. SMAPI uses this in player messages, logs, and errors. Example: <source lang="javascript">"Name": "Lookup Anything"</source>
+
| The mod name. SMAPI uses this in player messages, logs, and errors. Example: <syntaxhighlight lang="javascript">"Name": "Lookup Anything"</syntaxhighlight>
 
|-
 
|-
| <tt>Author</tt>
+
| <samp>Author</samp>
| The name of the person who created the mod. Ideally this should include the username used to publish mods. Example: <source lang="javascript">"Author": "Pathoschild"</source>
+
| The name of the person who created the mod. Ideally this should include the username used to publish mods. Example: <syntaxhighlight lang="javascript">"Author": "Pathoschild"</syntaxhighlight>
 
|-
 
|-
| <tt>Version</tt>
+
| <samp>Version</samp>
 
| The mod's [http://semver.org/ semantic version]. Make sure you update this for each release! SMAPI uses this for update checks, mod dependencies, and compatibility blacklists (if the mod breaks in a future version of the game). Examples:
 
| The mod's [http://semver.org/ semantic version]. Make sure you update this for each release! SMAPI uses this for update checks, mod dependencies, and compatibility blacklists (if the mod breaks in a future version of the game). Examples:
<source lang="javascript">
+
<syntaxhighlight lang="javascript">
"Version": "1.0"
+
"Version": "1.0.0"
</source>
+
</syntaxhighlight>
<source lang="javascript">
+
<syntaxhighlight lang="javascript">
 
"Version": "1.0.1-beta.2"
 
"Version": "1.0.1-beta.2"
</source>
+
</syntaxhighlight>
 
|-
 
|-
| <tt>Description</tt>
+
| <samp>Description</samp>
| A short explanation of what your mod does (one or two sentences), shown in the SMAPI log. Example: <source lang="javascript">"Description": "View metadata about anything by pressing a button."</source>
+
| A short explanation of what your mod does (one or two sentences), shown in the SMAPI log. Example: <syntaxhighlight lang="javascript">"Description": "View metadata about anything by pressing a button."</syntaxhighlight>
 
|-
 
|-
| <tt>UniqueID</tt>
+
| <samp>UniqueID</samp>
| A unique identifier for your mod. The recommended format is <tt>&lt;your name&gt;.&lt;mod name&gt;</tt>, with no spaces or special characters. SMAPI uses this for update checks, mod dependencies, and compatibility blacklists (if the mod breaks in a future version of the game). When another mod needs to reference this mod, it uses the unique ID. Example: <source lang="javascript">"UniqueID": "Pathoschild.LookupAnything"</source>
+
| A unique identifier for your mod. The recommended format is <samp>&lt;your name&gt;.&lt;mod name&gt;</samp>, with no spaces or special characters. SMAPI uses this for update checks, mod dependencies, and compatibility blacklists (if the mod breaks in a future version of the game). When another mod needs to reference this mod, it uses the unique ID. For this reason, once you've published your mod, do not change this unique ID in future versions of the same mod. Example: <syntaxhighlight lang="javascript">"UniqueID": "Pathoschild.LookupAnything"</syntaxhighlight>
 
|-
 
|-
| <tt>EntryDll</tt> '''or''' <tt>ContentPackFor</tt>
+
| <samp>EntryDll</samp> '''or''' <samp>ContentPackFor</samp>
| <p>All mods must specify either <tt>EntryDll</tt> (for a SMAPI mod) or <tt>ContentPackFor</tt> (for a [[Modding:Content packs|content pack]]). These are mutually exclusive — you can't specify both.</p>
+
| <p>All mods must specify either <samp>EntryDll</samp> (for a SMAPI mod) or <samp>ContentPackFor</samp> (for a [[Modding:Content packs|content pack]]). These are mutually exclusive — you can't specify both.</p>
   −
For a SMAPI mod, <tt>EntryDll</tt> is the mod's compiled DLL filename in its mod folder. Example: <source lang="javascript">"EntryDll": "LookupAnything.dll"</source>
+
For a SMAPI mod, <samp>EntryDll</samp> is the mod's compiled DLL filename in its mod folder. Example: <syntaxhighlight lang="javascript">"EntryDll": "LookupAnything.dll"</syntaxhighlight>
   −
For a content pack, <tt>ContentPackFor</tt> specifies which mod can read it. The <tt>MinimumVersion</tt> is optional. Example:
+
For a content pack, <samp>ContentPackFor</samp> specifies which mod can read it. The <samp>MinimumVersion</samp> is optional. Example:
<source lang="javascript">
+
<syntaxhighlight lang="javascript">
 
"ContentPackFor": {
 
"ContentPackFor": {
 
   "UniqueID": "Pathoschild.ContentPatcher",
 
   "UniqueID": "Pathoschild.ContentPatcher",
 
   "MinimumVersion": "1.0.0"
 
   "MinimumVersion": "1.0.0"
 
}
 
}
</source>
+
</syntaxhighlight>
 
|}
 
|}
   −
===Minimum SMAPI version===
+
===Minimum SMAPI or game version===
The <tt>MinimumApiVersion</tt> fields sets the minimum SMAPI version needed to use this mod. If a player tries to use the mod with an older SMAPI version, they'll see a friendly message saying they need to update SMAPI. This also serves as a proxy for the minimum game version, since SMAPI itself enforces a minimum game version. Example: <source lang="javascript">"MinimumApiVersion": "1.10"</source>
+
The <samp>MinimumApiVersion</samp> and <samp>MinimumGameVersion</samp> field sets the minimum version of SMAPI or Stardew Valley needed to use this mod. If a player tries to use the mod with an older version, they'll see a friendly message saying they need to update it.  
 +
 
 +
For example:
 +
<syntaxhighlight lang="javascript">"MinimumApiVersion": "4.0.0"</syntaxhighlight>
    
===Dependencies===
 
===Dependencies===
The <tt>Dependencies</tt> field specifies other mods required to use this mod. If a player tries to use the mod and the listed mods aren't installed, they'll see a friendly message saying they need to install those. Example:
+
The <samp>Dependencies</samp> field specifies other mods required to use this mod. If a player tries to use the mod and the dependencies aren't installed, the mod won't be loaded and they'll see a friendly message saying they need to install those. For example:
<source lang="javascript">
+
<syntaxhighlight lang="javascript">
 
"Dependencies": [
 
"Dependencies": [
 
   {
 
   {
       "UniqueID": "Entoarox.Framework",
+
       "UniqueID": "SMAPI.ConsoleCommands",
       "MinimumVersion": "1.7.9" // optional. If specified, older versions won't meet the requirement.
+
       "MinimumVersion": "3.8.0" // optional. If specified, older versions won't meet the requirement.
 
   }
 
   }
 
]
 
]
</source>
+
</syntaxhighlight>
    
You can mark a dependency as optional. It will be loaded first if it's installed, otherwise it'll be ignored.
 
You can mark a dependency as optional. It will be loaded first if it's installed, otherwise it'll be ignored.
<source lang="javascript">
+
<syntaxhighlight lang="javascript">
 
"Dependencies": [
 
"Dependencies": [
 
   {
 
   {
       "UniqueID": "Entoarox.Framework",
+
       "UniqueID": "SMAPI.ConsoleCommands",
 
       "IsRequired": false
 
       "IsRequired": false
 
   }
 
   }
 
]
 
]
</source>
+
</syntaxhighlight>
    
===Update checks===
 
===Update checks===
SMAPI can detect new versions of your mod and alert the user with a link to your mod page. You can enable this by setting the <tt>UpdateKeys</tt> field with one of the following values, which tells SMAPI where to check.
+
SMAPI can detect new versions of your mod and alert the user with a link to your mod page. You can enable this by setting the <samp>UpdateKeys</samp> field in your <samp>manifest.json</samp>, which tells SMAPI where to check.
   −
; Chucklefish mod site
+
See [[../Update checks|''update checks'']] for more information.
: Make sure you have a mod release page (with a URL containing <tt>/resources/</tt> instead of <tt>/thread/</tt>) and it has a [http://semver.org/ semantic version], then specify the mod ID (it's in the mod page URL): <source lang="javascript">"UpdateKeys": [ "Chucklefish:4250" ]</source>
     −
; Nexus Mods
+
===Anything else===
: Make sure the Nexus mod has a [http://semver.org/ semantic version], then specify the mod ID (it's in the mod page URL): <source lang="javascript">"UpdateKeys": [ "Nexus:541" ]</source>
+
Any other fields will be stored in the <samp>IManifest.ExtraFields</samp> dictionary, which is available through the [[../#Mod registry|mod registry]]. Extra fields are ignored by SMAPI, but may be useful for extended metadata intended for other mods.
 
  −
; GitHub project
  −
: Make sure your [https://help.github.com/articles/creating-releases/ GitHub project has at least one release] and the latest release's tag is a [http://semver.org/ semantic version], then specify your GitHub username and project name: <source lang="javascript">"UpdateKeys": [ "GitHub:Pathoschild/LookupAnything" ]</source>
     −
You can specify multiple values, in which case SMAPI will check them all and list the latest version it finds:
+
[[es:Modding:Guía del Modder/APIs/Manifest]]
<source lang="javascript">"UpdateKeys": [ "Chucklefish:4250", "Nexus:541", "GitHub:Pathoschild/LookupAnything" ]</source>
+
[[zh:模组:制作指南/APIs/Manifest]]
 
  −
===Anything else===
  −
Any other fields will be stored in the <tt>IManifest.ExtraFields</tt> dictionary, which is available through the [[#Mod registry|mod registry]]. Extra fields are ignored by SMAPI, but may be useful for extended metadata intended for other mods.
 
translators
8,404

edits