Line 8: |
Line 8: |
| ! source | | ! source |
| ! | | ! |
− | </noinclude> | + | </noinclude><!-- |
− | |- class="mod" id="{{{name}}}" data-id="{{#if:{{{id|}}}{{{old ids|}}}|{{#ifeq:{{{id}}}|none||{{{id}}}{{#if:{{{old ids|}}}|,}}}}{{{old ids|}}}}}" {{#if:{{{nexus id|}}}|data-nexus-id="{{{nexus id|}}}"}} {{#if:{{{cf id|}}}|data-chucklefish-id="{{{cf id|}}}"}} {{#if:{{{github|}}}|data-github="{{{github}}}"}} {{#if:{{{source|}}}|data-custom-source="{{{source|}}}"}} {{#if:{{{url|}}}|data-custom-url="{{{url}}}"}} data-status="{{Modding:SMAPI compatibility/entry/status|source={{{source|{{{github|}}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|no subtag=1}}" data-beta-status="{{Modding:SMAPI compatibility/entry/status|source={{{source|{{{github|}}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|beta unofficial={{{beta unofficial|}}}|beta broke in={{{beta broke in|}}}|beta status={{{beta status|}}}|no subtag=1}}" {{#if:{{{unofficial version|}}}|data-unofficial-version="{{{unofficial version}}}"}} {{#if:{{{beta unofficial version|}}}|data-beta-unofficial-version="{{{unofficial version}}}"}} style="line-height: 1em; {{#switch:{{Modding:SMAPI compatibility/entry/status|source={{{source|{{{github|}}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|no subtag=1}} |ok|optional=background: #9F9; |workaround|unofficial=background: #CF9; |broken=background: #F99; |obsolete|abandoned=background: #999}}"
| + | |
− | | {{#if:{{{nexus id|}}}|[{{nexus mod|{{{nexus id}}} {{{name|}}}]}}|{{#if:{{{cf id|}}}|[https://community.playstarbound.com/resources/{{urlencode:{{{cf id}}}}} {{{name}}}]|{{#if:{{{url|}}}|[{{{url}}} {{{name}}}]|{{{name}}}}}}}}}{{#if:{{{name2|}}}|<br /><small style="font-size:0.75em;">(aka {{{name2}}})</small>}}
| + | Define a few variables here: |
− | | {{{author}}}{{#if:{{{author2|}}}|<br /><small style="font-size:0.75em;">(aka {{{author2}}})</small>}}
| + | {{#arrayindex:has_source|0}} = set if a GitHub project name or custom source URL is set, else blank |
− | |class="summary"|<!--
| + | {{#arrayindex:status|0}} = compatibility status for the stable SMAPI/SDV release |
| + | {{#arrayindex:beta_status|0}} = compatibility status for the beta SMAPI/SDV release |
| + | |
| + | -->{{#arraydefine:has_source|{{#if:{{{github|}}}{{{source|}}}|1}}}}<!-- |
| + | |
| + | -->{{#arraydefine:status|{{#if:{{{status|}}} |
| + | |{{{status}}} |
| + | |{{#if:{{{unofficial url|}}} |
| + | |unofficial |
| + | |{{#if:{{{broke in|}}} |
| + | |broken |
| + | |ok |
| + | }} |
| + | }} |
| + | }}}}<!-- |
| + | |
| + | Parse input arrays |
| + | |
| + | -->{{#arraydefine:names|{{{name|}}}}}{{#arrayslice:altNames|names|1}}<!-- |
| + | -->{{#arraydefine:authors|{{{author|}}}}}{{#arrayslice:altAuthors|authors|1}}<!-- |
| + | -->{{#arraydefine:ids|{{{id|}}}}}<!-- |
| + | -->{{#arraydefine:warnings|{{{warnings|}}}}}<!-- |
| + | |
| + | Build output |
| | | |
− | stable label (if different)-->{{#ifeq:{{Modding:SMAPI compatibility/entry/compare status|source={{{source|{{{github|}}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|beta unofficial={{{beta unofficial|}}}|beta broke in={{{beta broke in|}}}}}|different|'''1.3.28 (stable):''' }}<!--
| + | --> |
| + | |- class="mod" style="line-height: 1em; {{#switch:{{#arrayindex:status|0}} |ok|optional=background: #9F9; |workaround|unofficial=background: #CF9; |broken=background: #F99; |obsolete|abandoned=background: #999}}" <!-- |
| + | -->id="{{anchorencode:{{#arrayindex:names|0}}}}" <!-- |
| + | -->data-id="{{#arrayprint:ids|,|@@@|@@@}}" <!-- |
| + | -->data-name="{{#arrayprint:names|,|@@@|@@@}}" <!-- |
| + | -->data-author="{{#arrayprint:authors|,|@@@|@@@}}" <!-- |
| + | -->{{#if:{{{chucklefish id|}}}|data-cf-id="{{{chucklefish id}}}"}} <!-- |
| + | -->{{#if:{{{curseforge id|}}}|data-curseforge-id="{{{curseforge id}}}"}} <!-- |
| + | -->{{#if:{{{curseforge key|}}}|data-curseforge-key="{{{curseforge key}}}"}} <!-- |
| + | -->{{#if:{{{nexus id|}}}|data-nexus-id="{{{nexus id}}}"}} <!-- |
| + | -->{{#if:{{{moddrop id|}}}|data-moddrop-id="{{{moddrop id}}}"}} <!-- |
| + | -->{{#if:{{{github|}}}|data-github="{{{github}}}"}} <!-- |
| + | -->{{#if:{{{source|}}}|data-custom-source="{{#tag:nowiki|{{{source}}}}}"}} <!-- |
| + | -->data-url="{{#tag:nowiki|{{#if:{{{nexus id|}}}|{{nexus mod|{{{nexus id}}}}}|{{#if:{{{moddrop id|}}}|{{ModDrop mod|{{{moddrop id}}}}}|{{#if:{{{curseforge key|}}}|https://www.curseforge.com/stardewvalley/mods/{{urlencode:{{{curseforge key}}}}}|{{#if:{{{chucklefish id|}}}|https://community.playstarbound.com/resources/{{urlencode:{{{chucklefish id}}}}}|{{{url|}}}}}}}}}}}}}" <!-- |
| + | -->data-status="{{#arrayindex:status|0}}" <!-- |
| + | -->{{#if:{{{broke in|}}}|data-broke-in="{{{broke in}}}"}} <!-- |
| + | -->{{#if:{{{unofficial version|}}}|data-unofficial-version="{{{unofficial version}}}"}} <!-- |
| + | -->{{#if:{{{unofficial url|}}}|data-unofficial-url="{{#tag:nowiki|{{{unofficial url}}}}}"}} <!-- |
| + | -->{{#if:{{{pull request|}}}|data-pr="{{#tag:nowiki|{{{pull request}}}}}"}} <!-- |
| + | -->{{#ifexpr:{{#arraysize:warnings}} > 0|data-warnings="{{#arrayprint:warnings|, |@@@|@@@}}"}} <!-- |
| + | -->{{#if:{{{content pack for|}}}|data-content-pack-for="{{{content pack for}}}"}} <!-- |
| + | -->{{#if:{{{dev note|}}}|data-dev-note="{{{dev note}}}"}} <!-- |
| + | -->{{#if:{{{map local versions|}}}|data-map-local-versions="{{{map local versions}}}"}} <!-- |
| + | -->{{#if:{{{map remote versions|}}}|data-map-remote-versions="{{{map remote versions}}}"}}<!-- |
| + | -->{{#if:{{{change update keys|}}}|data-change-update-keys="{{{change update keys}}}"}} |
| + | | {{#if:{{{nexus id|}}}|[{{nexus mod|{{{nexus id}}}}} {{#arrayindex:names|0}}]|{{#if:{{{moddrop id|}}}|{{ModDrop mod|{{{moddrop id}}}|{{#arrayindex:names|0}}}}|{{#if:{{{curseforge key|}}}|[https://www.curseforge.com/stardewvalley/mods/{{urlencode:{{{curseforge key}}}}} {{#arrayindex:names|0}}]|{{#if:{{{chucklefish id|}}}|[https://community.playstarbound.com/resources/{{urlencode:{{{chucklefish id}}}}} {{#arrayindex:names|0}}]|{{#if:{{{url|}}}|[{{{url}}} {{#arrayindex:names|0}}]|{{#arrayindex:names|0}}}}}}}}}}}}{{#ifexpr:{{#arraysize:altNames}} > 0|<br /><small style="font-size:0.75em;">(aka {{#arrayprint:altNames|, |@@@|@@@}})</small>}} |
| + | | {{#arrayindex:authors|0}}{{#ifexpr:{{#arraysize:altAuthors}} > 0|<br /><small style="font-size:0.75em;">(aka {{#arrayprint:altAuthors|, |@@@|@@@}})</small>}} |
| + | |<!-- |
| | | |
− | stable summary--><span class="data-summary">{{#switch:{{Modding:SMAPI compatibility/entry/status|source={{{source|{{{github|}}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}}}
| + | summary--><span class="mod-summary">{{#switch:{{#arrayindex:status|0}} |
| |ok = ✓ {{#if:{{{summary|}}}|{{{summary}}}|use latest version.}} | | |ok = ✓ {{#if:{{{summary|}}}|{{{summary}}}|use latest version.}} |
− | |optional = ✓ {{#if:{{{summary|}}}|{{{summary}}}|use optional download<ref name="optional-update" />.}} | + | |optional = ✓ {{#if:{{{summary|}}}|{{{summary}}}|use optional download.}} |
| |unofficial = ⚠ broken{{#if:{{{unofficial url|}}}|, use [{{{unofficial url}}} unofficial update]{{#if:{{{unofficial version|}}}| (<small>{{{unofficial version}}}</small>)}}|{{{unofficial url}}}}}. | | |unofficial = ⚠ broken{{#if:{{{unofficial url|}}}|, use [{{{unofficial url}}} unofficial update]{{#if:{{{unofficial version|}}}| (<small>{{{unofficial version}}}</small>)}}|{{{unofficial url}}}}}. |
| |workaround = ⚠ broken, {{{summary}}} | | |workaround = ⚠ broken, {{{summary}}} |
− | |broken-open = ↻ broken, {{#if:{{{summary|}}}|{{{summary}}}|not updated yet.}} | + | |broken = ↻ broken, {{#if:{{{summary|}}}|{{{summary}}}|{{#if:{{#arrayindex:has_source|0}}|not updated yet.|not open-source.}}}} |
− | |broken-closed = ✖ broken, {{#if:{{{summary|}}}|{{{summary}}}|not open-source.}} | + | |obsolete = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (obsolete).}} |
− | |obsolete = ✖ {{#if:{{{summary|}}}|{{{summary}}}|obsolete.}} | + | |abandoned = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (no longer maintained).}} |
− | |abandoned = ✖ {{#if:{{{summary|}}}|{{{summary}}}|no longer maintained.}} | + | |unknown = ☐ {{#if:{{{summary|}}}|{{{summary}}}|not tested yet.}} |
− | }}</span><!-- | + | }}</span>{{#ifeq:{{#arrayindex:status|0}}|optional|<ref name="optional-update" />}}<!-- |
| | | |
− | beta summary (if different)-->{{#ifeq:{{Modding:SMAPI compatibility/entry/compare status|source={{{source|{{{github|}}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|beta unofficial={{{beta unofficial|}}}|beta broke in={{{beta broke in|}}}}}|different|<br />'''1.3.29 (beta):''' <span class="data-beta-summary">{{#switch:{{Modding:SMAPI compatibility/entry/status|source={{{source|{{{github|}}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|beta unofficial={{{beta unofficial|}}}|beta broke in={{{beta broke in|}}}}}
| + | warnings-->{{#if:{{{warnings|}}}|<br />⚠ {{#arrayprint:warnings|<br />⚠ }}}} |
− | |ok = ✓ {{#if:{{{beta summary|}}}|{{{beta summary}}}|use latest version.}}
| + | | <small>{{{broke in|}}}</small> |
− | |optional = ✓ {{#if:{{{beta summary|}}}|{{{beta summary}}}|use optional download<ref name="optional-update" />.}}
| |
− | |unofficial = ⚠ broken{{#if:{{{beta unofficial url|}}}|, use [{{{beta unofficial url}}} unofficial update]{{#if:{{{beta unofficial version|}}}| (<small>{{{beta unofficial version}}}</small>)}}|{{{beta unofficial url}}}}}.
| |
− | |workaround = ⚠ broken, {{{beta summary}}}.
| |
− | |broken-open = ↻ broken, {{#if:{{{beta summary|}}}|{{{beta summary}}}|not updated yet}}.
| |
− | |broken-closed = ✖ broken, {{#if:{{{beta summary|}}}|{{{beta summary}}}|not open-source}}.
| |
− | |obsolete = ✖ {{#if:{{{beta summary|}}}|{{{beta summary}}}|obsolete.}}
| |
− | |abandoned = ✖ {{#if:{{{beta summary|}}}|{{{beta summary}}}|no longer maintained.}}
| |
− | }}</div>}}
| |
− | | <small>{{#if:{{{beta broke in|}}}|{{{beta broke in}}}|{{{broke in|}}}}}</small> | |
| | {{#if:{{{github|}}}|[https://github.com/{{{github}}} source]|{{#if:{{{source|}}}|[{{{source}}} source]|<span style="color: red; font-size: 0.85em; opacity: 0.5;">closed source</span>}}}} | | | {{#if:{{{github|}}}|[https://github.com/{{{github}}} source]|{{#if:{{{source|}}}|[{{{source}}} source]|<span style="color: red; font-size: 0.85em; opacity: 0.5;">closed source</span>}}}} |
− | | <small>[[#{{{name|}}}|#]] {{#if:{{{hide-url|}}}| [{{{hide-url}}} o]}}{{#if:{{{links|}}}| {{#arraydefine:linkArray|{{{links}}}}}{{#arrayprint:linkArray| |@@@@|[@@@@ {{#expr:{{#arraysearch:linkArray|@@@@}} + 1}}]}}}} {{#if:{{{id|}}}||⚠ no id}}</small><noinclude> | + | | class="no-wrap"|<small><!-- |
| + | |
| + | anchor-->[[#{{#arrayindex:names|0}}|#]] <!-- |
| + | pull request-->{{#if:{{{pull request|}}}| [{{{pull request}}} PR]}} <!-- |
| + | developer note-->{{#if:{{{dev note|}}}|<abbr title="{{{dev note|}}}">[dev note]</abbr>}}<!-- |
| + | |
| + | validation-->{{#ifeq:{{#if:{{{curseforge id|}}}|1|0}}|{{#if:{{{curseforge key|}}}|1|0}}||<abbr title="The mod data is invalid: can't specify CurseForge key or ID without the other.">[⚠ invalid data]</abbr>}}</small><noinclude> |
| |} | | |} |
| | | |
− | ==Usage== | + | ==Examples== |
− | ===Templates=== | + | ===Compatible mod=== |
− | For a compatible mod:
| |
| <pre> | | <pre> |
| {{/entry | | {{/entry |
Line 55: |
Line 101: |
| </pre> | | </pre> |
| | | |
− | For a broken mod:
| + | {| class="wikitable plainlinks" |
| + | |- |
| + | ! mod name |
| + | ! author |
| + | ! compatibility |
| + | ! broke in |
| + | ! source |
| + | ! |
| + | {{Modding:Mod compatibility/entry |
| + | |name = Lookup Anything |
| + | |author = Pathoschild |
| + | |id = Pathoschild.LookupAnything |
| + | |nexus id = 541 |
| + | |github = Pathoschild/StardewMods |
| + | }} |
| + | |} |
| + | |
| + | ===Broken mod=== |
| <pre> | | <pre> |
| {{/entry | | {{/entry |
Line 64: |
Line 127: |
| |github = Pathoschild/StardewMods | | |github = Pathoschild/StardewMods |
| |summary = | | |summary = |
| + | |
| |broke in = Stardew Valley 1.2 | | |broke in = Stardew Valley 1.2 |
| }} | | }} |
| </pre> | | </pre> |
| + | {| class="wikitable plainlinks" |
| + | |- |
| + | ! mod name |
| + | ! author |
| + | ! compatibility |
| + | ! broke in |
| + | ! source |
| + | ! |
| + | {{Modding:Mod compatibility/entry |
| + | |name = Lookup Anything |
| + | |author = Pathoschild |
| + | |id = Pathoschild.LookupAnything |
| + | |nexus id = 541 |
| + | |github = Pathoschild/StardewMods |
| + | |summary = |
| + | |
| + | |broke in = Stardew Valley 1.2 |
| + | }} |
| + | |} |
| | | |
− | For an unofficial update, use the broken-mod template and add these under the other fields: | + | ===Unofficial update=== |
| + | For an unofficial update, use the broken-mod template and add these under <samp>broke in</samp>: |
| <pre> | | <pre> |
− | |unofficial url = https://community.playstarbound.com/attachments/201345000 | + | |unofficial url = https://community.playstarbound.com/threads/updating-mods-for-stardew-valley-1-3.142524/page-62#post-3329160 |
| |unofficial version = 1.18.2-unofficial.1-example | | |unofficial version = 1.18.2-unofficial.1-example |
| + | |pull request = https://github.com/Pathoschild/Example/pull/1 |
| </pre> | | </pre> |
| + | {| class="wikitable plainlinks" |
| + | |- |
| + | ! mod name |
| + | ! author |
| + | ! compatibility |
| + | ! broke in |
| + | ! source |
| + | ! |
| + | {{Modding:Mod compatibility/entry |
| + | |name = Lookup Anything |
| + | |author = Pathoschild |
| + | |id = Pathoschild.LookupAnything |
| + | |nexus id = 541 |
| + | |github = Pathoschild/StardewMods |
| + | |summary = |
| + | |
| + | |broke in = Stardew Valley 1.2 |
| + | |unofficial url = https://community.playstarbound.com/threads/updating-mods-for-stardew-valley-1-3.142524/page-62#post-3329160 |
| + | |unofficial version = 1.18.2-unofficial.1-example |
| + | |pull request = https://github.com/Pathoschild/Example/pull/1 |
| + | }} |
| + | |} |
| + | |
| + | ==Usage== |
| + | ===Limitations=== |
| + | * Avoid using quotes (<code>"</code>) in argument values; use <code>&quot;</code> instead. |
| + | * The <nowiki>name</nowiki>, <nowiki>author</nowiki>, and <nowiki>id</nowiki> arguments are comma-separated. If the actual value contains a comma, use <code>&#44;</code> instead. |
| | | |
| ===Main fields (shown above)=== | | ===Main fields (shown above)=== |
Line 81: |
Line 193: |
| |- | | |- |
| | <code>name</code> | | | <code>name</code> |
− | | The normalised display name for the mod. Combine with <code>name2</code> (see below) to add alternate names. | + | | The normalised display name for the mod. Delimit alternate names with commas. |
| |- | | |- |
| | <code>author</code> | | | <code>author</code> |
− | | The name of the author, as shown on Nexus or in its <tt>manifest.json</tt> file. Combine with <code>author2</code> (see below) to add alternate names. | + | | The name of the author, as shown on Nexus or in its <samp>manifest.json</samp> file. Delimit alternate names with commas. |
| |- | | |- |
| | <code>id</code> | | | <code>id</code> |
− | | The latest unique mod ID, as listed in its <tt>manifest.json</tt> file. In rare cases where there are parallel current releases with different IDs, this can be comma-delimited. For very old mods with no ID, use <tt>none</tt> to disable validation checks. | + | | The unique mod ID, as listed in its <samp>manifest.json</samp> file. Delimit alternate/older IDs with commas (ideally in latest to oldest order). For very old mods with no ID, use <samp>none</samp> to disable validation checks. |
| |- | | |- |
| | <code>nexus id</code> | | | <code>nexus id</code> |
Line 93: |
Line 205: |
| |- | | |- |
| | <code>github</code> | | | <code>github</code> |
− | | The mod's GitHub repository in the form <tt>owner/repo</tt>. | + | | The mod's GitHub repository in the form <samp>owner/repo</samp>. |
| |- | | |- |
| | <code>summary</code> | | | <code>summary</code> |
Line 117: |
Line 229: |
| | The unofficial update's version number, if any. | | | The unofficial update's version number, if any. |
| |- | | |- |
− | | <code>old ids</code> | + | | <code>chucklefish id</code> |
− | | IDs which identify older versions of this mod. | + | | The mod's ID in the [https://community.playstarbound.com/resources/categories/stardew-valley.22/ Chucklefish mod repository]. |
| + | |- |
| + | | <code>curseforge id</code> |
| + | | The mod's project ID in the [https://www.curseforge.com/stardewvalley CurseForge mod repository]. This is the value shown on the mod page next to "Project ID". |
| + | |- |
| + | | <code>curseforge key</code> |
| + | | The mod's key in the [https://www.curseforge.com/stardewvalley CurseForge mod repository]. This is the mod key shown in the mod page's URL. |
| |- | | |- |
− | | <code>cf id</code> | + | | <code>moddrop id</code> |
− | | The mod's ID in the Chucklefish mod repository. | + | | The mod's ID in the [https://www.moddrop.com/stardew-valley/ ModDrop mod repository]. |
| |- | | |- |
| | <code>url</code> | | | <code>url</code> |
− | | The arbitrary mod URL, if not on Nexus or Chucklefish. Avoid if possible, since this makes crossreferencing more difficult. | + | | The arbitrary mod URL, if not on a known mod site. Avoid if possible, since this makes crossreferencing more difficult. |
| |- | | |- |
| | <code>source</code> | | | <code>source</code> |
| | An arbitrary source code URL, if not on GitHub. Avoid if possible, since this makes crossreferencing more difficult. | | | An arbitrary source code URL, if not on GitHub. Avoid if possible, since this makes crossreferencing more difficult. |
| |- | | |- |
− | | <code>name2</code><br /><code>author2</code> | + | | <code>warnings</code> |
− | | Adds alternate mod and author names. | + | | Text explaining additional compatibility warnings about the mod (''e.g.,'' not compatible with Linux/Mac). |
| |- | | |- |
− | | <code>hide-url</code> | + | | <code>content pack for</code> |
− | | Use this instead of (<code>url</code>) to move it into a superscript link. Mainly useful for broken mods with a workaround, so players don't automatically click through to the old mod. | + | | The name of the mod which loads this content pack. |
| |- | | |- |
− | | <code>links</code> | + | | <code>dev note</code> |
− | | A comma-delimited list of URLs to add as superscript links. Mainly useful for linking to pull requests. | + | | Special notes intended for developers who maintain unofficial updates or submit pull requests. |
| |} | | |} |
| | | |
− | ===Beta fields=== | + | ===Override fields=== |
− | When there's a Stardew Valley beta, some mods may have different compatibility statuses for stable vs beta. You can specify these optional fields to specify a different beta status.
| + | These fields override information provided by the author in the <samp>manifest.json</samp> or mod page, so they should only be used as a last resort. |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
Line 147: |
Line 265: |
| ! purpose | | ! purpose |
| |- | | |- |
− | | <code>beta summary</code> | + | | <code>change update keys</code> |
− | | Specify custom notes or instructions about the mod's compatibility. Should usually be blank. | + | | Overrides the [[Modding:Modder Guide/APIs/Update checks|update keys]] from the <samp>manifest.json</samp> or other compatibility list fields. Remove a key with <code>-</code>, add a key with an optional <code>+</code>, and separate keys with commas. For example: |
| + | <pre> |
| + | |override update keys = -Nexus:991, +Nexus:991@CFA |
| + | </pre> |
| |- | | |- |
− | | <code>beta broke in</code> | + | | <code>map remote version</code> |
− | | The SMAPI or Stardew Valley update which broke this mod (if applicable). | + | | When SMAPI performs an update check for the mod, this field overrides the version returned by the server. SMAPI will match the original version using [https://semver.org/ semantic rules] if it's parseable (''e.g.,'' <code>1.0</code> and <code>1.0.0</code> are equivalent), else it'll fallback to case-insensitive string comparison (''e.g.,'' <code>1.01</code> and <code>1.01.0</code> are ''not'' equivalent). If an invalid format is specified or the new version can't be parsed, the mapping will be ignored. |
− | |-
| + | |
− | | <code>beta status</code>
| + | '''This is a specialised field; it's better to correct the mod page if possible.''' |
− | | Whether the mod is compatible with the latest versions of Stardew Valley and SMAPI (see [[#Valid statuses]]). If not specified, it defaults to <code>unofficial</code> if an unofficial URL is given, else <code>broken</code> if <code>broke in</code> is specified, else <code>ok</code>.
| + | |
− | |-
| + | Mappings are specified with an arrow, and multiple mappings can be separated by a semi-colon: |
− | | <code>beta unofficial url</code>
| + | <pre> |
− | | A page URL where the player can download an unofficial update, if any.
| + | |map remote versions = 0.01 → 0.0.1; 0.0.1-beta → 0.0.1 |
| + | </pre> |
| |- | | |- |
− | | <code>beta unofficial version</code> | + | | <code>map local version</code> |
− | | The unofficial update's version number, if any. | + | | Equivalent to <code>map remote version</code>, but for the manifest version. |
| |} | | |} |
| | | |
Line 176: |
Line 298: |
| |- | | |- |
| | <code>unofficial</code> | | | <code>unofficial</code> |
− | | The mod is compatible using an unofficial update. There's no need to specify this; if you also set <tt>unofficial url</tt> and <tt>unofficial version</tt>, you can remove the status field. | + | | The mod is compatible using an unofficial update. There's no need to specify this; if you also set <samp>unofficial url</samp> and <samp>unofficial version</samp>, you can remove the status field. |
| |- | | |- |
| | <code>workaround</code> | | | <code>workaround</code> |
− | | The mod isn't compatible, but the player can fix it or there's a good alternative. A summary should be provided manually. If you also set <tt>unofficial url</tt> and <tt>unofficial version</tt>, you can remove the status field. | + | | The mod isn't compatible, but the player can fix it or there's a good alternative. A summary should be provided manually. If you also set <samp>unofficial url</samp> and <samp>unofficial version</samp>, you can remove the status field. |
| |- | | |- |
| | <code>broken</code> | | | <code>broken</code> |
Line 189: |
Line 311: |
| | <code>obsolete</code> | | | <code>obsolete</code> |
| | The mod is no longer needed and should be removed. | | | The mod is no longer needed and should be removed. |
| + | |- |
| + | | <code>unknown</code> |
| + | | The mod's compatibility status hasn't been tested. This should only be used as a placeholder (''e.g.,'' when adding a new beta), it should never be used long since that defeats the purpose of the compatibility list. |
| |} | | |} |
| | | |
− | ==Script==
| + | [[de:Modding:SMAPI Kompatibilität/entry]] |
− | This script generates the template call when run from a Nexus or Chucklefish mod page.
| |
− | <source lang="javascript">
| |
− | switch(location.host)
| |
− | {
| |
− | case "www.nexusmods.com":
| |
− | var url = location.origin + location.pathname.replace(/\/*$/, '');
| |
− | var name = $(".header-name").text();
| |
− | var author = $(".uploader a").text();
| |
− | var author2 = $(".header-author strong").text();
| |
− | break;
| |
| | | |
− | case "community.playstarbound.com":
| + | [[Category:Modding]] |
− | var url = location.origin + location.pathname.replace(/\/*$/, '');
| + | </noinclude> |
− | var name = $.trim($("h1:first").contents().first().text());
| |
− | var author = $(".primaryContent[data-author]:first").attr("data-author");
| |
− | break;
| |
− | | |
− | default:
| |
− | throw `Unknown domain: ${location.host}`;
| |
− | }
| |
− | | |
− | var template = `
| |
− | {{/entry
| |
− | |name = ${name}
| |
− | |author = ${author}`;
| |
− | if(author2 && author2 != author)
| |
− | template += '\n' + ` |author2 = ${author2}`;
| |
− | template += `
| |
− | |url = ${url}
| |
− | |status = ok
| |
− | |summary =
| |
− | |source =
| |
− | }}
| |
− | `;
| |
− | </source>
| |
− | | |
− | [[Category:Modding]]</noinclude> | |