Line 10: |
Line 10: |
| </noinclude><!-- | | </noinclude><!-- |
| | | |
− | Define a few expensive variables here. | + | Define a few variables here: |
| + | {{#arrayindex:has_source|0}} = set if a GitHub project name or custom source URL is set, else blank |
| + | {{#arrayindex:status|0}} = compatibility status for the stable SMAPI/SDV release |
| + | {{#arrayindex:beta_status|0}} = compatibility status for the beta SMAPI/SDV release |
| | | |
− | {{#arrayindex:vars|0}} = main status
| + | -->{{#arraydefine:has_source|{{#if:{{{github|}}}{{{source|}}}|1}}}}<!-- |
− | {{#arrayindex:vars|1}} = main status (no subtag)
| |
| | | |
− | -->{{#arraydefine:vars|<!-- | + | -->{{#arraydefine:status|{{#if:{{{status|}}} |
− | 0-->{{Modding:SMAPI compatibility/entry/status|source={{#if:{{{github|}}}|{{{github}}}|{{{source|}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}}},<!--
| + | |{{{status}}} |
− | 1-->{{Modding:SMAPI compatibility/entry/status|source={{#if:{{{github|}}}|{{{github}}}|{{{source|}}}}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|no subtag=1}},
| + | |{{#if:{{{unofficial url|}}} |
− | }}<!-- | + | |unofficial |
| + | |{{#if:{{{broke in|}}} |
| + | |broken |
| + | |ok |
| + | }} |
| + | }} |
| + | }}}}<!-- |
| | | |
| Parse input arrays | | Parse input arrays |
Line 30: |
Line 38: |
| | | |
| --> | | --> |
− | |- class="mod" style="line-height: 1em; {{#switch:{{#arrayindex:vars|1}} |ok|optional=background: #9F9; |workaround|unofficial=background: #CF9; |broken=background: #F99; |obsolete|abandoned=background: #999}}" <!-- | + | |- 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}}}}" <!-- | | -->id="{{anchorencode:{{#arrayindex:names|0}}}}" <!-- |
| -->data-id="{{#arrayprint:ids|,|@@@|@@@}}" <!-- | | -->data-id="{{#arrayprint:ids|,|@@@|@@@}}" <!-- |
| -->data-name="{{#arrayprint:names|,|@@@|@@@}}" <!-- | | -->data-name="{{#arrayprint:names|,|@@@|@@@}}" <!-- |
| -->data-author="{{#arrayprint:authors|,|@@@|@@@}}" <!-- | | -->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:{{{nexus id|}}}|data-nexus-id="{{{nexus id}}}"}} <!-- |
| -->{{#if:{{{moddrop id|}}}|data-moddrop-id="{{{moddrop id}}}"}} <!-- | | -->{{#if:{{{moddrop id|}}}|data-moddrop-id="{{{moddrop id}}}"}} <!-- |
− | -->{{#if:{{{cf id|}}}|data-cf-id="{{{cf id}}}"}} <!--
| |
| -->{{#if:{{{github|}}}|data-github="{{{github}}}"}} <!-- | | -->{{#if:{{{github|}}}|data-github="{{{github}}}"}} <!-- |
| -->{{#if:{{{source|}}}|data-custom-source="{{#tag:nowiki|{{{source}}}}}"}} <!-- | | -->{{#if:{{{source|}}}|data-custom-source="{{#tag:nowiki|{{{source}}}}}"}} <!-- |
− | -->data-url="{{#tag:nowiki|{{#if:{{{nexus id|}}}|{{nexus mod|{{{nexus id}}}}}|{{#if:{{{cf id|}}}|https://community.playstarbound.com/resources/{{urlencode:{{{cf id}}}}}|{{#if:{{{moddrop id|}}}|https://www.moddrop.com/sdv/mod/{{urlencode:{{{moddrop id}}}}}|{{{url|}}}}}}}}}}}" <!-- | + | -->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:vars|1}}" <!-- | + | -->data-status="{{#arrayindex:status|0}}" <!-- |
| -->{{#if:{{{broke in|}}}|data-broke-in="{{{broke in}}}"}} <!-- | | -->{{#if:{{{broke in|}}}|data-broke-in="{{{broke in}}}"}} <!-- |
| -->{{#if:{{{unofficial version|}}}|data-unofficial-version="{{{unofficial version}}}"}} <!-- | | -->{{#if:{{{unofficial version|}}}|data-unofficial-version="{{{unofficial version}}}"}} <!-- |
| -->{{#if:{{{unofficial url|}}}|data-unofficial-url="{{#tag:nowiki|{{{unofficial url}}}}}"}} <!-- | | -->{{#if:{{{unofficial url|}}}|data-unofficial-url="{{#tag:nowiki|{{{unofficial url}}}}}"}} <!-- |
− | -->{{#ifexpr:{{#arraysize:warnings}} > 0|data-warnings="{{#arrayprint:warnings|, |@@@|@@@}}"}} | + | -->{{#if:{{{pull request|}}}|data-pr="{{#tag:nowiki|{{{pull request}}}}}"}} <!-- |
− | | {{#if:{{{nexus id|}}}|[{{nexus mod|{{{nexus id}}}}} {{#arrayindex:names|0}}]|{{#if:{{{cf id|}}}|[https://community.playstarbound.com/resources/{{urlencode:{{{cf id}}}}} {{#arrayindex:names|0}}]|{{#if:{{{moddrop id|}}}|[https://www.moddrop.com/sdv/mod/{{urlencode:{{{moddrop 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>}} | + | -->{{#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>}} | | | {{#arrayindex:authors|0}}{{#ifexpr:{{#arraysize:altAuthors}} > 0|<br /><small style="font-size:0.75em;">(aka {{#arrayprint:altAuthors|, |@@@|@@@}})</small>}} |
| |<!-- | | |<!-- |
| | | |
− | stable label (if different)-->{{#ifeq:{{#arrayindex:statuscompare|0}}|different|'''{{version|stable|link=0}}:''' }}<!--
| + | summary--><span class="mod-summary">{{#switch:{{#arrayindex:status|0}} |
− | | + | |ok = ✓ {{#if:{{{summary|}}}|{{{summary}}}|use latest version.}} |
− | summary--><span class="mod-summary">{{Modding:SMAPI compatibility/entry/summary
| + | |optional = ✓ {{#if:{{{summary|}}}|{{{summary}}}|use optional download.}} |
− | |status = {{#arrayindex:vars|0}}
| + | |unofficial = ⚠ broken{{#if:{{{unofficial url|}}}|, use [{{{unofficial url}}} unofficial update]{{#if:{{{unofficial version|}}}| (<small>{{{unofficial version}}}</small>)}}|{{{unofficial url}}}}}. |
− | |summary = {{{summary|}}} | + | |workaround = ⚠ broken, {{{summary}}} |
− | |unofficial url = {{{unofficial url|}}}
| + | |broken = ↻ broken, {{#if:{{{summary|}}}|{{{summary}}}|{{#if:{{#arrayindex:has_source|0}}|not updated yet.|not open-source.}}}} |
− | |unofficial version = {{{unofficial version|}}}
| + | |obsolete = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (obsolete).}} |
− | }}</span>{{#ifeq:{{#arrayindex:vars|0}}|optional|<ref name="optional-update" />}}<!-- | + | |abandoned = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (no longer maintained).}} |
| + | |unknown = ☐ {{#if:{{{summary|}}}|{{{summary}}}|not tested yet.}} |
| + | }}</span>{{#ifeq:{{#arrayindex:status|0}}|optional|<ref name="optional-update" />}}<!-- |
| | | |
| warnings-->{{#if:{{{warnings|}}}|<br />⚠ {{#arrayprint:warnings|<br />⚠ }}}} | | warnings-->{{#if:{{{warnings|}}}|<br />⚠ {{#arrayprint:warnings|<br />⚠ }}}} |
| | <small>{{{broke in|}}}</small> | | | <small>{{{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>[[#{{#arrayindex:names|0}}|#]] {{#if:{{{hide-url|}}}| [{{{hide-url}}} o]}} {{#ifexpr:{{#arraysize:ids}} = 0|⚠ 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> |
| |} | | |} |
| | | |
Line 85: |
Line 109: |
| ! source | | ! source |
| ! | | ! |
− | {{Modding:SMAPI_compatibility/entry | + | {{Modding:Mod compatibility/entry |
| |name = Lookup Anything | | |name = Lookup Anything |
| |author = Pathoschild | | |author = Pathoschild |
Line 103: |
Line 127: |
| |github = Pathoschild/StardewMods | | |github = Pathoschild/StardewMods |
| |summary = | | |summary = |
| + | |
| |broke in = Stardew Valley 1.2 | | |broke in = Stardew Valley 1.2 |
| }} | | }} |
Line 114: |
Line 139: |
| ! source | | ! source |
| ! | | ! |
− | {{Modding:SMAPI_compatibility/entry | + | {{Modding:Mod compatibility/entry |
| |name = Lookup Anything | | |name = Lookup Anything |
| |author = Pathoschild | | |author = Pathoschild |
Line 121: |
Line 146: |
| |github = Pathoschild/StardewMods | | |github = Pathoschild/StardewMods |
| |summary = | | |summary = |
| + | |
| |broke in = Stardew Valley 1.2 | | |broke in = Stardew Valley 1.2 |
| }} | | }} |
Line 126: |
Line 152: |
| | | |
| ===Unofficial update=== | | ===Unofficial update=== |
− | For an unofficial update, use the broken-mod template and add these under the other fields: | + | 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" | | {| class="wikitable plainlinks" |
Line 139: |
Line 166: |
| ! source | | ! source |
| ! | | ! |
− | {{Modding:SMAPI_compatibility/entry | + | {{Modding:Mod compatibility/entry |
| |name = Lookup Anything | | |name = Lookup Anything |
| |author = Pathoschild | | |author = Pathoschild |
Line 146: |
Line 173: |
| |github = Pathoschild/StardewMods | | |github = Pathoschild/StardewMods |
| |summary = | | |summary = |
− | |broke in = Stardew Valley 1.2 | + | |
− | |unofficial url = https://community.playstarbound.com/attachments/201345000 | + | |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 | | |unofficial version = 1.18.2-unofficial.1-example |
| + | |pull request = https://github.com/Pathoschild/Example/pull/1 |
| }} | | }} |
| |} | | |} |
Line 167: |
Line 196: |
| |- | | |- |
| | <code>author</code> | | | <code>author</code> |
− | | The name of the author, as shown on Nexus or in its <tt>manifest.json</tt> file. Delimit alternate names with commas. | + | | 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 unique mod ID, as listed in its <tt>manifest.json</tt> file. Delimit alternate/older IDs with commas (ideally in latest to oldest order). 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 176: |
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 200: |
Line 229: |
| | The unofficial update's version number, if any. | | | The unofficial update's version number, if any. |
| |- | | |- |
− | | <code>cf id</code> | + | | <code>chucklefish id</code> |
| | The mod's ID in the [https://community.playstarbound.com/resources/categories/stardew-valley.22/ Chucklefish mod repository]. | | | 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>moddrop id</code> | | | <code>moddrop id</code> |
− | | The mod's ID in the [https://www.moddrop.com/sdv/ ModDrop 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>hide-url</code> | + | | <code>warnings</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. | + | | Text explaining additional compatibility warnings about the mod (''e.g.,'' not compatible with Linux/Mac). |
| + | |- |
| + | | <code>content pack for</code> |
| + | | The name of the mod which loads this content pack. |
| + | |- |
| + | | <code>dev note</code> |
| + | | Special notes intended for developers who maintain unofficial updates or submit pull requests. |
| + | |} |
| + | |
| + | ===Override fields=== |
| + | 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" |
| + | |- |
| + | ! field |
| + | ! purpose |
| |- | | |- |
− | | <code>warnings</code> | + | | <code>change update keys</code> |
− | | Text explaining additional compatibility warnings about the mod (e.g. not compatible with Linux/Mac). | + | | 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>map remote version</code> |
| + | | 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. |
| + | |
| + | '''This is a specialised field; it's better to correct the mod page if possible.''' |
| + | |
| + | Mappings are specified with an arrow, and multiple mappings can be separated by a semi-colon: |
| + | <pre> |
| + | |map remote versions = 0.01 → 0.0.1; 0.0.1-beta → 0.0.1 |
| + | </pre> |
| + | |- |
| + | | <code>map local version</code> |
| + | | Equivalent to <code>map remote version</code>, but for the manifest version. |
| |} | | |} |
| | | |
Line 232: |
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 245: |
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":
| |
− | var url = location.origin + location.pathname.replace(/\/*$/, '');
| |
− | 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 += `, ${author2}`;
| |
− | template += `
| |
− | |url = ${url}
| |
− | |status = ok
| |
− | |summary =
| |
− | |source =
| |
− | }}
| |
− | `;
| |
− | </source>
| |
| | | |
− | [[Category:Modding]]</noinclude> | + | [[Category:Modding]] |
| + | </noinclude> |