Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 58 lines 3.0 kB view raw
1package net.lerariemann.infinity.features; 2 3import com.mojang.serialization.Codec; 4import com.mojang.serialization.codecs.RecordCodecBuilder; 5import net.lerariemann.infinity.util.InfinityMethods; 6import net.minecraft.core.BlockPos; 7import net.minecraft.core.Direction; 8import net.minecraft.util.RandomSource; 9import net.minecraft.world.level.WorldGenLevel; 10import net.minecraft.world.level.block.Blocks; 11import net.minecraft.world.level.block.DoorBlock; 12import net.minecraft.world.level.block.NoteBlock; 13import net.minecraft.world.level.block.piston.PistonBaseBlock; 14import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; 15import net.minecraft.world.level.levelgen.feature.Feature; 16import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; 17import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; 18 19public class NotesHouseFeature extends Feature<NotesHouseFeature.Config> { 20 public NotesHouseFeature(Codec<Config> codec) { 21 super(codec); 22 } 23 24 @Override 25 public boolean place(FeaturePlaceContext<Config> context) { 26 RandomSource random = context.random(); 27 WorldGenLevel level = context.level(); 28 BlockPos origin = context.origin(); 29 int r = context.config().radius; 30 for (int i = -r; i <= r; i++) for (int j = -r; j <= r; j++) { 31 BlockPos local = origin.offset(i, 0, j); 32 if (!Blocks.IRON_DOOR.defaultBlockState().canSurvive(level, local)) continue; 33 boolean open = random.nextBoolean(); 34 Direction dir = InfinityMethods.getRandomHorizontalDirection(random); 35 setBlock(level, local, Blocks.IRON_DOOR.defaultBlockState() 36 .setValue(DoorBlock.FACING, dir) 37 .setValue(DoorBlock.OPEN, open) 38 .setValue(DoorBlock.HALF, DoubleBlockHalf.LOWER)); 39 setBlock(level, local.above(), Blocks.IRON_DOOR.defaultBlockState() 40 .setValue(DoorBlock.FACING, dir) 41 .setValue(DoorBlock.OPEN, open) 42 .setValue(DoorBlock.HALF, DoubleBlockHalf.UPPER)); 43 setBlock(level, local.above(2), Blocks.STICKY_PISTON.defaultBlockState() 44 .setValue(PistonBaseBlock.FACING, Direction.UP) 45 .setValue(PistonBaseBlock.EXTENDED, false)); 46 setBlock(level, local.above(3), Blocks.NOTE_BLOCK.defaultBlockState() 47 .setValue(NoteBlock.INSTRUMENT, InfinityMethods.getRandomInstrument()) 48 .setValue(NoteBlock.NOTE, random.nextInt(24))); 49 } 50 return true; 51 } 52 53 public record Config(int radius) implements FeatureConfiguration { 54 public static final Codec<NotesHouseFeature.Config> CODEC = RecordCodecBuilder.create(instance -> instance.group( 55 (Codec.INT.fieldOf("radius")).forGetter(a -> a.radius)).apply( 56 instance, NotesHouseFeature.Config::new)); 57 } 58}