From 633c5ad55398872e5bec6649780ab7caec9af36a Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 23:38:52 +0100 Subject: [PATCH] Add info about top/underMaterial to BE-biomes --- .../ru/betterend/world/biome/EndBiome.java | 80 ++++++++++++++++++- .../world/biome/land/AmberLandBiome.java | 69 +++++++++------- .../biome/land/BlossomingSpiresBiome.java | 15 +++- .../world/biome/land/ChorusForestBiome.java | 15 +++- .../biome/land/CrystalMountainsBiome.java | 15 +++- .../biome/land/DragonGraveyardsBiome.java | 15 +++- .../world/biome/land/DryShrublandBiome.java | 15 +++- .../world/biome/land/DustWastelandsBiome.java | 15 +++- .../biome/land/FoggyMushroomlandBiome.java | 27 ++++++- .../biome/land/GlowingGrasslandsBiome.java | 15 +++- .../world/biome/land/LanternWoodsBiome.java | 15 +++- .../world/biome/land/MegalakeBiome.java | 25 +++++- .../world/biome/land/MegalakeGroveBiome.java | 15 +++- .../world/biome/land/NeonOasisBiome.java | 25 +++++- .../biome/land/PaintedMountainsBiome.java | 15 +++- .../world/biome/land/ShadowForestBiome.java | 15 +++- .../world/biome/land/SulphurSpringsBiome.java | 23 +++++- .../world/biome/land/UmbraValleyBiome.java | 22 ++++- .../world/biome/land/UmbrellaJungleBiome.java | 15 +++- .../world/features/BiomeIslandFeature.java | 6 +- .../features/terrain/DesertLakeFeature.java | 5 +- .../features/terrain/EndLakeFeature.java | 11 ++- .../terrain/FloatingSpireFeature.java | 5 +- .../world/features/terrain/SpireFeature.java | 5 +- .../piece/CrystalMountainPiece.java | 7 +- .../world/structures/piece/LakePiece.java | 7 +- 26 files changed, 430 insertions(+), 67 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 3a2b923a..0022e24b 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -2,13 +2,18 @@ package ru.betterend.world.biome; import java.util.function.BiFunction; +import net.minecraft.core.BlockPos; import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; import ru.betterend.interfaces.StructureFeaturesAccessor; @@ -16,10 +21,30 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; -public class EndBiome extends BCLBiome { +public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { + public static class DefaultSurfaceMaterialProvider implements SurfaceMaterialProvider{ + public static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); + @Override + public BlockState getTopMaterial() { + return END_STONE; + } + + @Override + public BlockState getAltTopMaterial() { + return getTopMaterial(); + } + + @Override + public BlockState getUnderMaterial() { + return END_STONE; + } + } + public abstract static class Config { + public static final SurfaceMaterialProvider DEFAULT_MATERIAL = new DefaultSurfaceMaterialProvider(); + protected static final StructureFeaturesAccessor VANILLA_FEATURES = (StructureFeaturesAccessor)new StructureFeatures(); - protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(Blocks.END_STONE.defaultBlockState()); + protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(DefaultSurfaceMaterialProvider.END_STONE); protected static final SurfaceRules.RuleSource END_MOSS = SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()); protected static final SurfaceRules.RuleSource ENDSTONE_DUST = SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()); protected static final SurfaceRules.RuleSource END_MYCELIUM = SurfaceRules.state(EndBlocks.END_MYCELIUM.defaultBlockState()); @@ -47,6 +72,10 @@ public class EndBiome extends BCLBiome { protected boolean hasCaves(){ return true; } + + protected SurfaceMaterialProvider surfaceMaterial() { + return DEFAULT_MATERIAL; + } } public EndBiome(ResourceLocation biomeID, Biome biome) { @@ -73,7 +102,54 @@ public class EndBiome extends BCLBiome { EndBiome biome = builder.build(biomeConfig.getSupplier()); biome.addCustomData("has_caves", biomeConfig.hasCaves()); + biome.setSurfaceMaterial(biomeConfig.surfaceMaterial()); return biome; } + + + private SurfaceMaterialProvider surfMatProv = Config.DEFAULT_MATERIAL; + private void setSurfaceMaterial(SurfaceMaterialProvider prov) { + surfMatProv = prov; + } + + @Override + public BlockState getTopMaterial() { + return surfMatProv.getTopMaterial(); + } + + public BlockState getUnderMaterial() { + return surfMatProv.getUnderMaterial(); + } + + @Override + public BlockState getAltTopMaterial() { + return surfMatProv.getAltTopMaterial(); + } + + public static BlockState findTopMaterial(BCLBiome biome){ + if (biome instanceof SurfaceMaterialProvider smp){ + return smp.getTopMaterial(); + } + return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + } + + public static BlockState findTopMaterial(Biome biome){ + return findTopMaterial(BiomeAPI.getBiome(biome)); + } + + public static BlockState findTopMaterial(WorldGenLevel world, BlockPos pos){ + return findTopMaterial(BiomeAPI.getBiome(world.getBiome(pos))); + } + + public static BlockState findUnderMaterial(BCLBiome biome){ + if (biome instanceof SurfaceMaterialProvider smp){ + return smp.getTopMaterial(); + } + return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + } + + public static BlockState findUnderMaterial(WorldGenLevel world, BlockPos pos){ + return findUnderMaterial(BiomeAPI.getBiome(world.getBiome(pos))); + } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 905ba52b..6c203c17 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -10,33 +13,43 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; public class AmberLandBiome extends EndBiome.Config { - public AmberLandBiome() { - super("amber_land"); - } + public AmberLandBiome() { + super("amber_land"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(255, 184, 71) - .fogDensity(2.0F) - .plantsColor(219, 115, 38) - .waterAndFogColor(145, 108, 72) - .music(EndSounds.MUSIC_FOREST) - .loop(EndSounds.AMBIENT_AMBER_LAND) - .particles(EndParticles.AMBER_SPHERE, 0.001F) - .surface(EndBlocks.AMBER_MOSS) - .feature(EndFeatures.AMBER_ORE) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.HELIX_TREE) - .feature(EndFeatures.LANCELEAF) - .feature(EndFeatures.GLOW_PILLAR) - .feature(EndFeatures.AMBER_GRASS) - .feature(EndFeatures.AMBER_ROOT) - .feature(EndFeatures.BULB_MOSS) - .feature(EndFeatures.BULB_MOSS_WOOD) - .feature(EndFeatures.CHARNIA_ORANGE) - .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EntityType.ENDERMAN, 50, 1, 4) - .spawn(EndEntities.END_SLIME, 30, 1, 2); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(255, 184, 71) + .fogDensity(2.0F) + .plantsColor(219, 115, 38) + .waterAndFogColor(145, 108, 72) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_AMBER_LAND) + .particles(EndParticles.AMBER_SPHERE, 0.001F) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .feature(EndFeatures.AMBER_ORE) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.HELIX_TREE) + .feature(EndFeatures.LANCELEAF) + .feature(EndFeatures.GLOW_PILLAR) + .feature(EndFeatures.AMBER_GRASS) + .feature(EndFeatures.AMBER_ROOT) + .feature(EndFeatures.BULB_MOSS) + .feature(EndFeatures.BULB_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.END_SLIME, 30, 1, 2); + } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.AMBER_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 5d0b2bf5..a1528ac0 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -23,7 +26,7 @@ public class BlossomingSpiresBiome extends EndBiome.Config { builder.fogColor(241, 146, 229) .fogDensity(1.7F) .plantsColor(122, 45, 122) - .surface(EndBlocks.PINK_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) .feature(EndFeatures.SPIRE) @@ -40,4 +43,14 @@ public class BlossomingSpiresBiome extends EndBiome.Config { .spawn(EntityType.ENDERMAN, 50, 1, 4) .spawn(EndEntities.SILK_MOTH, 5, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.PINK_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 6337c206..f4d8a3aa 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -3,8 +3,11 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.worldgen.placement.EndPlacements; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -22,7 +25,7 @@ public class ChorusForestBiome extends EndBiome.Config { .fogDensity(1.5F) .plantsColor(122, 45, 122) .waterAndFogColor(73, 30, 73) - .surface(EndBlocks.CHORUS_NYLIUM) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.PORTAL, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) @@ -42,4 +45,14 @@ public class ChorusForestBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 50, 1, 4); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CHORUS_NYLIUM.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 37da7718..76c27e34 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -17,9 +20,19 @@ public class CrystalMountainsBiome extends EndBiome.Config { protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) .plantsColor(255, 133, 211) - .surface(EndBlocks.CRYSTAL_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CRYSTAL_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 6e2cd442..83f1a6c6 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -21,7 +24,7 @@ public class DragonGraveyardsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.0007F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(EndBlocks.SANGNUM) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .waterAndFogColor(203, 59, 167) .plantsColor(244, 46, 79) .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) @@ -35,4 +38,14 @@ public class DragonGraveyardsBiome extends EndBiome.Config { .feature(EndFeatures.CLAWFERN) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.SANGNUM.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index 4377676a..d1a3dd79 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -18,7 +21,7 @@ public class DryShrublandBiome extends EndBiome.Config { .fogDensity(1.2F) .waterAndFogColor(113, 88, 53) .plantsColor(237, 122, 66) - .surface(EndBlocks.RUTISCUS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.LUCERNIA_BUSH_RARE) .feature(EndFeatures.ORANGO) @@ -28,4 +31,14 @@ public class DryShrublandBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.RUTISCUS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 37f1ef07..0c6a8220 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -2,7 +2,10 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; @@ -17,7 +20,7 @@ public class DustWastelandsBiome extends EndBiome.Config { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - .surface(EndBlocks.ENDSTONE_DUST) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) //TODO: 1.18 removed //.depth(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) @@ -26,4 +29,14 @@ public class DustWastelandsBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index c77d9f44..21c9a203 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -1,7 +1,11 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -22,7 +26,11 @@ public class FoggyMushroomlandBiome extends EndBiome.Config { .fogDensity(3) .waterAndFogColor(119, 227, 250) //TODO: 1.18 check surface Rules - .chancedSurface(END_MOSS, END_MYCELIUM, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) @@ -48,4 +56,21 @@ public class FoggyMushroomlandBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 10, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.END_MYCELIUM.defaultBlockState(); + } + }; + + + } } diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 55d93265..4ce5cbc3 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -20,7 +23,7 @@ public class GlowingGrasslandsBiome extends EndBiome.Config { .particles(EndParticles.FIREFLY, 0.001F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(EndBlocks.END_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .waterAndFogColor(92, 250, 230) .plantsColor(73, 210, 209) .feature(EndFeatures.END_LAKE_RARE) @@ -39,4 +42,14 @@ public class GlowingGrasslandsBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 6ab11658..b0f17522 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -19,7 +22,7 @@ public class LanternWoodsBiome extends EndBiome.Config { .fogDensity(1.1F) .waterAndFogColor(171, 234, 226) .plantsColor(254, 85, 57) - .surface(EndBlocks.RUTISCUS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_FOREST) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .feature(EndFeatures.END_LAKE_NORMAL) @@ -39,4 +42,14 @@ public class LanternWoodsBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.RUTISCUS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 346c5ee4..807ddb51 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -1,7 +1,11 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -23,7 +27,11 @@ public class MegalakeBiome extends EndBiome.Config { .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) //TODO: 1.18 check surface Rules - .chancedSurface(END_MOSS, ENDSTONE_DUST, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) //TODO: 1.18 removed //.depth(0F) @@ -44,4 +52,19 @@ public class MegalakeBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 70fed174..b5e46944 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -25,7 +28,7 @@ public class MegalakeGroveBiome extends EndBiome.Config { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .surface(EndBlocks.END_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.LACUGROVE) @@ -46,4 +49,14 @@ public class MegalakeGroveBiome extends EndBiome.Config { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 5b3e7023..af0c0fa2 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -2,7 +2,11 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; @@ -19,7 +23,11 @@ public class NeonOasisBiome extends EndBiome.Config { .fogDensity(2) .waterAndFogColor(106, 238, 215) //TODO: 1.18 check surface Rules - .chancedSurface(ENDSTONE_DUST, END_MOSS, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) @@ -34,4 +42,19 @@ public class NeonOasisBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 5628dac7..71cbc689 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -2,7 +2,10 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; @@ -21,8 +24,18 @@ public class PaintedMountainsBiome extends EndBiome.Config { .waterAndFogColor(192, 180, 131) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .surface(EndBlocks.ENDSTONE_DUST) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.WHITE_ASH, 0.01F) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index b83e742c..eb613ab0 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -2,7 +2,10 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -20,7 +23,7 @@ public class ShadowForestBiome extends EndBiome.Config { .fogDensity(2.5F) .plantsColor(45, 45, 45) .waterAndFogColor(42, 45, 80) - .surface(EndBlocks.SHADOW_GRASS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.MYCELIUM, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) @@ -43,4 +46,14 @@ public class ShadowForestBiome extends EndBiome.Config { .spawn(EntityType.ENDERMAN, 40, 1, 4) .spawn(EntityType.PHANTOM, 1, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.SHADOW_GRASS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index ae128e5a..29ba55eb 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,8 +1,12 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -27,8 +31,8 @@ public class SulphurSpringsBiome extends EndBiome.Config { //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) .surface( SurfaceRules.sequence( - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), END_STONE), - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), FLAVOLITE), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), SurfaceRules.state(surfaceMaterial().getTopMaterial())), SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(0.5), SULPHURIC_ROCK), BRIMSTONE )) @@ -53,4 +57,19 @@ public class SulphurSpringsBiome extends EndBiome.Config { .spawn(EndEntities.CUBOZOA, 50, 3, 8) .spawn(EntityType.ENDERMAN, 50, 1, 4); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.FLAVOLITE.stone.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return Blocks.END_STONE.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 11ef1cce..ce3cfdc0 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; @@ -23,11 +26,11 @@ public class UmbraValleyBiome extends EndBiome.Config { .surface( SurfaceRules.sequence( SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), PALLIDIUM_FULL), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.15), PALLIDIUM_HEAVY), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.15), PALLIDIUM_THIN), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.4), PALLIDIUM_TINY) - )), UMBRALITH + )), SurfaceRules.state(surfaceMaterial().getTopMaterial()) ) ) .particles(EndParticles.AMBER_SPHERE, 0.0001F) @@ -38,4 +41,19 @@ public class UmbraValleyBiome extends EndBiome.Config { .feature(EndFeatures.INFLEXIA) .feature(EndFeatures.FLAMMALIX); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.UMBRALITH.stone.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index f9b7c9eb..1c007e0c 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -22,7 +25,7 @@ public class UmbrellaJungleBiome extends EndBiome.Config { .particles(EndParticles.JUNGLE_SPORE, 0.001F) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .surface(EndBlocks.JUNGLE_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .feature(EndFeatures.END_LAKE) .feature(EndFeatures.UMBRELLA_TREE) .feature(EndFeatures.JELLYSHROOM) @@ -43,4 +46,14 @@ public class UmbrellaJungleBiome extends EndBiome.Config { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.JUNGLE_MOSS.defaultBlockState(); + } + }; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 701f6d35..4954440c 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -15,6 +15,7 @@ import ru.bclib.sdf.primitive.SDFCappedCone; import ru.bclib.util.BlocksHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; +import ru.betterend.world.biome.EndBiome; public class BiomeIslandFeature extends DefaultFeature { private static final MutableBlockPos CENTER = new MutableBlockPos(); @@ -31,7 +32,7 @@ public class BiomeIslandFeature extends DefaultFeature { Biome biome = world.getBiome(pos); int dist = BlocksHelper.downRay(world, pos, 10) + 1; BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); - BlockState topMaterial = world.getBlockState(surfacePos); + BlockState topMaterial = EndBiome.findTopMaterial(world, surfacePos);; //TODO: 1.18 the block selection should be based on the surface rules of the biome if (BlocksHelper.isFluid(topMaterial)) { @@ -39,8 +40,7 @@ public class BiomeIslandFeature extends DefaultFeature { underBlock = Blocks.STONE.defaultBlockState(); } else { - topBlock = topMaterial.is(Blocks.AIR)?Blocks.GRASS_BLOCK.defaultBlockState():topMaterial; - underBlock = Blocks.DIRT.defaultBlockState(); + underBlock = EndBiome.findUnderMaterial(world, surfacePos); } simplexNoise = new OpenSimplexNoise(world.getSeed()); 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 3d3b3021..3d5f71b4 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -18,6 +18,7 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import ru.betterend.world.biome.EndBiome; public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @@ -124,7 +125,7 @@ public class DesertLakeFeature extends DefaultFeature { pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + state = EndBiome.findTopMaterial(world, pos); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( @@ -197,7 +198,7 @@ public class DesertLakeFeature extends DefaultFeature { else if (y < waterLevel) { if (world.isEmptyBlock(POS.above())) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + state = EndBiome.findTopMaterial(world, pos); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); BlocksHelper.setWithoutUpdate( world, POS, 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 5db2f51a..6cb91436 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -18,11 +18,16 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import ru.betterend.world.biome.EndBiome; public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); + + public EndLakeFeature(){ + + } @Override public boolean place(FeaturePlaceContext featureConfig) { @@ -124,8 +129,8 @@ public class EndLakeFeature extends DefaultFeature { pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); -// state = world.getBiome(pos) + state = EndBiome.findTopMaterial(world, pos); + //state = world.getBiome(pos) // .getGenerationSettings() // .getSurfaceBuilderConfig() // .getTopMaterial(); @@ -196,7 +201,7 @@ public class EndLakeFeature extends DefaultFeature { else if (y < waterLevel && y2 + x2 + z2 <= rb) { if (world.isEmptyBlock(POS.above())) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); + state = EndBiome.findTopMaterial(world, pos); // state = world.getBiome(POS) // .getGenerationSettings() // .getSurfaceBuilderConfig() 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 be22d4cc..d03b78f0 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -21,6 +21,7 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; public class FloatingSpireFeature extends SpireFeature { @Override @@ -65,11 +66,11 @@ public class FloatingSpireFeature extends SpireFeature { support.add(info.getPos().above()); } //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState();//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + return EndBiome.findTopMaterial(world, info.getPos());//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() // .getSurfaceBuilderConfig() 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 e6ec58c7..efde5ab3 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -29,6 +29,7 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @@ -68,12 +69,12 @@ public class SpireFeature extends DefaultFeature { support.add(info.getPos().above()); } //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findTopMaterial(world, info.getPos()); //return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() // .getSurfaceBuilderConfig() diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index c3186d65..3970cad8 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -5,7 +5,6 @@ import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; @@ -20,9 +19,11 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class CrystalMountainPiece extends MountainPiece { private BlockState top; @@ -30,7 +31,7 @@ public class CrystalMountainPiece extends MountainPiece { public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); //TODO: 1.18 this needs to change to a dynamic block - top = Blocks.END_STONE.defaultBlockState(); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + top = EndBiome.findTopMaterial(biome); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } public CrystalMountainPiece(StructurePieceSerializationContext type, CompoundTag tag) { @@ -40,7 +41,7 @@ public class CrystalMountainPiece extends MountainPiece { @Override protected void fromNbt(CompoundTag tag) { super.fromNbt(tag);//TODO: 1.18 this needs to change to a dynamic block - top = Blocks.END_STONE.defaultBlockState(); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + top = EndBiome.findTopMaterial(BiomeAPI.getBiome(biomeID)); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } @Override diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 37733a2b..4c01b7b9 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -32,6 +32,7 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); @@ -133,7 +134,7 @@ public class LakePiece extends BasePiece { state = chunk.getBlockState(mut.above()); if (state.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - state = ENDSTONE; + state = EndBiome.findTopMaterial(world, worldPos); // state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) // .getGenerationSettings() // .getSurfaceBuilderConfig() @@ -170,7 +171,7 @@ public class LakePiece extends BasePiece { BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - bState = ENDSTONE; + bState = EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() // .getSurfaceBuilderConfig() @@ -194,7 +195,7 @@ public class LakePiece extends BasePiece { BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - bState = ENDSTONE; + bState =EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() // .getSurfaceBuilderConfig()