package com.thebrokenrail.reliccraft.structure; import com.mojang.serialization.Codec; 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.math.ChunkPos; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.source.BiomeSource; import net.minecraft.world.gen.ChunkRandom; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.StructureFeature; import java.util.Random; public class TimeTempleFeature extends StructureFeature { public TimeTempleFeature(Codec codec) { super(codec); } @Override public StructureStartFactory getStructureStartFactory() { return Start::new; } protected boolean shouldStartAt(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, ChunkRandom chunkRandom, int i, int j, Biome biome, ChunkPos chunkPos, DefaultFeatureConfig defaultFeatureConfig) { int k = i >> 4; int m = j >> 4; chunkRandom.setSeed((long) (k ^ m << 4) ^ l); chunkRandom.nextInt(); return chunkRandom.nextInt(5) == 0; } public static class Start extends StructureStart { public Start(StructureFeature feature, int chunkX, int chunkZ, BlockBox box, int references, long seed) { super(feature, chunkX, chunkZ, box, references, seed); } @Override public void init(ChunkGenerator chunkGenerator, StructureManager structureManager, int x, int z, Biome biome, DefaultFeatureConfig featureConfig) { int i = x * 16; int j = z * 16; BlockPos blockPos = new BlockPos(i, 90, j); BlockRotation blockRotation = BlockRotation.values()[random.nextInt(BlockRotation.values().length)]; TimeTempleGenerator.addPieces(structureManager, blockPos, blockRotation, children); setBoundingBoxFromChildren(); } } }