Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.structure;
2
3import com.mojang.serialization.Codec;
4import com.mojang.serialization.MapCodec;
5import com.mojang.serialization.codecs.RecordCodecBuilder;
6import net.lerariemann.infinity.registry.core.ModStructureTypes;
7import net.minecraft.structure.StructurePiecesCollector;
8import net.minecraft.world.Heightmap;
9import net.minecraft.world.gen.stateprovider.BlockStateProvider;
10import net.minecraft.world.gen.structure.Structure;
11import net.minecraft.world.gen.structure.StructureType;
12
13import java.util.Optional;
14
15public class PyramidStructure extends Structure {
16 public static final MapCodec<PyramidStructure> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
17 PyramidStructure.configCodecBuilder(instance),
18 (Codec.INT.fieldOf("top_y")).forGetter(a -> a.top_y),
19 (Codec.INT.fieldOf("bottom_y")).forGetter(a -> a.top_y),
20 (BlockStateProvider.TYPE_CODEC.fieldOf("block")).forGetter(a -> a.block)).apply(instance, PyramidStructure::new));
21 int top_y;
22 int bottom_y;
23 BlockStateProvider block;
24
25 PyramidStructure(Structure.Config config, int i, int j, BlockStateProvider p) {
26 super(config);
27 top_y = i;
28 bottom_y = j;
29 block = p;
30 }
31
32 @Override
33 public Optional<StructurePosition> getStructurePosition(Structure.Context context) {
34 return PyramidStructure.getStructurePosition(context, Heightmap.Type.WORLD_SURFACE_WG, collector -> addPieces(collector, context));
35 }
36
37 private void addPieces(StructurePiecesCollector collector, Structure.Context context) {
38 collector.addPiece(PyramidGenerator.of(context, top_y, bottom_y, block));
39 }
40
41 @Override
42 public StructureType<?> getType() {
43 return ModStructureTypes.PYRAMID.get();
44 }
45}