Difference between revisions of "Modding:Mod compatibility/entry"

From Stardew Valley Wiki
Jump to navigation Jump to search
(merge in summary logic to reduce subtemplates)
(rewrite status handling to remove subtemplate)
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:status_compare|0}} = whether the compatibility info is equivalent between main and beta ('same' or 'different'). If both statuses are 'unofficial', they match if their unofficial URLs do; else they match if their statuses do.
  
  {{#arrayindex:sourceUrl|0}} = GitHub URL, else custom source URL
+
-->{{#arraydefine:has_source|{{#if:{{{github|}}}{{{source|}}}|1}}}}<!--
  {{#arrayindex:status|0}} = main status
 
  {{#arrayindex:status|1}} = beta status
 
  {{#arrayindex:statuscompare|0}} = whether the compatibility info is equivalent between main and beta ('same' or 'different'). If both statuses are 'unofficial', they match if their unofficial URLs do; else they match if their statuses do.
 
  
-->{{#arraydefine:sourceUrl|{{#if:{{{github|}}}|{{{github}}}|{{{source|}}}}}}}<!--
+
-->{{#arraydefine:status|{{#if:{{{status|}}}
-->{{#arraydefine:status|<!--
+
  |{{{status}}}
  0-->{{Modding:Mod compatibility/entry/status|source={{#arrayindex:sourceUrl|0}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}}},<!--
+
  |{{#if:{{{unofficial url|}}}
  1-->{{Modding:Mod compatibility/entry/status|source={{#arrayindex:sourceUrl|0}}|unofficial={{{unofficial url|}}}|broke in={{{broke in|}}}|status={{{status|}}}|beta unofficial={{{beta unofficial url|}}}|beta broke in={{{beta broke in|}}}|beta status={{{beta status|}}}}}
+
    |unofficial
}}{{#arraydefine:statuscompare|{{#switch:{{#arrayindex:status|0}},{{#arrayindex:status|1}}
+
    |{{#if:{{{broke in|}}}
 +
      |broken
 +
      |ok
 +
    }}
 +
  }}
 +
}}}}<!--
 +
 
 +
-->{{#arraydefine:beta_status|{{#if:{{{beta status|}}}
 +
  |{{{beta status}}}
 +
  |{{#if:{{{beta unofficial url|}}}
 +
    |unofficial
 +
    |{{#if:{{{beta broke in|}}}
 +
      |broken
 +
      |{{#arrayindex:status|0}}
 +
    }}
 +
  }}
 +
}}}}<!--
 +
 
 +
-->{{#arraydefine:status_compare|{{#switch:{{#arrayindex:status|0}},{{#arrayindex:beta_status|0}}
 
   |unofficial,unofficial = {{#ifeq:{{{unofficial url|}}}|{{#if:{{{beta unofficial url|}}}|{{{beta unofficial url}}}|{{{unofficial url|}}}}}|same|different}}
 
   |unofficial,unofficial = {{#ifeq:{{{unofficial url|}}}|{{#if:{{{beta unofficial url|}}}|{{{beta unofficial url}}}|{{{unofficial url|}}}}}|same|different}}
   |#default = {{#ifeq:{{#arrayindex:status|0}}|{{#arrayindex:status|1}}|same|different}}
+
   |#default = {{#ifeq:{{#arrayindex:status|0}}|{{#arrayindex:beta_status|0}}|same|different}}
 
}}}}<!--
 
}}}}<!--
  
Line 51: Line 70:
 
-->{{#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}}}}}"}} <!--
-->{{#ifeq:{{#arrayindex:statuscompare|0}}|different|<!--
+
-->{{#ifeq:{{#arrayindex:status_compare|0}}|different|<!--
   -->data-beta-status="{{#arrayindex:status|1}}" <!--
+
   -->data-beta-status="{{#arrayindex:beta_status|0}}" <!--
 
   -->{{#if:{{{beta broke in|}}}|data-beta-broke-in="{{{beta broke in}}}"}} <!--
 
   -->{{#if:{{{beta broke in|}}}|data-beta-broke-in="{{{beta broke in}}}"}} <!--
 
   -->{{#if:{{{beta unofficial version|}}}|data-beta-unofficial-version="{{{beta unofficial version}}}"}} <!--
 
   -->{{#if:{{{beta unofficial version|}}}|data-beta-unofficial-version="{{{beta unofficial version}}}"}} <!--
Line 64: Line 83:
 
|<!--
 
|<!--
  
stable label (if different)-->{{#ifeq:{{#arrayindex:statuscompare|0}}|different|'''{{version|stable|link=0}}:'''&#32;}}<!--
+
stable label (if different)-->{{#ifeq:{{#arrayindex:status_compare|0}}|different|'''{{version|stable|link=0}}:'''&#32;}}<!--
  
 
summary--><span class="mod-summary">{{#switch:{{#arrayindex:status|0}}
 
summary--><span class="mod-summary">{{#switch:{{#arrayindex:status|0}}
Line 71: Line 90:
 
  |unofficial = ⚠ broken{{#if:{{{unofficial url|}}}|, use [{{{unofficial url}}} unofficial update]{{#if:{{{unofficial version|}}}|&#32;(<small>{{{unofficial version}}}</small>)}}|{{{unofficial url}}}}}.
 
  |unofficial = ⚠ broken{{#if:{{{unofficial url|}}}|, use [{{{unofficial url}}} unofficial update]{{#if:{{{unofficial version|}}}|&#32;(<small>{{{unofficial version}}}</small>)}}|{{{unofficial url}}}}}.
 
  |workaround = ⚠ broken, {{{summary}}}
 
  |workaround = ⚠ broken, {{{summary}}}
  |broken    = ↻ broken, {{#if:{{{summary|}}}|{{{summary}}}|{{#if:{{#arrayindex:sourceUrl|0}}|not updated yet.|not open-source.}}}}
+
  |broken    = ↻ broken, {{#if:{{{summary|}}}|{{{summary}}}|{{#if:{{#arrayindex:has_source|0}}|not updated yet.|not open-source.}}}}
 
  |obsolete  = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (obsolete).}}
 
  |obsolete  = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (obsolete).}}
 
  |abandoned  = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (no longer maintained).}}
 
  |abandoned  = ✖ {{#if:{{{summary|}}}|{{{summary}}}|remove this mod (no longer maintained).}}
 
}}</span>{{#ifeq:{{#arrayindex:status|0}}|optional|<ref name="optional-update" />}}<!--
 
}}</span>{{#ifeq:{{#arrayindex:status|0}}|optional|<ref name="optional-update" />}}<!--
  
beta summary (if different)-->{{#ifeq:{{#arrayindex:statuscompare|0}}|different|<br />'''1.4 (upcoming)<!--{{version|beta|link=0}}-beta-->:'''&#32;<span class="mod-beta-summary">{{#switch:{{#arrayindex:status|1}}
+
beta summary (if different)-->{{#ifeq:{{#arrayindex:status_compare|0}}|different|<br />'''1.4 (upcoming)<!--{{version|beta|link=0}}-beta-->:'''&#32;<span class="mod-beta-summary">{{#switch:{{#arrayindex:beta_status|0}}
 
  |ok        = ✓ {{#if:{{{beta summary|}}}|{{{beta summary}}}|use latest version.}}
 
  |ok        = ✓ {{#if:{{{beta summary|}}}|{{{beta summary}}}|use latest version.}}
 
  |optional  = ✓ {{#if:{{{beta summary|}}}|{{{beta summary}}}|use optional download.}}
 
  |optional  = ✓ {{#if:{{{beta summary|}}}|{{{beta summary}}}|use optional download.}}
 
  |unofficial = ⚠ broken{{#if:{{{beta unofficial url|}}}|, use [{{{beta unofficial url}}} unofficial update]{{#if:{{{beta unofficial version|}}}|&#32;(<small>{{{beta unofficial version}}}</small>)}}|{{{beta unofficial url}}}}}.
 
  |unofficial = ⚠ broken{{#if:{{{beta unofficial url|}}}|, use [{{{beta unofficial url}}} unofficial update]{{#if:{{{beta unofficial version|}}}|&#32;(<small>{{{beta unofficial version}}}</small>)}}|{{{beta unofficial url}}}}}.
 
  |workaround = ⚠ broken, {{{beta summary}}}
 
  |workaround = ⚠ broken, {{{beta summary}}}
  |broken    = ↻ broken, {{#if:{{{beta summary|}}}|{{{beta summary}}}|{{#if:{{#arrayindex:sourceUrl|0}}|not updated yet.|not open-source.}}}}
+
  |broken    = ↻ broken, {{#if:{{{beta summary|}}}|{{{beta summary}}}|{{#if:{{#arrayindex:has_source|0}}|not updated yet.|not open-source.}}}}
 
  |obsolete  = ✖ {{#if:{{{beta summary|}}}|{{{beta summary}}}|remove this mod (obsolete).}}
 
  |obsolete  = ✖ {{#if:{{{beta summary|}}}|{{{beta summary}}}|remove this mod (obsolete).}}
 
  |abandoned  = ✖ {{#if:{{{beta summary|}}}|{{{beta summary}}}|remove this mod (no longer maintained).}}
 
  |abandoned  = ✖ {{#if:{{{beta summary|}}}|{{{beta summary}}}|remove this mod (no longer maintained).}}
}}</span>{{#ifeq:{{#arrayindex:status|1}}|optional|<ref name="optional-update" />}}}}<!--
+
}}</span>{{#ifeq:{{#arrayindex:beta_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;}}}}
Line 92: Line 111:
  
 
anchor-->[[#{{#arrayindex:names|0}}|#]] <!--
 
anchor-->[[#{{#arrayindex:names|0}}|#]] <!--
metadata links-->{{#if:{{{link labels|}}}|{{#arraydefine:labelsArray|{{{link labels}}}}}}}{{#if:{{{links|}}}|&#32;{{#arraydefine:linkArray|{{{links}}}}}{{#arrayprint:linkArray|&#32;|@@@|[@@@ {{#if:{{#arrayindex:labelsArray|{{#arraysearch:linkArray|@@@}}}}|{{#arrayindex:labelsArray|{{#arraysearch:linkArray|@@@}}}}|{{#expr:{{#arraysearch:linkArray|@@@}} + 1}}}}]}}}} <!--
+
metadata links-->{{#if:{{{link labels|}}}|{{#arraydefine:labels_array|{{{link labels}}}}}}}{{#if:{{{links|}}}|&#32;{{#arraydefine:linkArray|{{{links}}}}}{{#arrayprint:linkArray|&#32;|@@@|[@@@ {{#if:{{#arrayindex:labels_array|{{#arraysearch:linkArray|@@@}}}}|{{#arrayindex:labels_array|{{#arraysearch:linkArray|@@@}}}}|{{#expr:{{#arraysearch:linkArray|@@@}} + 1}}}}]}}}} <!--
 
developer note-->{{#if:{{{dev note|}}}|<abbr title="{{{dev note|}}}">[dev note]</abbr>}}</small><noinclude>
 
developer note-->{{#if:{{{dev note|}}}|<abbr title="{{{dev note|}}}">[dev note]</abbr>}}</small><noinclude>
 
|}
 
|}

Revision as of 19:33, 12 August 2019

Examples

Compatible mod

{{/entry
  |name     = Lookup Anything
  |author   = Pathoschild
  |id       = Pathoschild.LookupAnything
  |nexus id = 541
  |github   = Pathoschild/StardewMods
}}

Broken mod

{{/entry
  |name     = Lookup Anything
  |author   = Pathoschild
  |id       = Pathoschild.LookupAnything
  |nexus id = 541
  |github   = Pathoschild/StardewMods
  |summary  = 
  |broke in = Stardew Valley 1.2
  |links    = https://github.com/Pathoschild/SMAPI/issues
  |link labels = PR
}}

Unofficial update

For an unofficial update, use the broken-mod template and add these under the other fields:

  |unofficial url     = https://community.playstarbound.com/attachments/201345000
  |unofficial version = 1.18.2-unofficial.1-example

Different beta status

{{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/attachments/201345000
  |unofficial version = 1.18.2-unofficial.1-example

  |beta broke in = Stardew Valley 1.3
}}

Usage

Limitations

  • Avoid using quotes (") in argument values; use &quot; instead.
  • The name, author, and id arguments are comma-separated. If the actual value contains a comma, use &#44; instead.

Main fields (shown above)

field purpose
name The normalised display name for the mod. Delimit alternate names with commas.
author The name of the author, as shown on Nexus or in its manifest.json file. Delimit alternate names with commas.
id The unique mod ID, as listed in its manifest.json file. Delimit alternate/older IDs with commas (ideally in latest to oldest order). For very old mods with no ID, use none to disable validation checks.
nexus id The mod's unique ID on Nexus (if any). This is the number in the mod page's URL.
github The mod's GitHub repository in the form owner/repo.
summary Specify custom notes or instructions about the mod's compatibility. Should usually be blank.
broke in The SMAPI or Stardew Valley update which broke this mod (if applicable).

Other fields

field purpose
status Whether the mod is compatible with the latest versions of Stardew Valley and SMAPI (see #Valid statuses). If not specified, it defaults to unofficial if an unofficial URL is given, else broken if broke in is specified, else ok.
unofficial url A page URL where the player can download an unofficial update, if any.
unofficial version The unofficial update's version number, if any.
cf id The mod's ID in the Chucklefish mod repository.
moddrop id The mod's ID in the ModDrop mod repository.
url The arbitrary mod URL, if not on Nexus or Chucklefish. Avoid if possible, since this makes crossreferencing more difficult.
source An arbitrary source code URL, if not on GitHub. Avoid if possible, since this makes crossreferencing more difficult.
links A comma-delimited list of URLs to add as links in the metadata column. Mainly useful for linking to pull requests.
link labels A comma-delimited list of link labels for the links URLs. If omitted, the links will be numbered instead.
warnings Text explaining additional compatibility warnings about the mod (e.g. not compatible with Linux/Mac).
content pack for The name of the mod which loads this content pack.
dev note Special notes intended for developers who maintain unofficial updates or submit pull requests.

Beta 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.

field purpose
beta summary Specify custom notes or instructions about the mod's compatibility. Should usually be blank.
beta broke in The SMAPI or Stardew Valley update which broke this mod (if applicable).
beta status Whether the mod is compatible with the latest versions of Stardew Valley and SMAPI (see #Valid statuses). If not specified, it defaults to unofficial if an unofficial URL is given, else broken if broke in is specified, else ok.
beta unofficial url A page URL where the player can download an unofficial update, if any.
beta unofficial version The unofficial update's version number, if any.

Valid statuses

status description
ok The mod is compatible. This is the default and doesn't need to be specified.
Default summary: use latest version.
optional The mod is compatible, if you use an optional download on the mod page.
Default summary: use optional download.[1]
unofficial The mod is compatible using an unofficial update. There's no need to specify this; if you also set unofficial url and unofficial version, you can remove the status field.
workaround 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 unofficial url and unofficial version, you can remove the status field.
broken The mod isn't compatible. The message depends on whether the source link is set.
Default summary: broken, not updated yet or broken, not open-source.
abandoned The mod is no longer maintained by the author, and an unofficial update or continuation is unlikely. This should only be used when the author has definitively abandoned the mod (either explicitly, or by removing the mod page or downloads).
Default summary: no longer maintained.
obsolete The mod is no longer needed and should be removed.