Changes

Line 52: Line 52:  
| 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.
 
|}
 
|}
  −
==Mod APIs==
  −
===Reflection===
  −
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>
 
translators
8,404

edits