Extending Configs
This guide will explain how to use the API to add new features to New Horizons.
How Extending Works
Addon developers will add a key to the extras object in the root of the config
{ "name": "Wetrock", "extras": { "myCoolExtensionData": { "myCoolExtensionProperty": 2 } }}Your mod will then use the APIs QueryBody method to obtain the myCoolExtensionData object.
It’s up to the addon dev to list your mod as a dependency!
Extending Planets
You can extend all planets by hooking into the OnBodyLoaded event of the API:
var api = ModHelper.Interactions.TryGetModApi<INewHorizons>("xen.NewHorizons");api.GetBodyLoadedEvent().AddListener((name) => { ModHelper.Console.WriteLine($"Body: {name} Loaded!");});In order to get your extra module, first define the module as a class:
public class MyCoolExtensionData { int myCoolExtensionProperty;}Then, use the QueryBody method:
var api = ModHelper.Interactions.TryGetModApi<INewHorizons>("xen.NewHorizons");api.GetBodyLoadedEvent().AddListener((name) => { ModHelper.Console.WriteLine($"Body: {name} Loaded!"); var data = api.QueryBody<MyCoolExtensionData>(name, "$.extras.myCoolExtensionData"); // Makes sure the module is not null if (data != null) { ModHelper.Console.WriteLine($"myCoolExtensionProperty for {name} is {data.myCoolExtensionProperty}!"); }});Extending Systems
Extending systems is the exact same as extending planets, except you use the QuerySystem method instead.
Accessing Other Values
You can also use the QueryBody method to get values of the config outside your extension object
var primaryBody = api.QueryBody<string>("Wetrock", "$.Orbit.primaryBody");ModHelper.Console.WriteLine($"Primary of {bodyName} is {primaryBody ?? "NULL"}!");