Code/net/minecraft/world/level/levelgen/structure/SinglePieceStructure.java

37 lines
1.6 KiB
Java
Raw Permalink Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.level.levelgen.structure;
import java.util.Optional;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.level.levelgen.WorldgenRandom;
import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder;
public abstract class SinglePieceStructure extends Structure {
private final SinglePieceStructure.PieceConstructor constructor;
private final int width;
private final int depth;
protected SinglePieceStructure(SinglePieceStructure.PieceConstructor p_226537_, int p_226538_, int p_226539_, Structure.StructureSettings p_226540_) {
super(p_226540_);
this.constructor = p_226537_;
this.width = p_226538_;
this.depth = p_226539_;
}
@Override
public Optional<Structure.GenerationStub> findGenerationPoint(Structure.GenerationContext p_226542_) {
return getLowestY(p_226542_, this.width, this.depth) < p_226542_.chunkGenerator().getSeaLevel()
? Optional.empty()
: onTopOfChunkCenter(p_226542_, Heightmap.Types.WORLD_SURFACE_WG, p_226545_ -> this.generatePieces(p_226545_, p_226542_));
}
private void generatePieces(StructurePiecesBuilder p_226547_, Structure.GenerationContext p_226548_) {
ChunkPos chunkpos = p_226548_.chunkPos();
p_226547_.addPiece(this.constructor.construct(p_226548_.random(), chunkpos.getMinBlockX(), chunkpos.getMinBlockZ()));
}
@FunctionalInterface
protected interface PieceConstructor {
StructurePiece construct(WorldgenRandom p_226550_, int p_226551_, int p_226552_);
}
}