Changes

Jump to navigation Jump to search
→‎Usage: remove deleted 'pull request' parameter
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}}}}}"}} <!--
-->data-smapi-3-status="{{#switch:{{{3.0 ready|}}}|yes=ok |no=broken |#default={{#if:{{{3.0 ready|}}}|soon|unknown}}}}"
+
-->{{#ifexpr:{{#arraysize:warnings}} > 0|data-warnings="{{#arrayprint:warnings|, |@@@|@@@}}"}} <!--
| {{#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>}}
+
-->{{#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}}:'''&#32;}}<!--
+
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|}}}|&#32;(<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 />⚠&#32;{{#arrayprint:warnings|<br />⚠&#32;}}}}
 
warnings-->{{#if:{{{warnings|}}}|<br />⚠&#32;{{#arrayprint:warnings|<br />⚠&#32;}}}}
 
| <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}}|#]] ({{#switch:{{{3.0 ready|}}}|yes=3.0 ✓ |no=3.0 ⚠ |#default={{#if:{{{3.0 ready|}}}|[{{{3.0 ready}}} 3.0 ↻]|3.0 ?}}}})</small><noinclude>
+
| class="no-wrap"|<small><!--
 +
 
 +
anchor-->[[#{{#arrayindex:names|0}}|#]] <!--
 +
pull request-->{{#if:{{{pull request|}}}|&#32;[{{{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 86: Line 109:  
! source
 
! source
 
! &nbsp;
 
! &nbsp;
{{Modding:SMAPI_compatibility/entry
+
{{Modding:Mod compatibility/entry
 
   |name    = Lookup Anything
 
   |name    = Lookup Anything
 
   |author  = Pathoschild
 
   |author  = Pathoschild
Line 104: Line 127:  
   |github  = Pathoschild/StardewMods
 
   |github  = Pathoschild/StardewMods
 
   |summary  =  
 
   |summary  =  
 +
 
   |broke in = Stardew Valley 1.2
 
   |broke in = Stardew Valley 1.2
 
}}
 
}}
Line 115: Line 139:  
! source
 
! source
 
! &nbsp;
 
! &nbsp;
{{Modding:SMAPI_compatibility/entry
+
{{Modding:Mod compatibility/entry
 
   |name    = Lookup Anything
 
   |name    = Lookup Anything
 
   |author  = Pathoschild
 
   |author  = Pathoschild
Line 122: Line 146:  
   |github  = Pathoschild/StardewMods
 
   |github  = Pathoschild/StardewMods
 
   |summary  =  
 
   |summary  =  
 +
 
   |broke in = Stardew Valley 1.2
 
   |broke in = Stardew Valley 1.2
 
}}
 
}}
Line 127: 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 140: Line 166:  
! source
 
! source
 
! &nbsp;
 
! &nbsp;
{{Modding:SMAPI_compatibility/entry
+
{{Modding:Mod compatibility/entry
 
   |name    = Lookup Anything
 
   |name    = Lookup Anything
 
   |author  = Pathoschild
 
   |author  = Pathoschild
Line 147: 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 168: 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 177: 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 201: 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>
Line 214: Line 248:  
|-
 
|-
 
| <code>warnings</code>
 
| <code>warnings</code>
| Text explaining additional compatibility warnings about the mod (e.g. not compatible with Linux/Mac).
+
| 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>3.0 ready</code>
+
| <code>change update keys</code>
| Whether the mod is compatible with the upcoming SMAPI 3.0. Possible values are <tt>yes</tt>, <tt>no</tt>, or a URL to a pull request.
+
| 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 233: 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 246: 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]]
 
[[Category:Modding]]
  −
[[de:Modding:SMAPI Kompatibilität/entry]]
  −
   
</noinclude>
 
</noinclude>
translators
8,404

edits

Navigation menu