Code/net/minecraft/world/level/chunk/status/ChunkPyramid.java

70 lines
4.0 KiB
Java
Raw Permalink Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.level.chunk.status;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;
import java.util.function.UnaryOperator;
public record ChunkPyramid(ImmutableList<ChunkStep> steps) {
public static final ChunkPyramid GENERATION_PYRAMID = new ChunkPyramid.Builder()
.step(ChunkStatus.EMPTY, p_342975_ -> p_342975_)
.step(ChunkStatus.STRUCTURE_STARTS, p_342544_ -> p_342544_.setTask(ChunkStatusTasks::generateStructureStarts))
.step(ChunkStatus.STRUCTURE_REFERENCES, p_345155_ -> p_345155_.addRequirement(ChunkStatus.STRUCTURE_STARTS, 8).setTask(ChunkStatusTasks::generateStructureReferences))
.step(ChunkStatus.BIOMES, p_342684_ -> p_342684_.addRequirement(ChunkStatus.STRUCTURE_STARTS, 8).setTask(ChunkStatusTasks::generateBiomes))
.step(
ChunkStatus.NOISE,
p_344472_ -> p_344472_.addRequirement(ChunkStatus.STRUCTURE_STARTS, 8).addRequirement(ChunkStatus.BIOMES, 1).blockStateWriteRadius(0).setTask(ChunkStatusTasks::generateNoise)
)
.step(
ChunkStatus.SURFACE,
p_345476_ -> p_345476_.addRequirement(ChunkStatus.STRUCTURE_STARTS, 8).addRequirement(ChunkStatus.BIOMES, 1).blockStateWriteRadius(0).setTask(ChunkStatusTasks::generateSurface)
)
.step(ChunkStatus.CARVERS, p_343920_ -> p_343920_.addRequirement(ChunkStatus.STRUCTURE_STARTS, 8).blockStateWriteRadius(0).setTask(ChunkStatusTasks::generateCarvers))
.step(
ChunkStatus.FEATURES,
p_345027_ -> p_345027_.addRequirement(ChunkStatus.STRUCTURE_STARTS, 8).addRequirement(ChunkStatus.CARVERS, 1).blockStateWriteRadius(1).setTask(ChunkStatusTasks::generateFeatures)
)
.step(ChunkStatus.INITIALIZE_LIGHT, p_342175_ -> p_342175_.setTask(ChunkStatusTasks::initializeLight))
.step(ChunkStatus.LIGHT, p_342930_ -> p_342930_.addRequirement(ChunkStatus.INITIALIZE_LIGHT, 1).setTask(ChunkStatusTasks::light))
.step(ChunkStatus.SPAWN, p_345462_ -> p_345462_.addRequirement(ChunkStatus.BIOMES, 1).setTask(ChunkStatusTasks::generateSpawn))
.step(ChunkStatus.FULL, p_343894_ -> p_343894_.setTask(ChunkStatusTasks::full))
.build();
public static final ChunkPyramid LOADING_PYRAMID = new ChunkPyramid.Builder()
.step(ChunkStatus.EMPTY, p_342764_ -> p_342764_)
.step(ChunkStatus.STRUCTURE_STARTS, p_345203_ -> p_345203_.setTask(ChunkStatusTasks::loadStructureStarts))
.step(ChunkStatus.STRUCTURE_REFERENCES, p_344362_ -> p_344362_)
.step(ChunkStatus.BIOMES, p_344572_ -> p_344572_)
.step(ChunkStatus.NOISE, p_343829_ -> p_343829_)
.step(ChunkStatus.SURFACE, p_345115_ -> p_345115_)
.step(ChunkStatus.CARVERS, p_342473_ -> p_342473_)
.step(ChunkStatus.FEATURES, p_343425_ -> p_343425_)
.step(ChunkStatus.INITIALIZE_LIGHT, p_343066_ -> p_343066_.setTask(ChunkStatusTasks::initializeLight))
.step(ChunkStatus.LIGHT, p_342741_ -> p_342741_.addRequirement(ChunkStatus.INITIALIZE_LIGHT, 1).setTask(ChunkStatusTasks::light))
.step(ChunkStatus.SPAWN, p_342632_ -> p_342632_)
.step(ChunkStatus.FULL, p_343704_ -> p_343704_.setTask(ChunkStatusTasks::full))
.build();
public ChunkStep getStepTo(ChunkStatus p_343202_) {
return this.steps.get(p_343202_.getIndex());
}
public static class Builder {
private final List<ChunkStep> steps = new ArrayList<>();
public ChunkPyramid build() {
return new ChunkPyramid(ImmutableList.copyOf(this.steps));
}
public ChunkPyramid.Builder step(ChunkStatus p_342085_, UnaryOperator<ChunkStep.Builder> p_342673_) {
ChunkStep.Builder chunkstep$builder;
if (this.steps.isEmpty()) {
chunkstep$builder = new ChunkStep.Builder(p_342085_);
} else {
chunkstep$builder = new ChunkStep.Builder(p_342085_, this.steps.getLast());
}
this.steps.add(p_342673_.apply(chunkstep$builder).build());
return this;
}
}
}