From 05f59b48568e4525fcf27aa49a854e62c389c071 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 15:24:14 +0200 Subject: [PATCH] Fixed `place`-Methods (Pt. II) --- .../integration/byg/biomes/NightshadeRedwoods.java | 2 +- .../byg/features/BigEtherTreeFeature.java | 8 ++++++-- .../features/terrain/BigAuroraCrystalFeature.java | 7 +++++-- .../world/features/terrain/DesertLakeFeature.java | 11 +++++++---- .../world/features/terrain/EndLakeFeature.java | 11 +++++++---- .../world/features/terrain/FallenPillarFeature.java | 6 +++++- .../world/features/terrain/FloatingSpireFeature.java | 10 +++++++--- .../world/features/terrain/GeyserFeature.java | 11 +++++++---- .../world/features/terrain/IceStarFeature.java | 7 +++++-- .../features/terrain/ObsidianBoulderFeature.java | 7 +++++-- .../terrain/ObsidianPillarBasementFeature.java | 12 +++++++----- .../world/features/terrain/OreLayerFeature.java | 7 +++++-- .../world/features/terrain/SingleBlockFeature.java | 6 +++++- .../features/terrain/SmaragdantCrystalFeature.java | 7 +++++-- .../world/features/terrain/SpireFeature.java | 10 +++++++--- .../world/features/terrain/StalactiteFeature.java | 7 +++++-- .../world/features/terrain/SulphurHillFeature.java | 7 +++++-- .../world/features/terrain/SulphuricCaveFeature.java | 7 +++++-- 18 files changed, 99 insertions(+), 44 deletions(-) diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index 61e48d18..1dea5e1f 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -54,7 +54,7 @@ public class NightshadeRedwoods extends EndBiome { }); for (MobCategory group: MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group); + List list = biome.getMobSettings().getMobs(group).unwrap(); list.forEach((entry) -> { def.addMobSpawn(entry); }); diff --git a/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java index 4883e4a5..4bf26f6f 100644 --- a/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java @@ -10,6 +10,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -21,8 +22,11 @@ import ru.betterend.integration.Integrations; public class BigEtherTreeFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; BlockState log = Integrations.BYG.getDefaultState("ether_log"); diff --git a/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java b/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java index 5ccdefe2..5587ea78 100644 --- a/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java @@ -7,6 +7,7 @@ import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -20,8 +21,10 @@ import ru.betterend.registry.EndBlocks; public class BigAuroraCrystalFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int maxY = pos.getY() + BlocksHelper.upRay(world, pos, 16); int minY = pos.getY() - BlocksHelper.downRay(world, pos, 16); diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 7724bae3..3ffbf476 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.WorldGenLevel; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Material; @@ -25,7 +26,10 @@ public class DesertLakeFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos blockPos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(8.0, 15.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); int dist = MHelper.floor(radius); @@ -163,7 +167,7 @@ public class DesertLakeFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, POS, state); } pos = POS.below(); - if (world.getBlockState(pos).getBlock().is(TagAPI.GEN_TERRAIN)) { + if (world.getBlockState(pos).is(TagAPI.GEN_TERRAIN)) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.ENDSTONE_DUST.defaultBlockState()); } pos = POS.above(); @@ -205,7 +209,6 @@ public class DesertLakeFeature extends DefaultFeature { || state.is(TagAPI.GEN_TERRAIN) || state.is(EndBlocks.ENDSTONE_DUST) || state.getMaterial().equals(Material.PLANT) - || state.getMaterial().equals(Material.WATER_PLANT) - || state.getMaterial().equals(Material.CORAL); + || state.getMaterial().equals(Material.WATER_PLANT); } } diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 55075fcb..48734de6 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.WorldGenLevel; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Material; @@ -25,7 +26,10 @@ public class EndLakeFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos blockPos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(10.0, 20.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); int dist = MHelper.floor(radius); @@ -163,7 +167,7 @@ public class EndLakeFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, POS, state); } pos = POS.below(); - if (world.getBlockState(pos).getBlock().is(TagAPI.GEN_TERRAIN)) { + if (world.getBlockState(pos).is(TagAPI.GEN_TERRAIN)) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.ENDSTONE_DUST.defaultBlockState()); } pos = POS.above(); @@ -199,7 +203,6 @@ public class EndLakeFeature extends DefaultFeature { || state.is(TagAPI.GEN_TERRAIN) || state.is(EndBlocks.ENDSTONE_DUST) || state.getMaterial().equals(Material.PLANT) - || state.getMaterial().equals(Material.WATER_PLANT) - || state.getMaterial().equals(Material.CORAL); + || state.getMaterial().equals(Material.WATER_PLANT); } } diff --git a/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java b/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java index f0b9e545..8a1a518a 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.WorldGenLevel; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -24,7 +25,10 @@ import ru.betterend.registry.EndBlocks; public class FallenPillarFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below(5)).is(TagAPI.GEN_TERRAIN)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index af955ffe..63540189 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -10,6 +10,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.BiomeAPI; import ru.bclib.sdf.SDF; @@ -22,8 +23,11 @@ import ru.betterend.registry.EndFeatures; public class FloatingSpireFeature extends SpireFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); int minY = getYOnSurface(world, pos.getX(), pos.getZ()); int y = minY > 57 ? MHelper.floor(MHelper.randRange(minY, minY * 2, random) * 0.5F + 32) : MHelper.randRange(64, 192, random); @@ -64,7 +68,7 @@ public class FloatingSpireFeature extends SpireFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { - EndFeatures.TENANEA_BUSH.getFeature().place(world, chunkGenerator, random, bpos, null); + EndFeatures.TENANEA_BUSH.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java index 61da80ad..ad7fbb3e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -47,9 +48,11 @@ public class GeyserFeature extends DefaultFeature { private static final Direction[] HORIZONTAL = BlocksHelper.makeHorizontal(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - pos = getPosOnSurfaceWG(world, pos); + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final WorldGenLevel world = featureConfig.level(); + final BlockPos pos = getPosOnSurfaceWG(world, featureConfig.origin()); + final ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); if (pos.getY() < 10) { return false; @@ -241,7 +244,7 @@ public class GeyserFeature extends DefaultFeature { } } - EndFeatures.SULPHURIC_LAKE.getFeature().place(world, chunkGenerator, random, pos, null); + EndFeatures.SULPHURIC_LAKE.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, pos, null)); double distance = radius1 * 1.7; BlockPos start = pos.offset(-distance, -halfHeight - 15 - distance, -distance); diff --git a/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java b/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java index c76424ff..34a4f0f7 100644 --- a/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java @@ -10,6 +10,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFRotation; @@ -34,8 +35,10 @@ public class IceStarFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); float size = MHelper.randRange(minSize, maxSize, random); int count = MHelper.randRange(minCount, maxCount, random); List points = getFibonacciPoints(count); diff --git a/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java b/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java index 840f53f1..624f3ac1 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.WorldGenLevel; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -21,8 +22,10 @@ import ru.betterend.registry.EndBlocks; public class ObsidianBoulderFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java b/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java index 3106db14..1551b04d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java @@ -1,14 +1,11 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import com.mojang.math.Vector3f; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -24,9 +21,14 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.Random; + public class ObsidianPillarBasementFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below(5)).is(TagAPI.GEN_TERRAIN)) { return false; diff --git a/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java index 0bbb70ea..15348622 100644 --- a/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.WorldGenLevel; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFCoordModify; @@ -35,8 +36,10 @@ public class OreLayerFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); float radius = this.radius * 0.5F; int r = MHelper.floor(radius + 1); int posX = MHelper.randRange(Math.max(r - 16, 0), Math.min(31 - r, 15), random) + pos.getX(); diff --git a/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java b/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java index 8fceba8d..87cc3f4b 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -21,7 +22,10 @@ public class SingleBlockFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.GEN_TERRAIN)) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java b/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java index 447138b1..56749973 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -17,8 +18,10 @@ import ru.betterend.registry.EndBlocks; public class SmaragdantCrystalFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.GEN_TERRAIN)) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index bf14a674..16d3d359 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.BiomeAPI; @@ -32,8 +33,11 @@ public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 10 || !world.getBlockState(pos.below(3)).is(TagAPI.GEN_TERRAIN) || !world.getBlockState(pos.below(6)).is(TagAPI.GEN_TERRAIN)) { @@ -68,7 +72,7 @@ public class SpireFeature extends DefaultFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { - EndFeatures.TENANEA_BUSH.getFeature().place(world, chunkGenerator, random, bpos, null); + EndFeatures.TENANEA_BUSH.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java b/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java index 06e5bcfb..5c6f1a01 100644 --- a/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java @@ -10,6 +10,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.blocks.StalactiteBlock; @@ -28,8 +29,10 @@ public class StalactiteFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); if (!isGround(world.getBlockState(ceiling ? pos.above() : pos.below()).getBlock())) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java index eefaf3e7..59c362ef 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.WorldGenLevel; 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.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; @@ -19,8 +20,10 @@ import ru.betterend.registry.EndBlocks; public class SulphurHillFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 57 || pos.getY() > 70) { return false; diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index a314095b..cbdd8e7c 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -32,8 +33,10 @@ public class SulphuricCaveFeature extends DefaultFeature { private static final Direction[] HORIZONTAL = BlocksHelper.makeHorizontal(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int radius = MHelper.randRange(10, 30, random); int top = world.getHeight(Heightmap.Types.WORLD_SURFACE_WG, pos.getX(), pos.getZ());