Difference between revisions of "Modding:Modder Guide/APIs"

From Stardew Valley Wiki
Jump to navigation Jump to search
(ES link)
 
(15 intermediate revisions by 4 users not shown)
Line 13: Line 13:
 
|-
 
|-
 
| [[/Events|Events]]
 
| [[/Events|Events]]
| Respond when something happens in the game (e.g. when a save is loaded), and often include details about what happened.
+
| Respond when something happens in the game (''e.g.,'' when a save is loaded), and often include details about what happened.
 
|-
 
|-
| [[/Config|Mod configuration]]
+
| [[/Config|Configuration]]
| Let players edit a <tt>config.json</tt> file to configure your mod.
+
| Let players edit a <samp>config.json</samp> file to configure your mod.
 
|-
 
|-
 
| [[/Content|Content]]
 
| [[/Content|Content]]
 
| Load images/maps/data, and edit or replace the game's images/maps/data.
 
| Load images/maps/data, and edit or replace the game's images/maps/data.
 +
|-
 +
| [[/Data|Data]]
 +
| Store arbitrary data and retrieve it later.
 +
|-
 +
| [[/Input|Input]]
 +
| Check and suppress keyboard, controller, and mouse state.
 
|-
 
|-
 
| [[/Logging|Logging]]
 
| [[/Logging|Logging]]
Line 51: Line 57:
 
| [[/Integrations|Mod integrations]]
 
| [[/Integrations|Mod integrations]]
 
| Get information about loaded mods, and integrate with mods using mod-provided APIs.
 
| Get information about loaded mods, and integrate with mods using mod-provided APIs.
 +
|-
 +
| [[/Harmony|Harmony patching]]
 +
| Harmony lets you patch or replace methods, effectively rewriting the game code.
 
|}
 
|}
  
==Mod APIs==
+
[[es:Modding:Guía del Modder/APIs]]
===Reflection===
+
[[zh:模组:制作指南/APIs]]
SMAPI provides an API for robustly accessing fields, properties, or methods you otherwise couldn't access, such as private fields. You can use it from <tt>helper.Reflection</tt> in your entry method, or <tt>this.Helper.Reflection</tt> elsewhere in your entry class.
 
 
 
Here are a few examples of what this lets you do:
 
 
 
<source lang="c#">
 
// did you pet your pet today?
 
bool wasPet = this.Helper.Reflection.GetField<bool>(pet, "wasPetToday").GetValue();
 
 
 
// what is the spirit forecast today?
 
string forecast = this.Helper.Reflection
 
  .GetMethod(new TV(), "getFortuneForecast")
 
  .Invoke<string>();
 
 
 
// randomise the mines
 
if(Game1.currentLocation is MineShaft)
 
  this.Helper.Reflection.GetField<Random>(Game1.currentLocation, "mineRandom").SetValue(new Random());
 
</source>
 
 
 
This works with static or instance fields/methods, caches the reflection to improve performance, and will throw useful errors automatically when reflection fails.
 
 
 
If you need to do more, you can switch to [https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/reflection C#'s underlying reflection API]:
 
 
 
<source lang="c#">
 
FieldInfo field = this.Helper.Reflection.GetField<string>(…).FieldInfo;
 
MethodInfo method = this.Helper.Reflection.GetMethod(…).MethodInfo;
 
</source>
 
 
 
===Multiplayer===
 
The multiplayer API provides methods to support modding in a multiplayer context:
 
<source lang="c#">
 
// get a unique multiplayer ID (e.g. for animal IDs)
 
int uniqueID = this.Helper.Multiplayer.GetNewID();
 
 
 
// get the locations being sync'd from the main player
 
foreach (GameLocation location in this.Helper.Multiplayer.GetActiveLocations())
 
</source>
 

Latest revision as of 14:29, 28 February 2022

Creating SMAPI mods SMAPI mascot.png


Modding:Index

SMAPI provides a number of APIs for mods to use. Click a section on the right or below for more details.

Basic APIs

page summary
Manifest A file needed for every mod or content pack which describes the mod, lists dependencies, enables update checks, etc.
Events Respond when something happens in the game (e.g., when a save is loaded), and often include details about what happened.
Configuration Let players edit a config.json file to configure your mod.
Content Load images/maps/data, and edit or replace the game's images/maps/data.
Data Store arbitrary data and retrieve it later.
Input Check and suppress keyboard, controller, and mouse state.
Logging Write messages to the SMAPI console and log.
Reflection Access fields, properties, or methods which are normally inaccessible.
Multiplayer Provides methods for supporting multiplayer.
Translation Translate your mod text into any game language.
Utilities Use constants, contextual information, date logic, and semantic versions.

Advanced APIs

page summary
Content packs Let other modders provide files for your mod to read, which players can install like any other mod.
Console commands Add custom commands to the SMAPI console.
Mod integrations Get information about loaded mods, and integrate with mods using mod-provided APIs.
Harmony patching Harmony lets you patch or replace methods, effectively rewriting the game code.