package com.thebrokenrail.energonrelics.block.structure; import net.minecraft.structure.StructureManager; import net.minecraft.structure.StructureStart; import net.minecraft.util.BlockRotation; import net.minecraft.util.math.BlockBox; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.world.Heightmap; import net.minecraft.world.biome.Biome; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.StructureFeature; class StructureGeneratorFeature extends StructureFeature { private final StructureGeneratorBlock block; StructureGeneratorFeature(StructureGeneratorBlock block) { super(DefaultFeatureConfig.CODEC); this.block = block; } @Override public StructureStartFactory getStructureStartFactory() { return (structureFeature, i, j, blockBox, k, l) -> new Start(block, structureFeature, i, j, blockBox, k, l); } private static class Start extends StructureStart { private final StructureGeneratorBlock block; private Start(StructureGeneratorBlock block, StructureFeature structureFeature, int i, int j, BlockBox blockBox, int k, long l) { super(structureFeature, i, j, blockBox, k, l); this.block = block; } @Override public void init(DynamicRegistryManager dynamicRegistryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, int x, int z, Biome biome, DefaultFeatureConfig defaultFeatureConfig) { BlockPos blockPos = new BlockPos(x * 16, chunkGenerator.getHeight(x, z, Heightmap.Type.WORLD_SURFACE) / 2, z * 16); BlockRotation blockRotation = BlockRotation.random(random); children.add(new StructureGeneratorPiece(block, blockRotation, blockPos)); setBoundingBoxFromChildren(); } } }