diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index 22766c55..c0e69b95 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -39,7 +39,7 @@ import net.minecraft.util.RandomSource; public class VentBubbleColumnBlock extends Block implements BucketPickup, LiquidBlockContainer { public VentBubbleColumnBlock() { - super(FabricBlockSettings.of(Material.BUBBLE_COLUMN).noOcclusion().noCollission().noDrops()); + super(FabricBlockSettings.of(Material.BUBBLE_COLUMN).nonOpaque().noCollision().noLootTable()); } @Override diff --git a/src/main/java/ru/betterend/registry/EndStructures.java b/src/main/java/ru/betterend/registry/EndStructures.java index c66aa3c7..4e9903d3 100644 --- a/src/main/java/ru/betterend/registry/EndStructures.java +++ b/src/main/java/ru/betterend/registry/EndStructures.java @@ -31,49 +31,49 @@ public class EndStructures { public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register("painted_mountain_piece", PaintedMountainPiece::new); public static final StructurePieceType NBT_PIECE = register("nbt_piece", NBTPiece::new); - public static final BCLStructure GIANT_MOSSY_GLOWSHROOM = new BCLStructure( + public static final BCLStructure GIANT_MOSSY_GLOWSHROOM = new BCLStructure<>( BetterEnd.makeID("giant_mossy_glowshroom"), GiantMossyGlowshroomStructure::new, Decoration.SURFACE_STRUCTURES, 16, 8 ); - public static final BCLStructure MEGALAKE = new BCLStructure( + public static final BCLStructure MEGALAKE = new BCLStructure<>( BetterEnd.makeID("megalake"), MegaLakeStructure::new, Decoration.RAW_GENERATION, 4, 1 ); - public static final BCLStructure MEGALAKE_SMALL = new BCLStructure( + public static final BCLStructure MEGALAKE_SMALL = new BCLStructure<>( BetterEnd.makeID("megalake_small"), MegaLakeSmallStructure::new, Decoration.RAW_GENERATION, 4, 1 ); - public static final BCLStructure MOUNTAIN = new BCLStructure( + public static final BCLStructure MOUNTAIN = new BCLStructure<>( BetterEnd.makeID("mountain"), MountainStructure::new, Decoration.RAW_GENERATION, 3, 2 ); - public static final BCLStructure PAINTED_MOUNTAIN = new BCLStructure( + public static final BCLStructure PAINTED_MOUNTAIN = new BCLStructure<>( BetterEnd.makeID("painted_mountain"), PaintedMountainStructure::new, Decoration.RAW_GENERATION, 3, 2 ); - public static final BCLStructure ETERNAL_PORTAL = new BCLStructure( + public static final BCLStructure ETERNAL_PORTAL = new BCLStructure<>( BetterEnd.makeID("eternal_portal"), EternalPortalStructure::new, Decoration.SURFACE_STRUCTURES, 16, 6 ); - public static final BCLStructure GIANT_ICE_STAR = new BCLStructure( + public static final BCLStructure GIANT_ICE_STAR = new BCLStructure<>( BetterEnd.makeID("giant_ice_star"), GiantIceStarStructure::new, Decoration.SURFACE_STRUCTURES, diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index 52a702ee..1154aeec 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -8,6 +8,8 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; @@ -15,24 +17,26 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp import ru.bclib.util.StructureHelper; import ru.bclib.world.structures.BCLStructure; import ru.betterend.BetterEnd; +import ru.betterend.registry.EndStructures; import ru.betterend.world.structures.piece.NBTPiece; +import java.util.Optional; import java.util.Random; import net.minecraft.util.RandomSource; +import javax.swing.text.html.Option; + public class EternalPortalStructure extends FeatureBaseStructure { private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); - public EternalPortalStructure() { - super(PieceGeneratorSupplier.simple( - EternalPortalStructure::checkLocation, - EternalPortalStructure::generatePieces) - ); + public EternalPortalStructure(StructureSettings s) { + super(s); } - protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { - if (!BCLStructure.isValidBiome(context)) return false; + @Override + public Optional findGenerationPoint(GenerationContext context) { + if (!BCLStructure.isValidBiome(context)) return Optional.empty(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); @@ -41,27 +45,33 @@ public class EternalPortalStructure extends FeatureBaseStructure { long x = (long) chunkPos.x * (long) chunkPos.x; long z = (long) chunkPos.z * (long) chunkPos.z; if (x + z < 1024L) { - return false; + return Optional.empty(); } if (chunkGenerator.getBaseHeight( chunkPos.getBlockX(8), chunkPos.getBlockZ(8), Heightmap.Types.WORLD_SURFACE_WG, - levelHeightAccessor + levelHeightAccessor, + context.randomState() ) < 5) { - return false; + return Optional.empty(); } - return FeatureBaseStructure.checkLocation(context); + return super.findGenerationPoint(context); } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + @Override + public StructureType type() { + return EndStructures.ETERNAL_PORTAL.structureType; + } + + protected void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context) { final RandomSource random = context.random(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); int x = chunkPos.getBlockX(8); int z = chunkPos.getBlockZ(8); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor, context.randomState()); structurePiecesBuilder.addPiece(new NBTPiece( STRUCTURE_ID, STRUCTURE, diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index 69e3d417..c8871d8b 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -1,7 +1,10 @@ package ru.betterend.world.structures.features; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; @@ -14,22 +17,37 @@ import net.minecraft.world.level.levelgen.structure.Structure; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import ru.bclib.world.structures.BCLStructure; +import java.util.Optional; import java.util.Random; import net.minecraft.util.RandomSource; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; public abstract class FeatureBaseStructure extends Structure { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); - public FeatureBaseStructure(PieceGeneratorSupplier pieceGeneratorSupplier) { - super(NoneFeatureConfiguration.CODEC, pieceGeneratorSupplier); + public FeatureBaseStructure(Structure.StructureSettings structureSettings) { + super(structureSettings); } - protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { - return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor(), context.randomState()) >= 20 && BCLStructure.isValidBiome(context); + @Override + public Optional findGenerationPoint(GenerationContext context) { + BlockPos pos = getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor(), context.randomState()); + if (pos.getZ() >= 20 && BCLStructure.isValidBiome(context)){ + return Optional.of(new Structure.GenerationStub(pos, (structurePiecesBuilder) -> { + generatePieces(structurePiecesBuilder, context); + })); + } + return Optional.empty(); } - - private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor, RandomState rState) { - LegacyRandomSource random = new LegacyRandomSource((long) (chunkPos.x + chunkPos.z * 10387313)); + + protected Holder getNoiseBiome(ChunkGenerator cg, RandomState rState, int i, int j, int k) { + return cg.getBiomeSource().getNoiseBiome(i, j, k, rState.sampler()); + } + + protected abstract void generatePieces(StructurePiecesBuilder structurePiecesBuilder, Structure.GenerationContext context); + + private static BlockPos getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor, RandomState rState) { + LegacyRandomSource random = new LegacyRandomSource(chunkPos.x + chunkPos.z * 10387313); Rotation blockRotation = Rotation.getRandom(random); int i = 5; @@ -56,6 +74,6 @@ public abstract class FeatureBaseStructure extends Structure { Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor, rState ); - return Math.min(Math.min(m, n), Math.min(o, p)); + return new BlockPos(k, l, Math.min(Math.min(m, n), Math.min(o, p))); } } diff --git a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java index b7350ff7..b77d1313 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; @@ -16,6 +17,7 @@ import ru.bclib.sdf.operator.SDFUnion; import ru.bclib.sdf.primitive.SDFCappedCone; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndStructures; import ru.betterend.world.structures.piece.VoxelPiece; import java.util.ArrayList; @@ -29,8 +31,13 @@ public class GiantIceStarStructure extends SDFStructureFeature { private static final int minCount = 25; private static final int maxCount = 40; - public GiantIceStarStructure() { - super(GiantIceStarStructure::generatePieces); + public GiantIceStarStructure(StructureSettings s) { + super(s); + } + + @Override + public StructureType type() { + return EndStructures.GIANT_ICE_STAR.structureType; } protected static SDF getSDF(BlockPos pos, RandomSource random) { @@ -105,7 +112,7 @@ public class GiantIceStarStructure extends SDFStructureFeature { return result; } - public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + public void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context) { final RandomSource random = context.random(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); diff --git a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java index aa71e592..d21010ac 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java @@ -4,6 +4,7 @@ import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; @@ -27,17 +28,20 @@ import ru.betterend.blocks.MossyGlowshroomCapBlock; import ru.betterend.blocks.basis.FurBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndStructures; import java.util.List; import java.util.Random; import net.minecraft.util.RandomSource; public class GiantMossyGlowshroomStructure extends SDFStructureFeature { - public GiantMossyGlowshroomStructure() { - super(GiantMossyGlowshroomStructure::generatePieces); + public GiantMossyGlowshroomStructure(StructureSettings s) { + super(s); } - public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + + @Override + protected void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context) { SDFStructureFeature.generatePieces(structurePiecesBuilder, context, GiantMossyGlowshroomStructure::getSDF); } @@ -156,4 +160,10 @@ public class GiantMossyGlowshroomStructure extends SDFStructureFeature { return info.getState(); }); } + + + @Override + public StructureType type() { + return EndStructures.GIANT_MOSSY_GLOWSHROOM.structureType; + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index 7d5c9f73..849ee1e2 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -7,36 +7,42 @@ import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; +import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; +import ru.betterend.registry.EndStructures; import ru.betterend.world.structures.piece.LakePiece; import java.util.Random; import net.minecraft.util.RandomSource; public class MegaLakeSmallStructure extends FeatureBaseStructure { - public MegaLakeSmallStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MegaLakeSmallStructure::generatePieces - )); + public MegaLakeSmallStructure(StructureSettings s) { + super(s); } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + @Override + public StructureType type() { + return EndStructures.MEGALAKE_SMALL.structureType; + } + + protected void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context) { final RandomSource random = context.random(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + final RandomState rState = context.randomState(); int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor, rState); - Holder biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); + Holder biome = getNoiseBiome(chunkGenerator, rState,x >> 2, y >> 2, z >> 2); if (y > 5) { float radius = MHelper.randRange(20, 40, random); float depth = MHelper.randRange(5, 10, random); diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index 1832c3d8..dfb35fb5 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -7,11 +7,15 @@ import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; +import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; +import ru.betterend.registry.EndStructures; import ru.betterend.world.structures.piece.LakePiece; import java.util.Random; @@ -20,33 +24,35 @@ import net.minecraft.util.RandomSource; public class MegaLakeStructure extends FeatureBaseStructure { - public MegaLakeStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MegaLakeStructure::generatePieces - )); + public MegaLakeStructure(Structure.StructureSettings structureSettings){ + super(structureSettings); } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + @Override + public StructureType type() { + return EndStructures.MEGALAKE.structureType; + } + + protected void generatePieces(StructurePiecesBuilder structurePiecesBuilder, Structure.GenerationContext context) { final RandomSource random = context.random(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final RandomState rState = context.randomState(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor, rState); if (y > 5) { - Holder biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); + Holder biome = getNoiseBiome(chunkGenerator, rState, x >> 2, y >> 2, z >> 2); float radius = MHelper.randRange(32, 64, random); float depth = MHelper.randRange(7, 15, random); LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); structurePiecesBuilder.addPiece(piece); } - - //this.calculateBoundingBox(); } } diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index e28f7de2..757898c2 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -7,11 +7,14 @@ import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; +import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; +import ru.betterend.registry.EndStructures; import ru.betterend.world.structures.piece.CrystalMountainPiece; import java.util.Random; @@ -19,24 +22,27 @@ import net.minecraft.util.RandomSource; public class MountainStructure extends FeatureBaseStructure { - public MountainStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MountainStructure::generatePieces - )); + public MountainStructure(StructureSettings s) { + super(s); } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + @Override + public StructureType type() { + return EndStructures.MOUNTAIN.structureType; + } + + protected void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context) { final RandomSource random = context.random(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + final RandomState rState = context.randomState(); int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor, rState); if (y > 5) { - Holder biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); + Holder biome = getNoiseBiome(chunkGenerator, rState,x >> 2, y >> 2, z >> 2); float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.8F, 1.2F, random); CrystalMountainPiece piece = new CrystalMountainPiece( diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index a3139e3b..6017c691 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -9,12 +9,15 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; +import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.StructureType; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndStructures; import ru.betterend.world.structures.piece.PaintedMountainPiece; import java.util.Random; @@ -23,24 +26,27 @@ import net.minecraft.util.RandomSource; public class PaintedMountainStructure extends FeatureBaseStructure { private static final BlockState[] VARIANTS; - public PaintedMountainStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - PaintedMountainStructure::generatePieces - )); + public PaintedMountainStructure(StructureSettings s) { + super(s); } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + @Override + public StructureType type() { + return EndStructures.PAINTED_MOUNTAIN.structureType; + } + + protected void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context) { final RandomSource random = context.random(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + final RandomState rState = context.randomState(); int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor,rState); if (y > 50) { - Holder biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); + Holder biome = getNoiseBiome(chunkGenerator, rState, x >> 2, y >> 2, z >> 2); float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); int count = MHelper.floor(height * MHelper.randRange(0.1F, 0.35F, random) + 1); diff --git a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java index 81f0ce71..35f474e0 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -18,21 +18,18 @@ import net.minecraft.util.RandomSource; import java.util.function.BiFunction; public abstract class SDFStructureFeature extends FeatureBaseStructure { - public SDFStructureFeature(PieceGenerator generator) { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - generator - )); + public SDFStructureFeature(StructureSettings s) { + super(s); } - public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context, BiFunction sdf) { + public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context, BiFunction sdf) { final RandomSource random = context.random(); final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor, context.randomState()); if (y > 5) { BlockPos start = new BlockPos(x, y, z); VoxelPiece piece = new VoxelPiece((world) -> {