Vintage Story Mod DB · Vintage Story mod
PatternBuilder
Pattern Builder - Automated Pattern Placement A relatively simple mod that automates the placement of repeating block patterns (roads, walls, tunnels, etc) to reduce late-game construction tedium. This is also survival-mode friendly, taking blocks out of the
Quick answer
Which PatternBuilder release should I use?
PatternBuilder 0.6.1 targets 1.22.0-pre.1, 1.22.0-pre.2, 1.22.0-pre.3. It must be installed on the client. Installation on the dedicated server is optional. No extra mods listed for this file.
Where it goes
Is PatternBuilder required on the client, server, or both?
It must be installed on the client. Installation on the dedicated server is optional.
This release supports both sides, but the source does not require it on the server.
What else does PatternBuilder 0.6.1 need?
0.6.1. Change the file and its required mods may change too.
This file does not list any required mods. Do not add a library just because a different file uses it.
This file does not list any required or optional mods.
Before you install it
Add PatternBuilder without breaking your instance.
Built for PatternBuilder 0.6.1. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use 0.6.1. It targets 1.22.0-pre.1, 1.22.0-pre.2, 1.22.0-pre.3; another release may have different loader, side or dependency requirements.
- 02
Bring the mods it needs
This file does not list any required mods. Do not add a library just because a different file uses it.
- 03
Put it on the correct side
It must be installed on the client. Installation on the dedicated server is optional.
- 04
Pick the file you checked
Use the “Get this file” button beside 0.6.1. It opens that exact file at the source.
About this project
What does PatternBuilder add?
Pattern Builder - Automated Pattern Placement
A relatively simple mod that automates the placement of repeating block patterns (roads, walls, tunnels, etc) to reduce late-game construction tedium.
This is also survival-mode friendly, taking blocks out of the player's inventory and using their tools to mine/dig.
Feature Status (roadmap)
DONE
- Define custom block patterns in JSON files to place in world
- Multi-pattern system with JSON configs (can hot-reload in-game)
- Adaptive roads vs tunnel carving (additive vs destructive)
- Pattern validation
- Survival mode support with inventory consumption
- 3D patterns
- Pattern preview - ghost images two steps in front of the user
- Directional block support: Use relative directions (
|f|b|l|r) in patterns - adapts to travel direction - Terrain following - roads adapt to elevation changes with stairs (walk, don't sprint on slopes)
- Tool durability use - carve mode consumes tools and harvests blocks in survival mode
PLANNED
- Fix adaptive roads as they have somewhat broken with the 1.22 update
- In-game editor
Commands
.pb Show command help (default)
.pb help Show command help
.pb toggle Toggle pattern building on/off
.pb on/off Enable/disable building mode
.pb list Show available patterns
.pb slot X Switch to pattern at slot X (1-50)
.pb info Show current pattern details
.pb reload Reload patterns from disk
.pb preview Toggle pattern preview on/off
Creative Mode:
- Type
.pb onto enable building mode - Walk forward - patterns will be placed ahead of you
- Switch patterns with
.pb slot <number> - No materials consumed from inventory
Survival Mode:
- Gather blocks needed for your pattern (check with
.pb info) - For carve mode patterns: ensure you have appropriate tools (pickaxe for stone, shovel for soil/gravel)
- Type
.pb onto enable building mode - Walk forward - blocks consumed from inventory as you build
- Use wildcard patterns (
game:soil-*) for flexibility - Auto-disables when out of materials or tools (shows clear message)
Tips:
- Edit pattern JSON files in the config directory
- Reload patterns with
.pb reloadafter editing - Use
.pb infoto see current pattern details and material requirements - Walking over existing patterns won't waste materials
- Enable preview with
.pb previewto see what will be placed before it happens - Terrain following: Walk (don't sprint) on slopes for best stair placement. Sprinting downhill may skip some stairs.
- Carve mode: Mod searches hotbar first, then full inventory for tools. If a tool breaks mid-tunnel, it automatically switches to a replacement if available.
Pattern Preview:
- Preview appears 2 blocks ahead of your movement
- Green tint: Placing in air (safe)
- Blue tint: Replacing existing blocks (intentional)
- Grey tint: Replacing with same block (no extra consumption)
- Works with both 2D and 3D patterns (shows current slice)
- Toggle on/off anytime with
.pb preview
Pattern Files
Patterns are stored (for now) as JSON files at either of the following locations:
# MacOS:
~/Library/Application Support/VintagestoryData/ModConfig/patternbuilder/patterns/
# Windows:
%APPDATA%\VintagestoryData\ModConfig\patternbuilder\patterns\
File naming convention:
Pattern files must be named something like slotN_name.json where N is 1-50 (e.g., slot1_road.json, slot2_path.json).
There will already be a handful of example patterns that populate the directory on launch of the mod. You can change the pattern content of these but the mod will try to place that filename back each time a world is loaded.
Pattern syntax:
- Slices: Array of 2D patterns (one entry = 2D pattern, multiple entries = 3D pattern)
- Each slice uses comma-separated Y-layers (bottom to top)
- Each character maps to a block code
_= air/empty (carve mode will replace blocks with air, adaptive will leave untouched)P= player feet position (required in each slice for Y-offset)*= wildcard (matches any variant, e.g.,game:soil-*)Mode= "adaptive" (moulds to terrain) or "carve" (cuts through terrain)TransitionUpLayer= Pattern for ascending slopes (optional, uses stairs facing forward|f)TransitionDownLayer= Pattern for descending slopes (optional, uses stairs facing backward|b)
3D pattern behaviour:
- Walk forward: cycles through slices (0,1,2...,N,0)
- Walk backward: reverses through slices (N,...,2,1,0,N)
- Turn left/right: maintains current slice (no slice change)
- Pattern switch: resets to slice 0
Directional behaviour:
I have a custom system for directional blocks that tries to use the appropriate cardinal direction block depending on what direction you are currently travelling.
- If a pattern has either "l" or "r" at the end of the block code it will attempt to place a "left" or "right" oriented block. This means stairs will slope down away from the player
- If a pattern has either "f" or "b" at the end of the block code it will attempt to place a "forward" or "backward" oriented block. This means the player can continue walking forward onto and up stairs
- If a pattern has "auto" it will try to snap to the appropriate direction based on its neighbours. This really only works for fences and wall blocks.
Can you show me some examples of patterns?
This can get a little complicated, please let me know if things need to be more clear.
The patterns all use the game "block codes" so the wiki entry on this is incredibly valuable.
{
"Name": "Default Road",
"Description": "3-wide gravel road with dirt foundation",
"Slices": [ "DDD,GGG,_P_,___" ],
"Width": 3,
"Height": 4,
"Mode": "adaptive",
"Blocks": {
"D": "game:soil-medium-normal",
"G": "game:gravel-granite",
"P": "player"
}
}
{
"Name": "Lamp Post Road",
"Description": "3-wide gravel road with lamp posts every 8 blocks",
"Slices": [
"DDD,GGG,_P_,___,___",
"DDD,GGG,_P_,___,___",
"DDD,GGG,_P_,___,___",
"DDD,GGG,_P_,___,___",
"DDD,GGG,_P_,___,___",
"DDD,GGG,_P_,___,___",
"DDD,GGG,_P_,___,___",
"DDD,GGG,WPW,W_W,L_L"
],
"Width": 3,
"Height": 5,
"Blocks": {
"D": "game:soil-medium-normal",
"G": "game:gravel-granite",
"W": "game:woodenfence-oak-empty-free|auto",
"L": "game:paperlantern-on",
"P": "player"
}
}
{
"Name": "Flexible Road",
"Description": "Works with ANY soil and gravel variants",
"Slices": [ "SSSSS,GGGGG,__P__,_____" ],
"Width": 5,
"Height": 4,
"Mode": "adaptive",
"Blocks": {
"S": "game:soil-*",
"G": "game:gravel-*",
"P": "player"
}
}
{
"Name": "Fenced Road",
"Description": "Road with auto-connecting oak fences on sides",
"Slices": [ "FGF,FGF,_P_,___" ],
"Width": 3,
"Height": 4,
"Blocks": {
"F": "game:woodenfence-oak|auto",
"G": "game:gravel-granite",
"P": "player"
}
}
{
"Name": "Stair Edged Road",
"Description": "Road with stairs stepping down on each side",
"Slices": [ "GGG,LGR,_P_,___" ],
"Width": 3,
"Height": 4,
"Blocks": {
"L": "cobblestonestairs-*|up|l",
"R": "cobblestonestairs-*|up|r",
"G": "game:gravel-granite",
"P": "player"
}
}
{
"Name": "Adaptive Road with Stairs",
"Description": "Road that adapts to terrain with stair transitions",
"Slices": ["DDD,CCC,_P_,___"],
"Width": 3,
"Height": 4,
"Mode": "adaptive",
"Blocks": {
"D": "game:soil-medium-normal",
"C": "game:cobblestone-granite",
"P": "player"
},
"TransitionUpLayer": {
"Slices": ["DDD,SSS,_P_,___"],
"Width": 3,
"Height": 4,
"Mode": "carve",
"Blocks": {
"D": "game:soil-medium-normal",
"S": "game:cobblestonestairs-*|up|f",
"P": "player"
}
},
"TransitionDownLayer": {
"Slices": ["DDD,SSS,_P_,___"],
"Width": 3,
"Height": 4,
"Mode": "carve",
"Blocks": {
"D": "game:soil-medium-normal",
"S": "game:cobblestonestairs-*|up|b",
"P": "player"
}
}
}
Configuration
PatternBuilder uses a server-controlled configuration file for tool durability settings.
Location:
- MacOS:
~/Library/Application Support/VintagestoryData/ModConfig/patternbuilder/patternbuilder.json - Windows:
%APPDATA%\VintagestoryData\ModConfig\patternbuilder\patternbuilder.json
Default configuration:
{
"requireToolsForCarving": true,
"harvestCarvedBlocks": true,
"durabilityPerBlock": 1
}
Settings:
requireToolsForCarving(default: true) - Enable/disable tool durability consumption for carve mode patternsharvestCarvedBlocks(default: true) - Whether to harvest broken blocks into player inventorydurabilityPerBlock(default: 1) - Tool durability cost per block broken
Notes:
- Config is server-authoritative (prevents client-side cheating in multiplayer)
- Changes require server restart to take effect
- Creative mode always bypasses tool requirements regardless of config
Known issues
Please see the ROADMAP.md file on GitHub for a list of known issues
The GitHub README.md also has more information if you are running into troubleshooting issues and need help.
Misc
I know similar behaviour can be done with world-edit but I feel like this still adds to the community through the survial-friendly adaption.
Thumbnail icon was made using the FOSS tool Goxel
The inspiration for this mod comes from the MC Bukkit Plugin "LazyRoad"
Project description from Vintage Story Mod DB.
Pick your setup
PatternBuilder releases for each Vintage Story version.
Choose the version and loader you play, then open the matching release.
1.22.1
1 loader build1.22.0-rc.10
1 loader build1.22.0-rc.9
1 loader build1.22.0-rc.8
1 loader build1.22.0-rc.7
1 loader build1.22.0-rc.6
1 loader build1.22.0-rc.5
1 loader build1.22.0-rc.4
1 loader build1.22.0-rc.3
1 loader build1.22.0-rc.2
1 loader build1.22.0-rc.1
1 loader buildShowing the newest 12 of 41 game versions. Older files are in the list below.
Check the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
PatternBuilder versions and loaders
0.6.1
patternbuilder_0.6.1.zip
15 May 2026
0.5.0
patternbuilder_0.5.0.zip
28 Dec 2025
Looking for an older file? The official Vintage Story Mod DB project page is in Resources.