promotional bannermobile promotional banner

Interactive objects framework

A modding framework that lets content packs and C# mods attach an interaction menu, with conditions, costs, cooldowns and effects, to any big craftable or furniture. Requires Content Patcher to create the objects.
Capture d’écran 2026-08-25 à 22.09.52.png

Capture d’écran 2026-08-25 à 22.09.52.png

Description

Interactive Objects Framework

A framework for Stardew Valley 1.6 that lets content packs and C# mods attach an interaction menu to any big craftable or furniture. When the player interacts with a registered object, a question dialogue opens with options you define. Each option can be gated by conditions and by a price, and can run effects such as giving items, applying buffs, playing sounds, or running any vanilla trigger action.

This mod does nothing on its own. It is a dependency for other mods.

Creating the object itself (its sprite and data) is done with Content Patcher, the standard tool. This framework only owns the interaction layer, what happens when the object is clicked.

Requirements

  • Stardew Valley 1.6 or later
  • SMAPI 4.0.0 or later

For players

Install SMAPI, then unzip this mod into your Mods folder, along with any mod that depends on it. There is nothing to configure.

For content pack authors

Create a content pack with a manifest that targets this framework, and an interactions.json file next to it.

manifest.json:

{
  "Name": "Your Pack Name",
  "Author": "You",
  "Version": "1.0.0",
  "Description": "...",
  "UniqueID": "you.yourPack",
  "MinimumApiVersion": "4.0.0",
  "ContentPackFor": { "UniqueID": "tomokisan.interactiveObjectsFramework" }
}

interactions.json maps a qualified item id to an interaction:

{
  "(BC)you.YourObject": {
    "Question": "What would you like to do?",
    "Options": [
      {
        "Id": "buy",
        "Label": "Buy a mystery box (500g)",
        "Cost": { "Money": 500 },
        "Cooldown": "day",
        "Effects": [
          { "Type": "GiveItem", "ItemId": "(O)MysteryBox", "Count": 1 },
          { "Type": "Message", "Text": "Thanks for your purchase." }
        ]
      }
    ]
  }
}

Interaction

An interaction, and each submenu, has these fields:

  • Question, the prompt shown at the top of the menu. Optional.
  • Options, the list of options.
  • Menus, a set of named submenus that an option can open with GoTo. Only read on the top level.

Option

  • Id, a short identifier, unique within its menu. Used for cooldown tracking and GoTo.
  • Label, the text shown for the option.
  • Condition, a GameStateQuery. The option is locked if it does not match. Optional.
  • Cost, a price in money and, or, items. Checked before the option can be picked, and consumed on success. Optional.
  • Cooldown, how often the option may be picked, per placed object. One of "always" (default), "day", "season", "ever", or a number of days such as "3". Optional.
  • OncePerDay, a shorthand for Cooldown set to "day". Optional.
  • HideWhenLocked, if true the option is hidden while locked instead of shown greyed out. Optional, default false.
  • LockedMessage, the text shown when a locked option is picked. Overrides the automatic reason. Optional.
  • GoTo, opens a submenu after any effects run. Use a name from Menus, or "root" to return to the main menu. Optional.
  • Effects, the list of effects to run when the option is picked.

Cost

"Cost": { "Money": 100, "Items": [ { "ItemId": "(O)72", "Count": 1 } ] }

If the player cannot pay, the option is locked and shows the requirement. On success the money and items are consumed automatically.

Effects

Type Fields Effect
GiveItem ItemId, Count, Quality Gives an item to the player.
TakeItem ItemId, Count Removes items from the player.
GiveMoney Amount Adds money.
TakeMoney Amount Removes money, floored at zero.
ApplyBuff Id Applies a buff by id.
RandomItem Items, Weights, Count, Quality Gives one item picked at random from Items. Weights is optional and must match the length of Items.
PlaySound Sound Plays a sound cue.
Message Text Shows a message.
RunAction Action Runs a vanilla trigger action string, which gives access to the full action vocabulary such as AddItem, AddMail, or AddMoney.

Every effect may also have a Condition, a GameStateQuery, and is skipped if it does not match.

Text and translations

Any text field, Question, Label, Message, and LockedMessage, accepts:

  • Plain text.
  • Tokenizable strings, for example "[LocalizedText Strings\path]".
  • A translation key from your own pack, written as "{{i18n:your.key}}". The framework reads it from your pack's i18n folder, so you can ship default.json, fr.json, and so on, the same way SMAPI mods do.

Conditions

Condition fields use GameStateQuery. See the Stardew Valley wiki page "Modding:Game state queries" for the full list. For example, "PLAYER_CURRENT_MONEY Current 100" is true when the current player has at least 100g.

Notes

  • Cooldowns are stored on the object's own save data, per player. Each placed object tracks its own cooldown, it survives saving and loading, and it works in multiplayer. Breaking and replacing the object resets its cooldown, since the game recreates the item without its stored data.
  • Registering an object that already has a vanilla interaction, such as a chair, replaces that behavior. Prefer a new object with no vanilla interaction.

For C# mods

Copy the IInteractiveObjectsApi interface into your project, then request the API after the game launches:

var api = this.Helper.ModRegistry.GetApi<IInteractiveObjectsApi>("tomokisan.interactiveObjectsFramework");
api.RegisterInteractionFromJson("(BC)you.YourObject", interactionJson);

The JSON string uses the same schema as interactions.json, for a single interaction. Translation keys are not resolved for API registrations, so use plain text or tokenizable strings there.

Example

This mod ships with a worked example, a Wishing Well. One content pack, a Content Patcher pack, adds the big craftable. A second content pack, for this framework, attaches the interaction. It shows a money cost, an item cost, per day and per season cooldowns, a submenu, and translations. See the folders whose names start with "[CP]" and "[IOF]".

The Interactive objects framework Team

Forgeborn tier frameprofile avatar
  • 5
    Followers
  • 23
    Projects
  • 233.0K
    Downloads

More from TomokisanView all

  • Supply and Demand project image

    Supply and Demand

    Sell prices react to how much you sell. Flood the market and prices drop, sell little for a scarcity premium. Works on crops, artisan goods, forage, animal products, and fish, with coloured tooltips, a Market Report TV channel, and GMCM support.

    • 11
    • August 26, 2026
  • Arcade framework project image

    Arcade framework

    A dependency framework to plug your own minigames onto arcade cabinets, with a shared ticket wallet, high scores, and a prize booth. It provides a C# API, and a worked example that adds three playable games. Does nothing on its own.

    • 2
    • August 26, 2026
  • This week in Pelican Town project image

    This week in Pelican Town

    Turn on the TV and let the local news anchor recap your week in the valley, generated live from your own deeds. Works with other TV mods.

    • 21
    • August 25, 2026
  • Better Statue Of Blessings project image

    Better Statue Of Blessings

    Allow you to get one blessing by statue per day instead of only one blessing per day.

    • 8.9K
    • August 25, 2026
  • Supply and Demand project image

    Supply and Demand

    Sell prices react to how much you sell. Flood the market and prices drop, sell little for a scarcity premium. Works on crops, artisan goods, forage, animal products, and fish, with coloured tooltips, a Market Report TV channel, and GMCM support.

    • 11
    • August 26, 2026
  • Arcade framework project image

    Arcade framework

    A dependency framework to plug your own minigames onto arcade cabinets, with a shared ticket wallet, high scores, and a prize booth. It provides a C# API, and a worked example that adds three playable games. Does nothing on its own.

    • 2
    • August 26, 2026
  • This week in Pelican Town project image

    This week in Pelican Town

    Turn on the TV and let the local news anchor recap your week in the valley, generated live from your own deeds. Works with other TV mods.

    • 21
    • August 25, 2026
  • Better Statue Of Blessings project image

    Better Statue Of Blessings

    Allow you to get one blessing by statue per day instead of only one blessing per day.

    • 8.9K
    • August 25, 2026