Biome Settings - morelandjo/Railways-Untold GitHub Wiki

Biome Settings

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.

How It Works

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:

  1. Finds all biome settings entries that match the current biome
  2. Sorts them by priority (highest first), then by specificity (direct biome IDs beat tags)
  3. For each setting, uses the first value it finds
  4. Falls back to the built-in defaults for anything not overridden

File Location

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

JSON Format

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 in config/railways-untold/config.toml under the features section, not via biome settings.

Field Reference

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 State Properties

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]"

Examples

Desert Theme

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"
}

Forest Theme (Using Biome Tags)

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"
}

Dark Forest Override

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.

Bridge Styling

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 − 2 and repeats downward until it reaches the ground.

Nether Theme

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.

Changing the Global Defaults

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.

Disabling Structure Targeting

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.

Adding Modded Structure Avoidance

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."

Priority and Specificity

When multiple entries match the same biome, the resolution order is:

  1. Priority (higher number wins)
  2. Specificity at the same priority (direct biome IDs beat biome tags)
  3. 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

Reloading

Biome settings are loaded as part of Minecraft's data pack system. Changes take effect:

  • When starting/loading a world
  • After running the /reload command

No server restart is required.

Built-In Defaults

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.

⚠️ **GitHub.com Fallback** ⚠️