world: replay datapack features across regions
This commit is contained in:
parent
f1d1d109f4
commit
d8b5d0f79b
13 changed files with 1259 additions and 8 deletions
91
internal/world/disks_test.go
Normal file
91
internal/world/disks_test.go
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
package world
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"regionio/internal/worldgen"
|
||||
)
|
||||
|
||||
func TestDiskStateProviderRules(t *testing.T) {
|
||||
set, err := worldgen.LoadFeatureSet()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
makeRegion := func(block uint16) *decorationRegion {
|
||||
chunk := NewChunk(0, 0, BiomePlains)
|
||||
chunk.SetBlock(8, 0, 8, block)
|
||||
region, err := newDecorationRegion([]*Chunk{chunk})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := region.setSource(0, 0); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return region
|
||||
}
|
||||
|
||||
dirt, ok := nameToStateID("minecraft:dirt", nil)
|
||||
if !ok {
|
||||
t.Fatal("dirt state missing")
|
||||
}
|
||||
|
||||
sandConfig, err := set.Disk("minecraft:disk_sand")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
sandConfig.RadiusMin, sandConfig.RadiusMax, sandConfig.HalfHeight = 0, 0, 0
|
||||
region := makeRegion(dirt)
|
||||
if err := region.placeDisk(set, worldgen.NewWorldgenRandom(1), worldgen.FeaturePosition{X: 8, Y: 0, Z: 8}, sandConfig); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
sandstone, ok := nameToStateID("minecraft:sandstone", nil)
|
||||
if !ok || region.getBlock(8, 0, 8) != sandstone {
|
||||
t.Fatalf("sand rule state = %d, want sandstone %d", region.getBlock(8, 0, 8), sandstone)
|
||||
}
|
||||
|
||||
grassConfig, err := set.Disk("minecraft:disk_grass")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
grassConfig.RadiusMin, grassConfig.RadiusMax, grassConfig.HalfHeight = 0, 0, 0
|
||||
region = makeRegion(dirt)
|
||||
if err := region.placeDisk(set, worldgen.NewWorldgenRandom(1), worldgen.FeaturePosition{X: 8, Y: 0, Z: 8}, grassConfig); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
grass, ok := nameToStateID("minecraft:grass_block", map[string]string{"snowy": "false"})
|
||||
if !ok || region.getBlock(8, 0, 8) != grass {
|
||||
t.Fatalf("grass rule state = %d, want grass %d", region.getBlock(8, 0, 8), grass)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDiskStateProviderFallback(t *testing.T) {
|
||||
set, err := worldgen.LoadFeatureSet()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
config, err := set.Disk("minecraft:disk_grass")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
config.RadiusMin, config.RadiusMax, config.HalfHeight = 0, 0, 0
|
||||
|
||||
dirt, _ := nameToStateID("minecraft:dirt", nil)
|
||||
stone, _ := nameToStateID("minecraft:stone", nil)
|
||||
chunk := NewChunk(0, 0, BiomePlains)
|
||||
chunk.SetBlock(8, 0, 8, dirt)
|
||||
chunk.SetBlock(8, 1, 8, stone)
|
||||
region, err := newDecorationRegion([]*Chunk{chunk})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := region.setSource(0, 0); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := region.placeDisk(set, worldgen.NewWorldgenRandom(1), worldgen.FeaturePosition{X: 8, Y: 0, Z: 8}, config); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := region.getBlock(8, 0, 8); got != dirt {
|
||||
t.Fatalf("fallback state = %d, want dirt %d", got, dirt)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue