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

From Stardew Valley Wiki
Jump to navigation Jump to search
(move JSON files info to new Modding:Modder Guide/APIs/Data, rewrite into self-contained config page)
(→‎Config model: change example from float to more common int)
(One intermediate revision by the same user not shown)
Line 10: Line 10:
 
{
 
{
 
   public bool ExampleBoolean { get; set; }
 
   public bool ExampleBoolean { get; set; }
   public float ExampleFloat { get; set; }
+
   public int ExampleNumber { get; set; }
 
}
 
}
 
</source>
 
</source>
  
If you save that model to a JSON file, the file would look like this:
+
That model would be saved to <tt>config.json</tt> with this content:
 
<source lang="json">
 
<source lang="json">
 
{
 
{
 
   "ExampleBoolean": false,
 
   "ExampleBoolean": false,
   "ExampleFloat": 0
+
   "ExampleNumber": 0
 
}
 
}
 
</source>
 
</source>
Line 28: Line 28:
 
{
 
{
 
   public bool ExampleBoolean { get; set; } = true;
 
   public bool ExampleBoolean { get; set; } = true;
   public float ExampleFloat { get; set; } = 0.5f;
+
   public int ExampleNumber { get; set; } = 5;
 
}
 
}
 
</source>
 
</source>
Line 38: Line 38:
 
{
 
{
 
   public bool ExampleBoolean { get; set; }
 
   public bool ExampleBoolean { get; set; }
   public float ExampleFloat { get; set; }
+
   public int ExampleNumber { get; set; }
  
 
   public ModConfig()
 
   public ModConfig()
 
   {
 
   {
 
       this.ExampleBoolean = true;
 
       this.ExampleBoolean = true;
       this.ExampleFloat = 0.5f;
+
       this.ExampleNumber = 5;
 
   }
 
   }
 
}
 
}

Revision as of 17:37, 15 September 2018

Creating SMAPI mods SMAPI mascot.png


Modding:Index

You can let users configure your mod through a standard config.json file. SMAPI will automatically create the file and take care of reading, normalising, and updating it.

Config model

Creating a config model

The config model is a C# class you create, with properties representing the settings you want to store. It can contain almost anything from a few boolean fields to a complex object graph (though you should try to keep things simple for players). Here's a simple config model:

class ModConfig
{
   public bool ExampleBoolean { get; set; }
   public int ExampleNumber { get; set; }
}

That model would be saved to config.json with this content:

{
   "ExampleBoolean": false,
   "ExampleNumber": 0
}

Default values

You can set default values in your data model:

class ModConfig
{
   public bool ExampleBoolean { get; set; } = true;
   public int ExampleNumber { get; set; } = 5;
}

...or set defaults with a constructor:

class ModConfig
{
   public bool ExampleBoolean { get; set; }
   public int ExampleNumber { get; set; }

   public ModConfig()
   {
      this.ExampleBoolean = true;
      this.ExampleNumber = 5;
   }
}

Using the config file

To read the config.json (SMAPI will create it automatically):

  1. Create your config model.
  2. Access the config values in your ModEntry class:
    /// <summary>The main entry point for the mod.</summary>
    public class ModEntry : Mod
    {
        /*********
        ** Properties
        *********/
        /// <summary>The mod configuration from the player.</summary>
        private ModConfig Config;
    
    
        /*********
        ** Public methods
        *********/
        /// <summary>The mod entry point, called after the mod is first loaded.</summary>
        /// <param name="helper">Provides simplified APIs for writing mods.</param>
        public override void Entry(IModHelper helper)
        {
            this.Config = this.Helper.ReadConfig<ModConfig>();
            bool exampleBool = this.Config.ExampleBoolean;
        }
    }
    

That's it! When the player launches the game, SMAPI will create the config.json file automatically if it doesn't exist yet, using the default config options you provided in your model. If you need to save some changes, you can use this.Helper.WriteConfig(this.Config).