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