Adapted Structures to 1.19
This commit is contained in:
parent
e3953167ba
commit
3d93b8607b
11 changed files with 142 additions and 76 deletions
|
@ -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
|
||||
|
|
|
@ -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<GiantMossyGlowshroomStructure> GIANT_MOSSY_GLOWSHROOM = new BCLStructure(
|
||||
public static final BCLStructure<GiantMossyGlowshroomStructure> GIANT_MOSSY_GLOWSHROOM = new BCLStructure<>(
|
||||
BetterEnd.makeID("giant_mossy_glowshroom"),
|
||||
GiantMossyGlowshroomStructure::new,
|
||||
Decoration.SURFACE_STRUCTURES,
|
||||
16,
|
||||
8
|
||||
);
|
||||
public static final BCLStructure<MegaLakeStructure> MEGALAKE = new BCLStructure(
|
||||
public static final BCLStructure<MegaLakeStructure> MEGALAKE = new BCLStructure<>(
|
||||
BetterEnd.makeID("megalake"),
|
||||
MegaLakeStructure::new,
|
||||
Decoration.RAW_GENERATION,
|
||||
4,
|
||||
1
|
||||
);
|
||||
public static final BCLStructure<MegaLakeSmallStructure> MEGALAKE_SMALL = new BCLStructure(
|
||||
public static final BCLStructure<MegaLakeSmallStructure> MEGALAKE_SMALL = new BCLStructure<>(
|
||||
BetterEnd.makeID("megalake_small"),
|
||||
MegaLakeSmallStructure::new,
|
||||
Decoration.RAW_GENERATION,
|
||||
4,
|
||||
1
|
||||
);
|
||||
public static final BCLStructure<MountainStructure> MOUNTAIN = new BCLStructure(
|
||||
public static final BCLStructure<MountainStructure> MOUNTAIN = new BCLStructure<>(
|
||||
BetterEnd.makeID("mountain"),
|
||||
MountainStructure::new,
|
||||
Decoration.RAW_GENERATION,
|
||||
3,
|
||||
2
|
||||
);
|
||||
public static final BCLStructure<PaintedMountainStructure> PAINTED_MOUNTAIN = new BCLStructure(
|
||||
public static final BCLStructure<PaintedMountainStructure> PAINTED_MOUNTAIN = new BCLStructure<>(
|
||||
BetterEnd.makeID("painted_mountain"),
|
||||
PaintedMountainStructure::new,
|
||||
Decoration.RAW_GENERATION,
|
||||
3,
|
||||
2
|
||||
);
|
||||
public static final BCLStructure<EternalPortalStructure> ETERNAL_PORTAL = new BCLStructure(
|
||||
public static final BCLStructure<EternalPortalStructure> ETERNAL_PORTAL = new BCLStructure<>(
|
||||
BetterEnd.makeID("eternal_portal"),
|
||||
EternalPortalStructure::new,
|
||||
Decoration.SURFACE_STRUCTURES,
|
||||
16,
|
||||
6
|
||||
);
|
||||
public static final BCLStructure<GiantIceStarStructure> GIANT_ICE_STAR = new BCLStructure(
|
||||
public static final BCLStructure<GiantIceStarStructure> GIANT_ICE_STAR = new BCLStructure<>(
|
||||
BetterEnd.makeID("giant_ice_star"),
|
||||
GiantIceStarStructure::new,
|
||||
Decoration.SURFACE_STRUCTURES,
|
||||
|
|
|
@ -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<NoneFeatureConfiguration> context) {
|
||||
if (!BCLStructure.isValidBiome(context)) return false;
|
||||
@Override
|
||||
public Optional<GenerationStub> 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<NoneFeatureConfiguration> context) {
|
||||
@Override
|
||||
public StructureType<EternalPortalStructure> 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,
|
||||
|
|
|
@ -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<NoneFeatureConfiguration> pieceGeneratorSupplier) {
|
||||
super(NoneFeatureConfiguration.CODEC, pieceGeneratorSupplier);
|
||||
public FeatureBaseStructure(Structure.StructureSettings structureSettings) {
|
||||
super(structureSettings);
|
||||
}
|
||||
|
||||
protected static boolean checkLocation(PieceGeneratorSupplier.Context<NoneFeatureConfiguration> context) {
|
||||
return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor(), context.randomState()) >= 20 && BCLStructure.isValidBiome(context);
|
||||
@Override
|
||||
public Optional<GenerationStub> 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<Biome> 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)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<GiantIceStarStructure> 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<NoneFeatureConfiguration> context) {
|
||||
public void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context) {
|
||||
final RandomSource random = context.random();
|
||||
final ChunkPos chunkPos = context.chunkPos();
|
||||
final ChunkGenerator chunkGenerator = context.chunkGenerator();
|
||||
|
|
|
@ -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<NoneFeatureConfiguration> 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<GiantMossyGlowshroomStructure> type() {
|
||||
return EndStructures.GIANT_MOSSY_GLOWSHROOM.structureType;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<NoneFeatureConfiguration> context) {
|
||||
@Override
|
||||
public StructureType<MegaLakeSmallStructure> 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> biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2);
|
||||
Holder<Biome> 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);
|
||||
|
|
|
@ -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<NoneFeatureConfiguration> context) {
|
||||
@Override
|
||||
public StructureType<MegaLakeStructure> 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> biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2);
|
||||
Holder<Biome> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<NoneFeatureConfiguration> context) {
|
||||
@Override
|
||||
public StructureType<MountainStructure> 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> biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2);
|
||||
Holder<Biome> 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(
|
||||
|
|
|
@ -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<NoneFeatureConfiguration> context) {
|
||||
@Override
|
||||
public StructureType<PaintedMountainStructure> 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> biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2);
|
||||
Holder<Biome> 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);
|
||||
|
|
|
@ -18,21 +18,18 @@ import net.minecraft.util.RandomSource;
|
|||
import java.util.function.BiFunction;
|
||||
|
||||
public abstract class SDFStructureFeature extends FeatureBaseStructure {
|
||||
public SDFStructureFeature(PieceGenerator<NoneFeatureConfiguration> generator) {
|
||||
super(PieceGeneratorSupplier.simple(
|
||||
FeatureBaseStructure::checkLocation,
|
||||
generator
|
||||
));
|
||||
public SDFStructureFeature(StructureSettings s) {
|
||||
super(s);
|
||||
}
|
||||
|
||||
public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context<NoneFeatureConfiguration> context, BiFunction<BlockPos, Random, SDF> sdf) {
|
||||
public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, GenerationContext context, BiFunction<BlockPos, RandomSource, SDF> 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) -> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue