package net.minecraft.world.level.levelgen.feature; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.WallTorchBlock; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public class EndPodiumFeature extends Feature { public static final int PODIUM_RADIUS = 4; public static final int PODIUM_PILLAR_HEIGHT = 4; public static final int RIM_RADIUS = 1; public static final float CORNER_ROUNDING = 0.5F; private static final BlockPos END_PODIUM_LOCATION = BlockPos.ZERO; private final boolean active; public static BlockPos getLocation(BlockPos pos) { return END_PODIUM_LOCATION.offset(pos); } public EndPodiumFeature(boolean active) { super(NoneFeatureConfiguration.CODEC); this.active = active; } @Override public boolean place(FeaturePlaceContext context) { BlockPos blockPos = context.origin(); WorldGenLevel worldGenLevel = context.level(); for (BlockPos blockPos2 : BlockPos.betweenClosed( new BlockPos(blockPos.getX() - 4, blockPos.getY() - 1, blockPos.getZ() - 4), new BlockPos(blockPos.getX() + 4, blockPos.getY() + 32, blockPos.getZ() + 4) )) { boolean bl = blockPos2.closerThan(blockPos, 2.5); if (bl || blockPos2.closerThan(blockPos, 3.5)) { if (blockPos2.getY() < blockPos.getY()) { if (bl) { this.setBlock(worldGenLevel, blockPos2, Blocks.BEDROCK.defaultBlockState()); } else if (blockPos2.getY() < blockPos.getY()) { if (this.active) { this.dropPreviousAndSetBlock(worldGenLevel, blockPos2, Blocks.END_STONE); } else { this.setBlock(worldGenLevel, blockPos2, Blocks.END_STONE.defaultBlockState()); } } } else if (blockPos2.getY() > blockPos.getY()) { if (this.active) { this.dropPreviousAndSetBlock(worldGenLevel, blockPos2, Blocks.AIR); } else { this.setBlock(worldGenLevel, blockPos2, Blocks.AIR.defaultBlockState()); } } else if (!bl) { this.setBlock(worldGenLevel, blockPos2, Blocks.BEDROCK.defaultBlockState()); } else if (this.active) { this.dropPreviousAndSetBlock(worldGenLevel, new BlockPos(blockPos2), Blocks.END_PORTAL); } else { this.setBlock(worldGenLevel, new BlockPos(blockPos2), Blocks.AIR.defaultBlockState()); } } } for (int i = 0; i < 4; i++) { this.setBlock(worldGenLevel, blockPos.above(i), Blocks.BEDROCK.defaultBlockState()); } BlockPos blockPos3 = blockPos.above(2); for (Direction direction : Direction.Plane.HORIZONTAL) { this.setBlock(worldGenLevel, blockPos3.relative(direction), Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, direction)); } return true; } private void dropPreviousAndSetBlock(WorldGenLevel level, BlockPos pos, Block block) { if (!level.getBlockState(pos).is(block)) { level.destroyBlock(pos, true, null); this.setBlock(level, pos, block.defaultBlockState()); } } }