Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 60 lines 2.6 kB view raw
1package net.lerariemann.infinity.registry.var; 2 3import com.mojang.serialization.MapCodec; 4import dev.architectury.registry.registries.DeferredRegister; 5import dev.architectury.registry.registries.RegistrySupplier; 6import net.minecraft.core.BlockPos; 7import net.minecraft.core.registries.Registries; 8import net.minecraft.util.ExtraCodecs; 9import net.minecraft.util.RandomSource; 10import net.minecraft.world.level.levelgen.placement.PlacementContext; 11import net.minecraft.world.level.levelgen.placement.PlacementFilter; 12import net.minecraft.world.level.levelgen.placement.PlacementModifier; 13import net.minecraft.world.level.levelgen.placement.PlacementModifierType; 14import org.jspecify.annotations.NonNull; 15 16import static net.lerariemann.infinity.InfinityMod.MOD_ID; 17 18public class ModPlacementModifiers { 19 public static class CenterProximityPlacementModifier extends PlacementFilter { 20 public static final MapCodec<CenterProximityPlacementModifier> MODIFIER_CODEC = (ExtraCodecs.POSITIVE_INT.fieldOf("radius")).xmap( 21 CenterProximityPlacementModifier::new, a -> a.radius); 22 private final int radius; 23 24 private CenterProximityPlacementModifier(int radius) { 25 this.radius = radius; 26 } 27 28 public static CenterProximityPlacementModifier of(int radius) { 29 return new CenterProximityPlacementModifier(radius); 30 } 31 32 @Override 33 protected boolean shouldPlace(PlacementContext context, RandomSource random, BlockPos pos) { 34 return pos.getX()*pos.getX() + pos.getY()*pos.getY() + pos.getZ()*pos.getZ() < this.radius*this.radius; 35 } 36 37 @Override 38 public @NonNull PlacementModifierType<?> type() { 39 return PlacementModifierType.RARITY_FILTER; 40 } 41 } 42 43 public static final DeferredRegister<PlacementModifierType<?>> PLACEMENT_MODIFIER_TYPES = DeferredRegister.create(MOD_ID, Registries.PLACEMENT_MODIFIER_TYPE); 44 public static final RegistrySupplier<PlacementModifierType<?>> PROXIMITY = register("center_proximity", 45 CenterProximityPlacementModifier.MODIFIER_CODEC); 46 47 static <P extends PlacementModifier> PlacementModifierType<P> getType(MapCodec<P> codec) { 48 //? if >1.21 { 49 return () -> codec; 50 //?} else { 51 /*return codec::codec; 52 *///?} 53 } 54 static RegistrySupplier<PlacementModifierType<?>> register(String id, MapCodec<? extends PlacementModifier> codec) { 55 return PLACEMENT_MODIFIER_TYPES.register(id, () -> getType(codec)); 56 } 57 public static void registerModifiers() { 58 PLACEMENT_MODIFIER_TYPES.register(); 59 } 60}