Umbra valley filler & arches fixes

This commit is contained in:
paulevsGitch 2021-12-23 05:44:44 +03:00
parent 2f490fa75c
commit 5585d8952c
3 changed files with 51 additions and 37 deletions

View file

@ -14,6 +14,8 @@ import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraft.world.level.levelgen.placement.PlacementModifier; import net.minecraft.world.level.levelgen.placement.PlacementModifier;
import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BCLBiomeBuilder;
import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.biomes.BiomeAPI;
import ru.bclib.api.features.BCLCommonFeatures;
import ru.bclib.api.features.BCLFeatureBuilder;
import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiome;
import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.BCLFeature;
import ru.bclib.world.features.DefaultFeature; import ru.bclib.world.features.DefaultFeature;
@ -21,6 +23,7 @@ import ru.betterend.BetterEnd;
import ru.betterend.complexmaterials.StoneMaterial; import ru.betterend.complexmaterials.StoneMaterial;
import ru.betterend.config.Configs; import ru.betterend.config.Configs;
import ru.betterend.world.biome.cave.EndCaveBiome; import ru.betterend.world.biome.cave.EndCaveBiome;
import ru.betterend.world.biome.land.UmbraValleyBiome;
import ru.betterend.world.features.BiomeIslandFeature; import ru.betterend.world.features.BiomeIslandFeature;
import ru.betterend.world.features.BlueVineFeature; import ru.betterend.world.features.BlueVineFeature;
import ru.betterend.world.features.CavePumpkinFeature; import ru.betterend.world.features.CavePumpkinFeature;
@ -191,7 +194,7 @@ public class EndFeatures {
public static final BCLFeature CHARNIA_GREEN = redisterVegetation("charnia_green", new CharniaFeature(EndBlocks.CHARNIA_GREEN), 10); public static final BCLFeature CHARNIA_GREEN = redisterVegetation("charnia_green", new CharniaFeature(EndBlocks.CHARNIA_GREEN), 10);
public static final BCLFeature MENGER_SPONGE = redisterVegetation("menger_sponge", new MengerSpongeFeature(5), 1); public static final BCLFeature MENGER_SPONGE = redisterVegetation("menger_sponge", new MengerSpongeFeature(5), 1);
public static final BCLFeature CHARNIA_RED_RARE = redisterVegetation("charnia_red_rare", new CharniaFeature(EndBlocks.CHARNIA_RED),2); public static final BCLFeature CHARNIA_RED_RARE = redisterVegetation("charnia_red_rare", new CharniaFeature(EndBlocks.CHARNIA_RED),2);
public static final BCLFeature BIOME_ISLAND = BCLFeature.makeFeatureConfigured(BetterEnd.makeID("overworld_island"), Decoration.RAW_GENERATION, new BiomeIslandFeature()); public static final BCLFeature BIOME_ISLAND = BCLFeatureBuilder.start(BetterEnd.makeID("overworld_island"), new BiomeIslandFeature()).decoration(Decoration.RAW_GENERATION).build();
public static final BCLFeature FLAMAEA = redisterVegetation("flamaea", new SinglePlantFeature(EndBlocks.FLAMAEA, 12, false, 5), 20); public static final BCLFeature FLAMAEA = redisterVegetation("flamaea", new SinglePlantFeature(EndBlocks.FLAMAEA, 12, false, 5), 20);
// Terrain // // Terrain //
@ -204,7 +207,7 @@ public class EndFeatures {
public static final BCLFeature FLOATING_SPIRE = registerRawGen("floating_spire", new FloatingSpireFeature(), 8); public static final BCLFeature FLOATING_SPIRE = registerRawGen("floating_spire", new FloatingSpireFeature(), 8);
public static final BCLFeature GEYSER = registerRawGen("geyser", new GeyserFeature(), 8); public static final BCLFeature GEYSER = registerRawGen("geyser", new GeyserFeature(), 8);
public static final BCLFeature SULPHURIC_LAKE = registerLake("sulphuric_lake", new SulphuricLakeFeature(), 8); public static final BCLFeature SULPHURIC_LAKE = registerLake("sulphuric_lake", new SulphuricLakeFeature(), 8);
public static final BCLFeature SULPHURIC_CAVE = BCLFeature.makeCountFeature(BetterEnd.makeID("sulphuric_cave"), Decoration.RAW_GENERATION, new SulphuricCaveFeature(), 2); public static final BCLFeature SULPHURIC_CAVE = BCLCommonFeatures.makeCountFeature(BetterEnd.makeID("sulphuric_cave"), Decoration.RAW_GENERATION, new SulphuricCaveFeature(), 2);
public static final BCLFeature ICE_STAR = registerRawGen("ice_star", new IceStarFeature(5, 15, 10, 25), 15); public static final BCLFeature ICE_STAR = registerRawGen("ice_star", new IceStarFeature(5, 15, 10, 25), 15);
public static final BCLFeature ICE_STAR_SMALL = registerRawGen("ice_star_small", new IceStarFeature(3, 5, 7, 12), 8); public static final BCLFeature ICE_STAR_SMALL = registerRawGen("ice_star_small", new IceStarFeature(3, 5, 7, 12), 8);
public static final BCLFeature SURFACE_VENT = registerChanced("surface_vent", new SurfaceVentFeature(), 4); public static final BCLFeature SURFACE_VENT = registerChanced("surface_vent", new SurfaceVentFeature(), 4);
@ -212,15 +215,11 @@ public class EndFeatures {
public static final BCLFeature OBSIDIAN_PILLAR_BASEMENT = registerChanced("obsidian_pillar_basement", new ObsidianPillarBasementFeature(), 8); public static final BCLFeature OBSIDIAN_PILLAR_BASEMENT = registerChanced("obsidian_pillar_basement", new ObsidianPillarBasementFeature(), 8);
public static final BCLFeature OBSIDIAN_BOULDER = registerChanced("obsidian_boulder", new ObsidianBoulderFeature(), 10); public static final BCLFeature OBSIDIAN_BOULDER = registerChanced("obsidian_boulder", new ObsidianBoulderFeature(), 10);
public static final BCLFeature FALLEN_PILLAR = registerChanced("fallen_pillar", new FallenPillarFeature(), 20); public static final BCLFeature FALLEN_PILLAR = registerChanced("fallen_pillar", new FallenPillarFeature(), 20);
public static final BCLFeature TUNEL_CAVE = BCLFeature.makeChunkFeature(BetterEnd.makeID("tunel_cave"), Decoration.RAW_GENERATION, new TunelCaveFeature()); public static final BCLFeature TUNEL_CAVE = BCLCommonFeatures.makeChunkFeature(BetterEnd.makeID("tunel_cave"), Decoration.RAW_GENERATION, new TunelCaveFeature());
public static final BCLFeature UMBRALITH_ARCH = registerChanced( public static final BCLFeature UMBRALITH_ARCH = registerChanced("umbralith_arch", new ArchFeature(
"umbralith_arch", EndBlocks.UMBRALITH.stone,
new ArchFeature( pos -> UmbraValleyBiome.getSurface(pos.getX(), pos.getZ()).defaultBlockState()
EndBlocks.UMBRALITH.stone, ), 10);
//TODO: 1.18 this needs to change to a dynamic block
(pos)->Blocks.END_STONE.defaultBlockState() //UmbraSurfaceBuilder::getSurfaceState
),
10);
public static final BCLFeature THIN_UMBRALITH_ARCH = registerChanced("thin_umbralith_arch", new ThinArchFeature(EndBlocks.UMBRALITH.stone), 15); public static final BCLFeature THIN_UMBRALITH_ARCH = registerChanced("thin_umbralith_arch", new ThinArchFeature(EndBlocks.UMBRALITH.stone), 15);
// Ores // // Ores //
@ -269,23 +268,23 @@ public class EndFeatures {
public static final DefaultFeature CAVE_PUMPKIN = new CavePumpkinFeature(); public static final DefaultFeature CAVE_PUMPKIN = new CavePumpkinFeature();
private static BCLFeature redisterVegetation(String name, Feature<NoneFeatureConfiguration> feature, int density) { private static BCLFeature redisterVegetation(String name, Feature<NoneFeatureConfiguration> feature, int density) {
return BCLFeature.makeVegetationFeature(BetterEnd.makeID(name), feature, density); return BCLCommonFeatures.makeVegetationFeature(BetterEnd.makeID(name), feature, density);
} }
private static BCLFeature registerRawGen(String name, Feature<NoneFeatureConfiguration> feature, int chance) { private static BCLFeature registerRawGen(String name, Feature<NoneFeatureConfiguration> feature, int chance) {
return BCLFeature.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance); return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance);
} }
private static BCLFeature registerLake(String name, Feature<NoneFeatureConfiguration> feature, int chance) { private static BCLFeature registerLake(String name, Feature<NoneFeatureConfiguration> feature, int chance) {
return BCLFeature.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance); return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance);
} }
private static BCLFeature registerChanced(String name, Feature<NoneFeatureConfiguration> feature, int chance) { private static BCLFeature registerChanced(String name, Feature<NoneFeatureConfiguration> feature, int chance) {
return BCLFeature.makeChancedFeature(BetterEnd.makeID(name), Decoration.SURFACE_STRUCTURES, feature, chance); return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.SURFACE_STRUCTURES, feature, chance);
} }
private static BCLFeature registerOre(String name, Block blockOre, int veins, int veinSize, int minY, int maxY) { private static BCLFeature registerOre(String name, Block blockOre, int veins, int veinSize, int minY, int maxY) {
return BCLFeature.makeOreFeature(BetterEnd.makeID(name), blockOre, Blocks.END_STONE, veins, veinSize, minY, maxY); return BCLCommonFeatures.makeOreFeature(BetterEnd.makeID(name), blockOre, Blocks.END_STONE, veins, veinSize, minY, maxY);
} }
private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) { private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) {

View file

@ -1,5 +1,6 @@
package ru.betterend.world.biome.land; package ru.betterend.world.biome.land;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules;
import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BCLBiomeBuilder;
@ -16,6 +17,14 @@ import ru.betterend.world.surface.UmbraSurfaceNoiseCondition;
import java.util.List; import java.util.List;
public class UmbraValleyBiome extends EndBiome.Config { public class UmbraValleyBiome extends EndBiome.Config {
private static final Block[] SURFACE_BLOCKS = new Block[] {
EndBlocks.PALLIDIUM_FULL,
EndBlocks.PALLIDIUM_HEAVY,
EndBlocks.PALLIDIUM_THIN,
EndBlocks.PALLIDIUM_TINY,
EndBlocks.UMBRALITH.stone
};
public UmbraValleyBiome() { public UmbraValleyBiome() {
super("umbra_valley"); super("umbra_valley");
} }
@ -42,6 +51,11 @@ public class UmbraValleyBiome extends EndBiome.Config {
return EndBlocks.UMBRALITH.stone.defaultBlockState(); return EndBlocks.UMBRALITH.stone.defaultBlockState();
} }
@Override
public BlockState getUnderMaterial() {
return EndBlocks.UMBRALITH.stone.defaultBlockState();
}
@Override @Override
public BlockState getAltTopMaterial() { public BlockState getAltTopMaterial() {
return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); return EndBlocks.PALLIDIUM_FULL.defaultBlockState();
@ -54,23 +68,24 @@ public class UmbraValleyBiome extends EndBiome.Config {
@Override @Override
public SurfaceRuleBuilder surface() { public SurfaceRuleBuilder surface() {
return super return super.surface()
.surface() .rule(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR,
.rule(2, new SwitchRuleSource(
SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, new UmbraSurfaceNoiseCondition(),
new SwitchRuleSource( List.of(
new UmbraSurfaceNoiseCondition(), SurfaceRules.state(surfaceMaterial().getAltTopMaterial()),
List.of( PALLIDIUM_HEAVY,
SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), PALLIDIUM_THIN,
PALLIDIUM_HEAVY, PALLIDIUM_TINY,
PALLIDIUM_THIN, SurfaceRules.state(surfaceMaterial().getTopMaterial())
PALLIDIUM_TINY, )
SurfaceRules.state(surfaceMaterial().getTopMaterial()) )
) ));
)
)
);
} }
}; };
} }
public static Block getSurface(int x, int z) {
return SURFACE_BLOCKS[UmbraSurfaceNoiseCondition.getDepth(x, z)];
}
} }

View file

@ -15,11 +15,11 @@ public class UmbraSurfaceNoiseCondition implements NumericProvider {
public int getNumber(SurfaceRulesContextAccessor context) { public int getNumber(SurfaceRulesContextAccessor context) {
final int x = context.getBlockX(); final int x = context.getBlockX();
final int z = context.getBlockZ(); final int z = context.getBlockZ();
final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( return getDepth(x, z);
-0.1, }
0.1,
MHelper.RANDOM public static int getDepth(int x, int z) {
); final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange(-0.1, 0.1, MHelper.RANDOM);
if (value > 0.4) return 0; if (value > 0.4) return 0;
if (value > 0.15) return 1; if (value > 0.15) return 1;
if (value > -0.15) return 2; if (value > -0.15) return 2;