worldgen: parse structure sets and place them on the vanilla grid

Loads the 26.1.2 structure datapack: 20 structure sets, 34 structure
definitions, and the worldgen biome tags they reference. Random-spread
placement follows RandomSpreadStructurePlacement byte for byte — region
floorDiv by spacing, one Legacy stream salted per region, two
spread-type draws for the offset — and the four legacy frequency
reducers keep their exact draws, including the hardcoded buried-treasure
salt and the outpost's discarded full-range int.

Verified against the fixture: on seed 12345 the ruined_portals set
claims exactly chunk (1,0), the chunk whose captured blocks carry the
ruined portal's obsidian, gold, and crying obsidian. TestStructure-
PlacementGrid pins that plus village separation invariants.
This commit is contained in:
Daniar Mannanov 2026-08-26 10:33:10 +03:00
parent f162698302
commit c488ce274f
125 changed files with 2123 additions and 0 deletions

View file

@ -0,0 +1,86 @@
package world
import (
"testing"
"regionio/internal/worldgen"
)
// TestStructurePlacementGrid pins the random-spread placement machinery against
// the vanilla capture. The fixture's chunk (1,0) carries a ruined portal —
// obsidian, crying obsidian, and a gold block around y=13-18 — and the grid
// must claim exactly that chunk for the ruined_portals set on seed 12345.
func TestStructurePlacementGrid(t *testing.T) {
sets, err := worldgen.LoadStructureSets()
if err != nil {
t.Fatal(err)
}
const seed = 12345
if sets.Sets["minecraft:ruined_portals"] == nil {
t.Fatal("ruined_portals set missing")
}
set := sets.Sets["minecraft:ruined_portals"]
var claimed []string
for cx := int32(-8); cx <= 8; cx++ {
for cz := int32(-8); cz <= 8; cz++ {
if set.IsStartChunk(seed, cx, cz) {
claimed = append(claimed, "("+structCoord(cx)+","+structCoord(cz)+")")
}
}
}
if len(claimed) != 1 || claimed[0] != "(1,0)" {
t.Fatalf("ruined portal starts %v, want exactly [(1,0)]", claimed)
}
// Mineshaft corridors from the starts around the fixture reach its deep
// oak-plank cells; the starts themselves sit a few chunks out.
mineshafts := sets.Sets["minecraft:mineshafts"]
near := 0
for cx := int32(-6); cx <= 6; cx++ {
for cz := int32(-6); cz <= 6; cz++ {
if mineshafts.IsStartChunk(seed, cx, cz) {
near++
}
}
}
if near == 0 {
t.Fatal("no mineshaft starts anywhere near the fixture")
}
// Villages use spacing 34/separation 8: two starts can never share a
// region row or column window closer than separation allows.
villages := sets.Sets["minecraft:villages"]
vp := villages.Placement.RandomSpread
pick := func(cx, cz int32) [2]int32 { return vp.PotentialChunk(seed, cx, cz) }
a := pick(0, 0)
b := pick(int32(vp.Spacing), 0)
span := int32(vp.Spacing - vp.Separation)
localA := a[0]
localB := b[0] - int32(vp.Spacing)
if localA < 0 || localA >= span || localB < 0 || localB >= span {
t.Fatalf("village offsets %v -> %v fall outside [0,%d)", a, b, span)
}
if gap := b[0] - a[0]; gap < int32(vp.Separation)+1 {
t.Fatalf("adjacent village regions %d apart, want >= %d", gap, vp.Separation+1)
}
}
func structCoord(v int32) string {
digits := ""
neg := v < 0
if neg {
v = -v
}
for v > 0 {
digits = string(rune('0'+v%10)) + digits
v /= 10
}
if digits == "" {
digits = "0"
}
if neg {
return "-" + digits
}
return digits
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:swamp",
"minecraft:mangrove_swamp"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:lush_caves"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:deep_dark"
]
}

View file

@ -0,0 +1,8 @@
{
"values": [
"minecraft:crimson_forest",
"minecraft:nether_wastes",
"minecraft:soul_sand_valley",
"minecraft:warped_forest"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_beach"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:desert"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:end_highlands",
"minecraft:end_midlands"
]
}

View file

@ -0,0 +1,7 @@
{
"values": [
"minecraft:snowy_taiga",
"minecraft:snowy_plains",
"minecraft:snowy_slopes"
]
}

View file

@ -0,0 +1,7 @@
{
"values": [
"minecraft:badlands",
"minecraft:eroded_badlands",
"minecraft:wooded_badlands"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:beach",
"minecraft:snowy_beach"
]
}

View file

@ -0,0 +1,8 @@
{
"values": [
"minecraft:deep_frozen_ocean",
"minecraft:deep_cold_ocean",
"minecraft:deep_ocean",
"minecraft:deep_lukewarm_ocean"
]
}

View file

@ -0,0 +1,9 @@
{
"values": [
"minecraft:the_end",
"minecraft:end_highlands",
"minecraft:end_midlands",
"minecraft:small_end_islands",
"minecraft:end_barrens"
]
}

View file

@ -0,0 +1,11 @@
{
"values": [
"minecraft:forest",
"minecraft:flower_forest",
"minecraft:birch_forest",
"minecraft:old_growth_birch_forest",
"minecraft:dark_forest",
"minecraft:pale_garden",
"minecraft:grove"
]
}

View file

@ -0,0 +1,7 @@
{
"values": [
"minecraft:windswept_hills",
"minecraft:windswept_forest",
"minecraft:windswept_gravelly_hills"
]
}

View file

@ -0,0 +1,7 @@
{
"values": [
"minecraft:bamboo_jungle",
"minecraft:jungle",
"minecraft:sparse_jungle"
]
}

View file

@ -0,0 +1,10 @@
{
"values": [
"minecraft:meadow",
"minecraft:frozen_peaks",
"minecraft:jagged_peaks",
"minecraft:stony_peaks",
"minecraft:snowy_slopes",
"minecraft:cherry_grove"
]
}

View file

@ -0,0 +1,9 @@
{
"values": [
"minecraft:nether_wastes",
"minecraft:soul_sand_valley",
"minecraft:crimson_forest",
"minecraft:warped_forest",
"minecraft:basalt_deltas"
]
}

View file

@ -0,0 +1,10 @@
{
"values": [
"#minecraft:is_deep_ocean",
"minecraft:frozen_ocean",
"minecraft:ocean",
"minecraft:cold_ocean",
"minecraft:lukewarm_ocean",
"minecraft:warm_ocean"
]
}

View file

@ -0,0 +1,58 @@
{
"values": [
"minecraft:mushroom_fields",
"minecraft:deep_frozen_ocean",
"minecraft:frozen_ocean",
"minecraft:deep_cold_ocean",
"minecraft:cold_ocean",
"minecraft:deep_ocean",
"minecraft:ocean",
"minecraft:deep_lukewarm_ocean",
"minecraft:lukewarm_ocean",
"minecraft:warm_ocean",
"minecraft:stony_shore",
"minecraft:swamp",
"minecraft:mangrove_swamp",
"minecraft:snowy_slopes",
"minecraft:snowy_plains",
"minecraft:snowy_beach",
"minecraft:windswept_gravelly_hills",
"minecraft:grove",
"minecraft:windswept_hills",
"minecraft:snowy_taiga",
"minecraft:windswept_forest",
"minecraft:taiga",
"minecraft:plains",
"minecraft:meadow",
"minecraft:beach",
"minecraft:forest",
"minecraft:old_growth_spruce_taiga",
"minecraft:flower_forest",
"minecraft:birch_forest",
"minecraft:dark_forest",
"minecraft:pale_garden",
"minecraft:savanna_plateau",
"minecraft:savanna",
"minecraft:jungle",
"minecraft:badlands",
"minecraft:desert",
"minecraft:wooded_badlands",
"minecraft:jagged_peaks",
"minecraft:stony_peaks",
"minecraft:frozen_river",
"minecraft:river",
"minecraft:ice_spikes",
"minecraft:old_growth_pine_taiga",
"minecraft:sunflower_plains",
"minecraft:old_growth_birch_forest",
"minecraft:sparse_jungle",
"minecraft:bamboo_jungle",
"minecraft:eroded_badlands",
"minecraft:windswept_savanna",
"minecraft:cherry_grove",
"minecraft:frozen_peaks",
"minecraft:dripstone_caves",
"minecraft:lush_caves",
"minecraft:deep_dark"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:river",
"minecraft:frozen_river"
]
}

View file

@ -0,0 +1,7 @@
{
"values": [
"minecraft:savanna",
"minecraft:savanna_plateau",
"minecraft:windswept_savanna"
]
}

View file

@ -0,0 +1,8 @@
{
"values": [
"minecraft:taiga",
"minecraft:snowy_taiga",
"minecraft:old_growth_pine_taiga",
"minecraft:old_growth_spruce_taiga"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:bamboo_jungle",
"minecraft:jungle"
]
}

View file

@ -0,0 +1,26 @@
{
"values": [
"#minecraft:is_ocean",
"#minecraft:is_river",
"#minecraft:is_beach",
"#minecraft:is_mountain",
"#minecraft:is_hill",
"#minecraft:is_taiga",
"#minecraft:is_jungle",
"#minecraft:is_forest",
"minecraft:stony_shore",
"minecraft:mushroom_fields",
"minecraft:ice_spikes",
"minecraft:windswept_savanna",
"minecraft:desert",
"minecraft:savanna",
"minecraft:snowy_plains",
"minecraft:plains",
"minecraft:sunflower_plains",
"minecraft:swamp",
"minecraft:mangrove_swamp",
"minecraft:savanna_plateau",
"minecraft:dripstone_caves",
"minecraft:lush_caves"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:deep_dark"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_badlands"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_river"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_nether"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:soul_sand_valley"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_deep_ocean"
]
}

View file

@ -0,0 +1,10 @@
{
"values": [
"minecraft:frozen_ocean",
"minecraft:cold_ocean",
"minecraft:ocean",
"minecraft:deep_frozen_ocean",
"minecraft:deep_cold_ocean",
"minecraft:deep_ocean"
]
}

View file

@ -0,0 +1,7 @@
{
"values": [
"minecraft:lukewarm_ocean",
"minecraft:warm_ocean",
"minecraft:deep_lukewarm_ocean"
]
}

View file

@ -0,0 +1,11 @@
{
"values": [
"minecraft:desert",
"minecraft:plains",
"minecraft:savanna",
"minecraft:snowy_plains",
"minecraft:taiga",
"#minecraft:is_mountain",
"minecraft:grove"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:frozen_ocean",
"minecraft:deep_frozen_ocean"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:warm_ocean"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_river"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"#minecraft:is_ocean",
"#minecraft:is_river"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:desert"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_jungle"
]
}

View file

@ -0,0 +1,10 @@
{
"values": [
"#minecraft:is_badlands",
"#minecraft:is_hill",
"minecraft:savanna_plateau",
"minecraft:windswept_savanna",
"minecraft:stony_shore",
"#minecraft:is_mountain"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_nether"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_ocean"
]
}

View file

@ -0,0 +1,16 @@
{
"values": [
"#minecraft:is_beach",
"#minecraft:is_river",
"#minecraft:is_taiga",
"#minecraft:is_forest",
"minecraft:mushroom_fields",
"minecraft:ice_spikes",
"minecraft:dripstone_caves",
"minecraft:lush_caves",
"minecraft:savanna",
"minecraft:snowy_plains",
"minecraft:plains",
"minecraft:sunflower_plains"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:swamp",
"minecraft:mangrove_swamp"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_ocean"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_beach"
]
}

View file

@ -0,0 +1,26 @@
{
"values": [
"minecraft:snowy_plains",
"minecraft:ice_spikes",
"minecraft:frozen_peaks",
"minecraft:jagged_peaks",
"minecraft:snowy_slopes",
"minecraft:frozen_ocean",
"minecraft:deep_frozen_ocean",
"minecraft:grove",
"minecraft:deep_dark",
"minecraft:frozen_river",
"minecraft:snowy_taiga",
"minecraft:snowy_beach",
"#minecraft:is_end",
"minecraft:cold_ocean",
"minecraft:deep_cold_ocean",
"minecraft:old_growth_pine_taiga",
"minecraft:old_growth_spruce_taiga",
"minecraft:taiga",
"minecraft:windswept_forest",
"minecraft:windswept_gravelly_hills",
"minecraft:windswept_hills",
"minecraft:stony_peaks"
]
}

View file

@ -0,0 +1,17 @@
{
"values": [
"minecraft:snowy_plains",
"minecraft:ice_spikes",
"minecraft:frozen_peaks",
"minecraft:jagged_peaks",
"minecraft:snowy_slopes",
"minecraft:frozen_ocean",
"minecraft:deep_frozen_ocean",
"minecraft:grove",
"minecraft:deep_dark",
"minecraft:frozen_river",
"minecraft:snowy_taiga",
"minecraft:snowy_beach",
"#minecraft:is_end"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:warm_ocean"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:desert"
]
}

View file

@ -0,0 +1,14 @@
{
"values": [
"minecraft:snowy_plains",
"minecraft:ice_spikes",
"minecraft:frozen_ocean",
"minecraft:snowy_taiga",
"minecraft:frozen_river",
"minecraft:snowy_beach",
"minecraft:frozen_peaks",
"minecraft:jagged_peaks",
"minecraft:snowy_slopes",
"minecraft:grove"
]
}

View file

@ -0,0 +1,13 @@
{
"values": [
"minecraft:desert",
"minecraft:warm_ocean",
"#minecraft:is_jungle",
"#minecraft:is_savanna",
"#minecraft:is_nether",
"#minecraft:is_badlands",
"minecraft:mangrove_swamp",
"minecraft:deep_lukewarm_ocean",
"minecraft:lukewarm_ocean"
]
}

View file

@ -0,0 +1,11 @@
{
"values": [
"minecraft:desert",
"minecraft:warm_ocean",
"#minecraft:is_jungle",
"#minecraft:is_savanna",
"#minecraft:is_nether",
"#minecraft:is_badlands",
"minecraft:mangrove_swamp"
]
}

View file

@ -0,0 +1,14 @@
{
"values": [
"minecraft:snowy_plains",
"minecraft:ice_spikes",
"minecraft:frozen_ocean",
"minecraft:snowy_taiga",
"minecraft:frozen_river",
"minecraft:snowy_beach",
"minecraft:frozen_peaks",
"minecraft:jagged_peaks",
"minecraft:snowy_slopes",
"minecraft:grove"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"#minecraft:is_overworld"
]
}

View file

@ -0,0 +1,41 @@
{
"values": [
"minecraft:plains",
"minecraft:sunflower_plains",
"minecraft:snowy_plains",
"minecraft:ice_spikes",
"minecraft:desert",
"minecraft:forest",
"minecraft:flower_forest",
"minecraft:birch_forest",
"minecraft:dark_forest",
"minecraft:pale_garden",
"minecraft:old_growth_birch_forest",
"minecraft:old_growth_pine_taiga",
"minecraft:old_growth_spruce_taiga",
"minecraft:taiga",
"minecraft:snowy_taiga",
"minecraft:savanna",
"minecraft:savanna_plateau",
"minecraft:windswept_hills",
"minecraft:windswept_gravelly_hills",
"minecraft:windswept_forest",
"minecraft:windswept_savanna",
"minecraft:jungle",
"minecraft:sparse_jungle",
"minecraft:bamboo_jungle",
"minecraft:badlands",
"minecraft:eroded_badlands",
"minecraft:wooded_badlands",
"minecraft:meadow",
"minecraft:cherry_grove",
"minecraft:grove",
"minecraft:snowy_slopes",
"minecraft:frozen_peaks",
"minecraft:jagged_peaks",
"minecraft:stony_peaks",
"minecraft:mushroom_fields",
"minecraft:dripstone_caves",
"minecraft:lush_caves"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:swamp"
]
}

View file

@ -0,0 +1,10 @@
{
"values": [
"minecraft:taiga",
"minecraft:snowy_taiga",
"minecraft:old_growth_pine_taiga",
"minecraft:old_growth_spruce_taiga",
"minecraft:old_growth_birch_forest",
"minecraft:jungle"
]
}

View file

@ -0,0 +1,57 @@
{
"values": [
"minecraft:mushroom_fields",
"minecraft:deep_frozen_ocean",
"minecraft:frozen_ocean",
"minecraft:deep_cold_ocean",
"minecraft:cold_ocean",
"minecraft:deep_ocean",
"minecraft:ocean",
"minecraft:deep_lukewarm_ocean",
"minecraft:lukewarm_ocean",
"minecraft:warm_ocean",
"minecraft:stony_shore",
"minecraft:swamp",
"minecraft:mangrove_swamp",
"minecraft:snowy_slopes",
"minecraft:snowy_plains",
"minecraft:snowy_beach",
"minecraft:windswept_gravelly_hills",
"minecraft:grove",
"minecraft:windswept_hills",
"minecraft:snowy_taiga",
"minecraft:windswept_forest",
"minecraft:taiga",
"minecraft:plains",
"minecraft:meadow",
"minecraft:beach",
"minecraft:forest",
"minecraft:old_growth_spruce_taiga",
"minecraft:flower_forest",
"minecraft:birch_forest",
"minecraft:dark_forest",
"minecraft:pale_garden",
"minecraft:savanna_plateau",
"minecraft:savanna",
"minecraft:jungle",
"minecraft:badlands",
"minecraft:desert",
"minecraft:wooded_badlands",
"minecraft:jagged_peaks",
"minecraft:stony_peaks",
"minecraft:frozen_river",
"minecraft:river",
"minecraft:ice_spikes",
"minecraft:old_growth_pine_taiga",
"minecraft:sunflower_plains",
"minecraft:old_growth_birch_forest",
"minecraft:sparse_jungle",
"minecraft:bamboo_jungle",
"minecraft:eroded_badlands",
"minecraft:windswept_savanna",
"minecraft:cherry_grove",
"minecraft:frozen_peaks",
"minecraft:dripstone_caves",
"minecraft:lush_caves"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:desert"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:plains",
"minecraft:meadow"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:savanna"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:snowy_plains"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:taiga"
]
}

View file

@ -0,0 +1,8 @@
{
"values": [
"#minecraft:is_ocean",
"#minecraft:is_river",
"minecraft:swamp",
"minecraft:mangrove_swamp"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:the_void"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"minecraft:mushroom_fields"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"minecraft:dark_forest",
"minecraft:pale_garden"
]
}

View file

@ -0,0 +1,48 @@
{
"type": "minecraft:jigsaw",
"biomes": "#minecraft:has_structure/ancient_city",
"max_distance_from_center": 116,
"size": 7,
"spawn_overrides": {
"ambient": {
"bounding_box": "full",
"spawns": []
},
"axolotls": {
"bounding_box": "full",
"spawns": []
},
"creature": {
"bounding_box": "full",
"spawns": []
},
"misc": {
"bounding_box": "full",
"spawns": []
},
"monster": {
"bounding_box": "full",
"spawns": []
},
"underground_water_creature": {
"bounding_box": "full",
"spawns": []
},
"water_ambient": {
"bounding_box": "full",
"spawns": []
},
"water_creature": {
"bounding_box": "full",
"spawns": []
}
},
"start_height": {
"absolute": -27
},
"start_jigsaw_name": "minecraft:city_anchor",
"start_pool": "minecraft:ancient_city/city_center",
"step": "underground_decoration",
"terrain_adaptation": "beard_box",
"use_expansion_hack": false
}

View file

@ -0,0 +1,13 @@
{
"type": "minecraft:jigsaw",
"biomes": "#minecraft:has_structure/bastion_remnant",
"max_distance_from_center": 80,
"size": 6,
"spawn_overrides": {},
"start_height": {
"absolute": 33
},
"start_pool": "minecraft:bastion/starts",
"step": "surface_structures",
"use_expansion_hack": false
}

View file

@ -0,0 +1,6 @@
{
"type": "minecraft:buried_treasure",
"biomes": "#minecraft:has_structure/buried_treasure",
"spawn_overrides": {},
"step": "underground_structures"
}

View file

@ -0,0 +1,6 @@
{
"type": "minecraft:desert_pyramid",
"biomes": "#minecraft:has_structure/desert_pyramid",
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,6 @@
{
"type": "minecraft:end_city",
"biomes": "#minecraft:has_structure/end_city",
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,42 @@
{
"type": "minecraft:fortress",
"biomes": "#minecraft:has_structure/nether_fortress",
"spawn_overrides": {
"monster": {
"bounding_box": "piece",
"spawns": [
{
"type": "minecraft:blaze",
"maxCount": 3,
"minCount": 2,
"weight": 10
},
{
"type": "minecraft:zombified_piglin",
"maxCount": 4,
"minCount": 4,
"weight": 5
},
{
"type": "minecraft:wither_skeleton",
"maxCount": 5,
"minCount": 5,
"weight": 8
},
{
"type": "minecraft:skeleton",
"maxCount": 5,
"minCount": 5,
"weight": 2
},
{
"type": "minecraft:magma_cube",
"maxCount": 4,
"minCount": 4,
"weight": 3
}
]
}
},
"step": "underground_decoration"
}

View file

@ -0,0 +1,6 @@
{
"type": "minecraft:igloo",
"biomes": "#minecraft:has_structure/igloo",
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,6 @@
{
"type": "minecraft:jungle_temple",
"biomes": "#minecraft:has_structure/jungle_temple",
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,6 @@
{
"type": "minecraft:woodland_mansion",
"biomes": "#minecraft:has_structure/woodland_mansion",
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,7 @@
{
"type": "minecraft:mineshaft",
"biomes": "#minecraft:has_structure/mineshaft",
"mineshaft_type": "normal",
"spawn_overrides": {},
"step": "underground_structures"
}

View file

@ -0,0 +1,7 @@
{
"type": "minecraft:mineshaft",
"biomes": "#minecraft:has_structure/mineshaft_mesa",
"mineshaft_type": "mesa",
"spawn_overrides": {},
"step": "underground_structures"
}

View file

@ -0,0 +1,26 @@
{
"type": "minecraft:ocean_monument",
"biomes": "#minecraft:has_structure/ocean_monument",
"spawn_overrides": {
"axolotls": {
"bounding_box": "full",
"spawns": []
},
"monster": {
"bounding_box": "full",
"spawns": [
{
"type": "minecraft:guardian",
"maxCount": 4,
"minCount": 2,
"weight": 1
}
]
},
"underground_water_creature": {
"bounding_box": "full",
"spawns": []
}
},
"step": "surface_structures"
}

View file

@ -0,0 +1,16 @@
{
"type": "minecraft:nether_fossil",
"biomes": "#minecraft:has_structure/nether_fossil",
"height": {
"type": "minecraft:uniform",
"max_inclusive": {
"below_top": 2
},
"min_inclusive": {
"absolute": 32
}
},
"spawn_overrides": {},
"step": "underground_decoration",
"terrain_adaptation": "beard_thin"
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:ocean_ruin",
"biome_temp": "cold",
"biomes": "#minecraft:has_structure/ocean_ruin_cold",
"cluster_probability": 0.9,
"large_probability": 0.3,
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,9 @@
{
"type": "minecraft:ocean_ruin",
"biome_temp": "warm",
"biomes": "#minecraft:has_structure/ocean_ruin_warm",
"cluster_probability": 0.9,
"large_probability": 0.3,
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,27 @@
{
"type": "minecraft:jigsaw",
"biomes": "#minecraft:has_structure/pillager_outpost",
"max_distance_from_center": 80,
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"size": 7,
"spawn_overrides": {
"monster": {
"bounding_box": "full",
"spawns": [
{
"type": "minecraft:pillager",
"maxCount": 1,
"minCount": 1,
"weight": 1
}
]
}
},
"start_height": {
"absolute": 0
},
"start_pool": "minecraft:pillager_outpost/base_plates",
"step": "surface_structures",
"terrain_adaptation": "beard_thin",
"use_expansion_hack": true
}

View file

@ -0,0 +1,28 @@
{
"type": "minecraft:ruined_portal",
"biomes": "#minecraft:has_structure/ruined_portal_standard",
"setups": [
{
"air_pocket_probability": 1.0,
"can_be_cold": true,
"mossiness": 0.2,
"overgrown": false,
"placement": "underground",
"replace_with_blackstone": false,
"vines": false,
"weight": 0.5
},
{
"air_pocket_probability": 0.5,
"can_be_cold": true,
"mossiness": 0.2,
"overgrown": false,
"placement": "on_land_surface",
"replace_with_blackstone": false,
"vines": false,
"weight": 0.5
}
],
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:ruined_portal",
"biomes": "#minecraft:has_structure/ruined_portal_desert",
"setups": [
{
"air_pocket_probability": 0.0,
"can_be_cold": false,
"mossiness": 0.0,
"overgrown": false,
"placement": "partly_buried",
"replace_with_blackstone": false,
"vines": false,
"weight": 1.0
}
],
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:ruined_portal",
"biomes": "#minecraft:has_structure/ruined_portal_jungle",
"setups": [
{
"air_pocket_probability": 0.5,
"can_be_cold": false,
"mossiness": 0.8,
"overgrown": true,
"placement": "on_land_surface",
"replace_with_blackstone": false,
"vines": true,
"weight": 1.0
}
],
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,28 @@
{
"type": "minecraft:ruined_portal",
"biomes": "#minecraft:has_structure/ruined_portal_mountain",
"setups": [
{
"air_pocket_probability": 1.0,
"can_be_cold": true,
"mossiness": 0.2,
"overgrown": false,
"placement": "in_mountain",
"replace_with_blackstone": false,
"vines": false,
"weight": 0.5
},
{
"air_pocket_probability": 0.5,
"can_be_cold": true,
"mossiness": 0.2,
"overgrown": false,
"placement": "on_land_surface",
"replace_with_blackstone": false,
"vines": false,
"weight": 0.5
}
],
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:ruined_portal",
"biomes": "#minecraft:has_structure/ruined_portal_nether",
"setups": [
{
"air_pocket_probability": 0.5,
"can_be_cold": false,
"mossiness": 0.0,
"overgrown": false,
"placement": "in_nether",
"replace_with_blackstone": true,
"vines": false,
"weight": 1.0
}
],
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:ruined_portal",
"biomes": "#minecraft:has_structure/ruined_portal_ocean",
"setups": [
{
"air_pocket_probability": 0.0,
"can_be_cold": true,
"mossiness": 0.8,
"overgrown": false,
"placement": "on_ocean_floor",
"replace_with_blackstone": false,
"vines": false,
"weight": 1.0
}
],
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:ruined_portal",
"biomes": "#minecraft:has_structure/ruined_portal_swamp",
"setups": [
{
"air_pocket_probability": 0.0,
"can_be_cold": false,
"mossiness": 0.5,
"overgrown": false,
"placement": "on_ocean_floor",
"replace_with_blackstone": false,
"vines": true,
"weight": 1.0
}
],
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,7 @@
{
"type": "minecraft:shipwreck",
"biomes": "#minecraft:has_structure/shipwreck",
"is_beached": false,
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,7 @@
{
"type": "minecraft:shipwreck",
"biomes": "#minecraft:has_structure/shipwreck_beached",
"is_beached": true,
"spawn_overrides": {},
"step": "surface_structures"
}

View file

@ -0,0 +1,7 @@
{
"type": "minecraft:stronghold",
"biomes": "#minecraft:has_structure/stronghold",
"spawn_overrides": {},
"step": "surface_structures",
"terrain_adaptation": "bury"
}

View file

@ -0,0 +1,29 @@
{
"type": "minecraft:swamp_hut",
"biomes": "#minecraft:has_structure/swamp_hut",
"spawn_overrides": {
"creature": {
"bounding_box": "piece",
"spawns": [
{
"type": "minecraft:cat",
"maxCount": 1,
"minCount": 1,
"weight": 1
}
]
},
"monster": {
"bounding_box": "piece",
"spawns": [
{
"type": "minecraft:witch",
"maxCount": 1,
"minCount": 1,
"weight": 1
}
]
}
},
"step": "surface_structures"
}

View file

@ -0,0 +1,15 @@
{
"type": "minecraft:jigsaw",
"biomes": "#minecraft:has_structure/trail_ruins",
"max_distance_from_center": 80,
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"size": 7,
"spawn_overrides": {},
"start_height": {
"absolute": -15
},
"start_pool": "minecraft:trail_ruins/tower",
"step": "underground_structures",
"terrain_adaptation": "bury",
"use_expansion_hack": false
}

View file

@ -0,0 +1,147 @@
{
"type": "minecraft:jigsaw",
"biomes": "#minecraft:has_structure/trial_chambers",
"dimension_padding": 10,
"liquid_settings": "ignore_waterlogging",
"max_distance_from_center": 116,
"pool_aliases": [
{
"type": "minecraft:random_group",
"groups": [
{
"data": [
{
"type": "minecraft:direct",
"alias": "minecraft:trial_chambers/spawner/contents/ranged",
"target": "minecraft:trial_chambers/spawner/ranged/skeleton"
},
{
"type": "minecraft:direct",
"alias": "minecraft:trial_chambers/spawner/contents/slow_ranged",
"target": "minecraft:trial_chambers/spawner/slow_ranged/skeleton"
}
],
"weight": 1
},
{
"data": [
{
"type": "minecraft:direct",
"alias": "minecraft:trial_chambers/spawner/contents/ranged",
"target": "minecraft:trial_chambers/spawner/ranged/stray"
},
{
"type": "minecraft:direct",
"alias": "minecraft:trial_chambers/spawner/contents/slow_ranged",
"target": "minecraft:trial_chambers/spawner/slow_ranged/stray"
}
],
"weight": 1
},
{
"data": [
{
"type": "minecraft:direct",
"alias": "minecraft:trial_chambers/spawner/contents/ranged",
"target": "minecraft:trial_chambers/spawner/ranged/poison_skeleton"
},
{
"type": "minecraft:direct",
"alias": "minecraft:trial_chambers/spawner/contents/slow_ranged",
"target": "minecraft:trial_chambers/spawner/slow_ranged/poison_skeleton"
}
],
"weight": 1
}
]
},
{
"type": "minecraft:random",
"alias": "minecraft:trial_chambers/spawner/contents/melee",
"targets": [
{
"data": "minecraft:trial_chambers/spawner/melee/zombie",
"weight": 1
},
{
"data": "minecraft:trial_chambers/spawner/melee/husk",
"weight": 1
},
{
"data": "minecraft:trial_chambers/spawner/melee/spider",
"weight": 1
}
]
},
{
"type": "minecraft:random",
"alias": "minecraft:trial_chambers/spawner/contents/small_melee",
"targets": [
{
"data": "minecraft:trial_chambers/spawner/small_melee/slime",
"weight": 1
},
{
"data": "minecraft:trial_chambers/spawner/small_melee/cave_spider",
"weight": 1
},
{
"data": "minecraft:trial_chambers/spawner/small_melee/silverfish",
"weight": 1
},
{
"data": "minecraft:trial_chambers/spawner/small_melee/baby_zombie",
"weight": 1
}
]
}
],
"size": 20,
"spawn_overrides": {
"ambient": {
"bounding_box": "piece",
"spawns": []
},
"axolotls": {
"bounding_box": "piece",
"spawns": []
},
"creature": {
"bounding_box": "piece",
"spawns": []
},
"misc": {
"bounding_box": "piece",
"spawns": []
},
"monster": {
"bounding_box": "piece",
"spawns": []
},
"underground_water_creature": {
"bounding_box": "piece",
"spawns": []
},
"water_ambient": {
"bounding_box": "piece",
"spawns": []
},
"water_creature": {
"bounding_box": "piece",
"spawns": []
}
},
"start_height": {
"type": "minecraft:uniform",
"max_inclusive": {
"absolute": -20
},
"min_inclusive": {
"absolute": -40
}
},
"start_pool": "minecraft:trial_chambers/chamber/end",
"step": "underground_structures",
"terrain_adaptation": "encapsulate",
"use_expansion_hack": false
}

View file

@ -0,0 +1,15 @@
{
"type": "minecraft:jigsaw",
"biomes": "#minecraft:has_structure/village_desert",
"max_distance_from_center": 80,
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"size": 6,
"spawn_overrides": {},
"start_height": {
"absolute": 0
},
"start_pool": "minecraft:village/desert/town_centers",
"step": "surface_structures",
"terrain_adaptation": "beard_thin",
"use_expansion_hack": true
}

View file

@ -0,0 +1,15 @@
{
"type": "minecraft:jigsaw",
"biomes": "#minecraft:has_structure/village_plains",
"max_distance_from_center": 80,
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"size": 6,
"spawn_overrides": {},
"start_height": {
"absolute": 0
},
"start_pool": "minecraft:village/plains/town_centers",
"step": "surface_structures",
"terrain_adaptation": "beard_thin",
"use_expansion_hack": true
}

Some files were not shown because too many files have changed in this diff Show more