Changes

Jump to navigation Jump to search
1,338 bytes removed ,  14:29, 28 February 2022
ES link
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>
 
232

edits

Navigation menu