diff --git a/internal/world/disks.go b/internal/world/disks.go index d7fe3ef..c41e018 100644 --- a/internal/world/disks.go +++ b/internal/world/disks.go @@ -2,49 +2,10 @@ package world import "regionio/internal/worldgen" -// placeScheduledDisks replays the vanilla disk features from one source -// center into the mutable decoration region. Disks are in the underground-ore -// feature stage (6), after the ore entries in the 26.1.2 overworld datapack. -func (r *decorationRegion) placeScheduledDisks(seed int64) error { - set, err := worldgen.LoadFeatureSet() - if err != nil { - return err - } - if err := r.ensureSourceNeighborhood(); err != nil { - return err - } - schedule, err := set.FeatureSchedule(possibleBiomeOrder(), r.sourceBiomes(), undergroundOresStage) - if err != nil { - return err - } - random, decorationSeed := worldgen.DecorationRandom(seed, int(r.sourceX), int(r.sourceZ)) - origin := worldgen.FeaturePosition{X: int(r.sourceX) << 4, Y: MinY, Z: int(r.sourceZ) << 4} - for _, scheduled := range schedule { - placed, ok := set.Placed[scheduled.Name] - if !ok { - continue - } - configured, ok := set.Configured[placed.Feature] - if !ok || configured.Type != "minecraft:disk" { - continue - } - config, err := set.Disk(placed.Feature) - if err != nil { - return err - } - random.SetFeatureSeed(decorationSeed, scheduled.Index, undergroundOresStage) - context := r.placementContext(func(position worldgen.FeaturePosition) bool { - return r.biomeAllowsFeature(set, scheduled.Name, undergroundOresStage, position) - }) - if err := set.ForEachPlacementPosition(scheduled.Name, random, origin, context, func(position worldgen.FeaturePosition) error { - return r.placeDisk(set, random, position, config) - }); err != nil { - return err - } - } - return nil -} - +// placeDisk places one disk feature at position. Disks are replayed by the +// combined stage-6 pass in region_ores.go, ordered between underwater magma +// and the biome's remaining entries exactly as the 26.1.2 datapack schedules +// them; this helper holds only the per-position placement. func (r *decorationRegion) placeDisk(set *worldgen.FeatureSet, random worldgen.RandomSource, position worldgen.FeaturePosition, config worldgen.DiskFeatureConfig) error { radius := config.RadiusMin if config.RadiusMax > config.RadiusMin { diff --git a/internal/world/underwater_magma.go b/internal/world/underwater_magma.go index 5d23237..c5b77ad 100644 --- a/internal/world/underwater_magma.go +++ b/internal/world/underwater_magma.go @@ -2,51 +2,10 @@ package world import "regionio/internal/worldgen" -func (r *decorationRegion) placeScheduledUnderwaterMagma(seed int64) error { - set, err := worldgen.LoadFeatureSet() - if err != nil { - return err - } - if err := r.ensureSourceNeighborhood(); err != nil { - return err - } - schedule, err := set.FeatureSchedule(possibleBiomeOrder(), r.sourceBiomes(), undergroundOresStage) - if err != nil { - return err - } - random, decorationSeed := worldgen.DecorationRandom(seed, int(r.sourceX), int(r.sourceZ)) - origin := worldgen.FeaturePosition{X: int(r.sourceX) << 4, Y: MinY, Z: int(r.sourceZ) << 4} - for _, scheduled := range schedule { - placed, ok := set.Placed[scheduled.Name] - if !ok { - continue - } - configured, ok := set.Configured[placed.Feature] - if !ok || configured.Type != "minecraft:underwater_magma" { - continue - } - config, err := set.UnderwaterMagma(placed.Feature) - if err != nil { - return err - } - magma, ok := nameToStateID("minecraft:magma_block", nil) - if !ok { - continue - } - random.SetFeatureSeed(decorationSeed, scheduled.Index, undergroundOresStage) - context := r.placementContext(func(position worldgen.FeaturePosition) bool { - return r.biomeAllowsFeature(set, scheduled.Name, undergroundOresStage, position) - }) - if err := set.ForEachPlacementPosition(scheduled.Name, random, origin, context, func(position worldgen.FeaturePosition) error { - r.placeUnderwaterMagma(random, position, config, magma) - return nil - }); err != nil { - return err - } - } - return nil -} - +// placeUnderwaterMagma places one magma feature attempt at origin. The feature +// is replayed by the combined stage-6 pass in region_ores.go, ordered between +// the ore entries and the disk features as the 26.1.2 datapack schedules them; +// this helper holds only the per-position placement. func (r *decorationRegion) placeUnderwaterMagma(random worldgen.RandomSource, origin worldgen.FeaturePosition, config worldgen.UnderwaterMagmaFeatureConfig, magma uint16) bool { floorY, ok := r.underwaterFloor(origin.X, origin.Y, origin.Z, config.FloorSearchRange) if !ok {