Compact Complete Machine Example

This example creates a tiny furnace-like multiblock with one controller, one item input/output port, one structure, and one recipe.

1. Controller

config/mm/controllers/tiny_furnace.json

{
  "type": "mm:machine",
  "id": "tiny_furnace",
  "name": "Tiny Furnace"
}

2. Item port

config/mm/ports/tiny_item_port.json

{
  "id": "tiny_item_port",
  "controllerIds": "mm:tiny_furnace",
  "name": "Tiny Item Port",
  "type": "mm:item",
  "config": {
    "rows": 1,
    "columns": 3,
    "autoPush": false
  }
}

This generates input and output variants of the port: mm:tiny_item_port_input and mm:tiny_item_port_output.

3. Structure

datapacks/tiny_furnace/data/tiny/mm/structures/tiny_furnace.json

{
  "name": "Tiny Furnace",
  "controllerIds": "mm:tiny_furnace",
  "layout": [
    [
      "III",
      "ACA",
      "OOO"
    ]
  ],
  "key": {
    "A": { "block": "minecraft:bricks" },
    "C": { "block": "mm:tiny_furnace" },
    "I": { "port": "mm:tiny_item_port", "input": true },
    "O": { "port": "mm:tiny_item_port", "input": false }
  }
}

4. Process recipe

datapacks/tiny_furnace/data/tiny/mm/processes/smelt_stone.json

{
  "structureId": "tiny:tiny_furnace",
  "ticks": 100,
  "inputs": [
    {
      "type": "mm:input/consume",
      "ingredient": {
        "type": "mm:item",
        "item": "minecraft:cobblestone",
        "count": 1
      }
    }
  ],
  "outputs": [
    {
      "type": "mm:output/simple",
      "ingredient": {
        "type": "mm:item",
        "item": "minecraft:stone",
        "count": 1
      }
    }
  ]
}

5. Test checklist

  1. Start the pack once so MM creates its config folders.
  2. Add the controller and port JSON files under config/mm.
  3. Add the datapack and enable it in the world.
  4. Reload with /reload or restart.
  5. Place the multiblock exactly as the layout describes.
  6. Insert cobblestone into an input item port.
  7. Confirm stone appears in an output item port after 100 ticks.

Expected generated IDs

After the config is loaded, the expected generated IDs are:

mm:tiny_furnace
mm:tiny_item_port_input
mm:tiny_item_port_output

Do not use mm:tiny_furnace_controller for the controller block. The controller block id is exactly the generated controller id, mm:tiny_furnace.