Biome Settings - morelandjo/Railways-Untold GitHub Wiki
Railways Untold lets you customize block types, track materials, structure targeting, and more on a per-biome basis using data packs. This means you can have sandstone tunnels in deserts, mossy cobblestone pillars in jungles, and oak tracks in forests — all without touching any config files.
The mod ships with a built-in defaults.json that defines the global defaults for all settings. You can override any subset of these settings for specific biomes by adding your own JSON files to a data pack.
When the mod needs a setting (e.g., which block to use for a tunnel wall), it:
- Finds all biome settings entries that match the current biome
- Sorts them by priority (highest first), then by specificity (direct biome IDs beat tags)
- For each setting, uses the first value it finds
- Falls back to the built-in defaults for anything not overridden
Place your biome settings JSON files at:
data/<namespace>/railwaysuntold/biome_settings/<name>.json
For example, in a data pack called my_pack:
my_pack/
pack.mcmeta
data/
my_pack/
railwaysuntold/
biome_settings/
desert_theme.json
ocean_theme.json
All fields except biome_filter are optional. Only include the settings you want to override.
{
"biome_filter": [],
"priority": 10,
"tunnel_facade_block": "minecraft:stone_bricks",
"support_pillar_block": "minecraft:deepslate_bricks",
"terrain_fill_block": "minecraft:gravel",
"terrain_fill_base_block": "minecraft:cobblestone",
"station_foundation_block": "minecraft:cobblestone",
"lighting_block": "minecraft:wall_torch",
"lighting_attachment": 1,
"track_material": "andesite",
"bridge_decking_nbt": "railwaysuntold:decking_base",
"bridge_end_nbt": "railwaysuntold:decking_end",
"bridge_pillar_nbt": "railwaysuntold:pillar",
"bridge_half_width": 3,
"structure_target_tags": ["minecraft:village"],
"structure_avoidance_blacklist": ["wythers:"],
"structure_underground_list": ["minecraft:buried_treasures"]
}Note: Track gauge (
standard,wide,narrow) is a global setting configured inconfig/railways-untold/config.tomlunder thefeaturessection, not via biome settings.
| Field | Type | Description |
|---|---|---|
biome_filter |
string array | Which biomes this entry applies to. Use biome IDs ("minecraft:desert") or biome tags with a # prefix ("#minecraft:is_forest"). An empty array [] matches all biomes. |
priority |
integer | Higher priority entries override lower ones. Default: 10. The built-in defaults use priority 0. |
tunnel_facade_block |
string | Block used for tunnel walls. Supports block state properties in brackets. |
support_pillar_block |
string | Block used for support pillars under elevated tracks. |
terrain_fill_block |
string | Block used for the top two layers of terrain fill under low tracks. |
terrain_fill_base_block |
string | Block used for terrain fill below the top two layers. |
station_foundation_block |
string | Block used for station foundations when placed above air. |
lighting_block |
string | Block used for tunnel lighting. |
lighting_attachment |
integer | How lighting attaches: 1 = wall hanging (like a torch), 2 = embedded in wall (like glowstone). |
track_material |
string | Track material name. Values: andesite, oak, birch, spruce, dark_oak, jungle, acacia, crimson, warped, blackstone, mangrove, cherry, bamboo, stripped_bamboo, ender, tieless, phantom, monorail. Non-default values require Steam 'n' Rails. |
bridge_decking_nbt |
string | Schematic ID for the bridge deck material. The block at (0,0,0) of the NBT is used to fill the deck. Written as namespace:name (the mod appends structure/ + .nbt). |
bridge_end_nbt |
string | Schematic ID for the edge railing/wall stamped on both outside edges of the deck. |
bridge_pillar_nbt |
string | Schematic ID for the support pillar stacked under the bridge at ground-support intervals. |
bridge_half_width |
integer | Half-width of the deck, measured in blocks from the track centerline. Total deck width is roughly 2 × bridge_half_width + 1. |
structure_target_tags |
string array | Structure tags to target for station placement (e.g., ["minecraft:village"]). |
structure_avoidance_blacklist |
string array | Structures to ignore during avoidance. Supports namespace prefixes (e.g., "wythers:" ignores all from that mod). |
structure_underground_list |
string array | Underground/underwater structures to skip during avoidance. |
Block IDs support bracket syntax for specifying block state properties:
"minecraft:mushroom_stem[up=false,down=false]"
"minecraft:campfire[lit=true]"
"minecraft:oak_log[axis=y]"
Sandstone tunnels and sand fill in desert biomes:
data/my_pack/railwaysuntold/biome_settings/desert_theme.json
{
"biome_filter": ["minecraft:desert"],
"priority": 10,
"tunnel_facade_block": "minecraft:cut_sandstone",
"support_pillar_block": "minecraft:sandstone_wall",
"terrain_fill_block": "minecraft:sand",
"terrain_fill_base_block": "minecraft:sandstone",
"station_foundation_block": "minecraft:cut_sandstone",
"lighting_block": "minecraft:soul_wall_torch"
}Mossy stone for all forest biomes at once:
data/my_pack/railwaysuntold/biome_settings/forest_theme.json
{
"biome_filter": ["#minecraft:is_forest"],
"priority": 10,
"tunnel_facade_block": "minecraft:mossy_stone_bricks",
"support_pillar_block": "minecraft:mossy_cobblestone_wall",
"terrain_fill_block": "minecraft:coarse_dirt",
"terrain_fill_base_block": "minecraft:mossy_cobblestone"
}A more specific override for dark forests that builds on the forest theme. Because it uses a direct biome ID, it automatically wins over the tag-based forest theme at the same priority:
data/my_pack/railwaysuntold/biome_settings/dark_forest.json
{
"biome_filter": ["minecraft:dark_forest"],
"priority": 10,
"tunnel_facade_block": "minecraft:dark_oak_planks",
"support_pillar_block": "minecraft:dark_oak_fence",
"lighting_block": "minecraft:redstone_lamp[lit=true]",
"lighting_attachment": 2
}Since only tunnel_facade_block, support_pillar_block, lighting_block, and lighting_attachment are specified, the remaining settings (like terrain_fill_block) fall through to the forest theme (which matches via #minecraft:is_forest), and anything not in the forest theme falls through to the built-in defaults.
Bridges are datapack-driven: the deck material, edge railing, pillar, and width can all be overridden per biome. Style is resolved once per bridge using the biome at its origin, so a bridge keeps a single consistent look end-to-end even if the track crosses biomes.
Wide stone bridge with custom railing for mesa biomes:
data/my_pack/railwaysuntold/biome_settings/mesa_bridges.json
{
"biome_filter": ["#minecraft:is_badlands"],
"priority": 10,
"bridge_decking_nbt": "railwaysuntold:decking_base",
"bridge_end_nbt": "my_pack:red_sandstone_railing",
"bridge_pillar_nbt": "my_pack:red_sandstone_pillar",
"bridge_half_width": 4
}This produces a 9-wide (2 × 4 + 1) bridge using the built-in decking texture, custom railings, and custom pillars. Authors supply their own .nbt files at data/my_pack/structure/red_sandstone_railing.nbt and data/my_pack/structure/red_sandstone_pillar.nbt.
To author a custom bridge NBT:
-
Decking NBT — only the block at
(0, 0, 0)is read. The simplest form is a 1×1×1 structure containing a single block. - End (railing) NBT — a 1×N×1 column. Each Y layer is placed above the deck surface along the outer edges. The current default is a 1×2 wall (a block at ground level plus a block at track level to act as a fence/railing).
-
Pillar NBT — any width × height × depth. The pillar is placed under the track with its top at
trackY − 2and repeats downward until it reaches the ground.
Crimson tracks and blackstone tunnels for nether biomes:
data/my_pack/railwaysuntold/biome_settings/nether_theme.json
{
"biome_filter": ["#minecraft:is_nether"],
"priority": 10,
"tunnel_facade_block": "minecraft:polished_blackstone_bricks",
"support_pillar_block": "minecraft:polished_blackstone_wall",
"terrain_fill_block": "minecraft:soul_sand",
"terrain_fill_base_block": "minecraft:blackstone",
"lighting_block": "minecraft:soul_wall_torch",
"track_material": "crimson"
}Note: Non-default track materials require the Steam 'n' Rails mod.
To change the defaults for all biomes, create a file that replaces the built-in one using the same path and namespace:
data/railwaysuntold/railwaysuntold/biome_settings/defaults.json
{
"biome_filter": [],
"priority": 0,
"tunnel_facade_block": "minecraft:stone_bricks",
"support_pillar_block": "minecraft:stone_brick_wall",
"terrain_fill_block": "minecraft:gravel",
"terrain_fill_base_block": "minecraft:cobblestone",
"station_foundation_block": "minecraft:cobblestone",
"lighting_block": "minecraft:lantern",
"lighting_attachment": 1,
"track_material": "andesite",
"bridge_decking_nbt": "railwaysuntold:decking_base",
"bridge_end_nbt": "railwaysuntold:decking_end",
"bridge_pillar_nbt": "railwaysuntold:pillar",
"bridge_half_width": 3,
"structure_target_tags": ["minecraft:village"],
"structure_avoidance_blacklist": ["wythers:"],
"structure_underground_list": [
"minecraft:buried_treasures",
"minecraft:mineshafts",
"minecraft:ancient_cities",
"minecraft:strongholds",
"minecraft:trial_chambers",
"minecraft:ocean_ruins",
"minecraft:ocean_monuments",
"minecraft:shipwrecks",
"minecraft:ruined_portals",
"terralith:underground",
"terralith:underground_dungeon"
]
}This completely replaces the built-in defaults. Make sure to include all fields you want — any fields you leave out will fall back to hardcoded emergency values, not the original defaults.
To disable station placement at structures entirely, set structureTargeting = false in config/railways-untold/config.toml under the features section. This overrides any structure_target_tags from data packs.
To make tracks ignore structures from a specific mod:
data/my_pack/railwaysuntold/biome_settings/ignore_mod_structures.json
{
"biome_filter": [],
"priority": 1,
"structure_avoidance_blacklist": ["wythers:", "supplementaries:"]
}The trailing colon means "all structures from this namespace."
When multiple entries match the same biome, the resolution order is:
- Priority (higher number wins)
- Specificity at the same priority (direct biome IDs beat biome tags)
- Cascading — for each individual setting, the first non-empty value from the sorted list is used
This means you can layer overrides naturally:
| Entry | Priority | Filter | Effect |
|---|---|---|---|
| Built-in defaults | 0 |
[] (all biomes) |
Base fallback for everything |
| Your global defaults | 1 |
[] (all biomes) |
Override specific global values |
| Forest theme | 10 | #minecraft:is_forest |
Override for all forests |
| Dark forest theme | 10 | minecraft:dark_forest |
More specific — wins over tag at same priority |
Biome settings are loaded as part of Minecraft's data pack system. Changes take effect:
- When starting/loading a world
- After running the
/reloadcommand
No server restart is required.
For reference, these are the built-in default values that ship with the mod:
{
"biome_filter": [],
"priority": 0,
"tunnel_facade_block": "create:small_scorchia_bricks",
"support_pillar_block": "create:cut_deepslate_bricks",
"terrain_fill_block": "minecraft:gravel",
"terrain_fill_base_block": "minecraft:cobblestone",
"station_foundation_block": "minecraft:cobblestone",
"lighting_block": "minecraft:wall_torch",
"lighting_attachment": 1,
"track_material": "andesite",
"bridge_decking_nbt": "railwaysuntold:decking_base",
"bridge_end_nbt": "railwaysuntold:decking_end",
"bridge_pillar_nbt": "railwaysuntold:pillar",
"bridge_half_width": 3,
"structure_target_tags": ["minecraft:village"],
"structure_avoidance_blacklist": ["wythers:"],
"structure_underground_list": [
"minecraft:buried_treasures",
"minecraft:mineshafts",
"minecraft:ancient_cities",
"minecraft:strongholds",
"minecraft:trial_chambers",
"minecraft:ocean_ruins",
"minecraft:ocean_monuments",
"minecraft:shipwrecks",
"minecraft:ruined_portals",
"terralith:underground",
"terralith:underground_dungeon"
]
}To override any of these, create your own biome settings file with a priority of 1 or higher.