diff --git a/src/main/java/ru/betterend/blocks/BlockBrimstone.java b/src/main/java/ru/betterend/blocks/BlockBrimstone.java index 65d7c8b3..7e7cd1fc 100644 --- a/src/main/java/ru/betterend/blocks/BlockBrimstone.java +++ b/src/main/java/ru/betterend/blocks/BlockBrimstone.java @@ -48,16 +48,15 @@ public class BlockBrimstone extends BlockBase { BlockPos side = pos.offset(dir); BlockState sideState = world.getBlockState(side); if (sideState.getBlock() instanceof BlockSulphurCrystal) { - if (sideState.get(BlockSulphurCrystal.AGE) < 2) { + if (sideState.get(BlockSulphurCrystal.AGE) < 2 && sideState.get(BlockSulphurCrystal.WATERLOGGED)) { int age = sideState.get(BlockSulphurCrystal.AGE) + 1; world.setBlockState(side, sideState.with(BlockSulphurCrystal.AGE, age)); } } - else if (sideState.isAir() || !sideState.getFluidState().isEmpty()) { - boolean water = sideState.getFluidState().getFluid().equals(Fluids.WATER); + else if (sideState.getFluidState().getFluid() == Fluids.WATER) { BlockState crystal = EndBlocks.SULPHUR_CRYSTAL.getDefaultState() .with(BlockSulphurCrystal.FACING, dir) - .with(BlockSulphurCrystal.WATERLOGGED, water) + .with(BlockSulphurCrystal.WATERLOGGED, true) .with(BlockSulphurCrystal.AGE, 0); world.setBlockState(side, crystal); } diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index bf0f23e2..7ecc0847 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -96,13 +96,15 @@ public class EndBiomes { float fog = 1F; float chance = 1F; boolean isVoid = false; + boolean hasCaves = true; JsonElement element = config.get(id.getPath()); if (element != null && element.isJsonObject()) { fog = JsonFactory.getFloat(element.getAsJsonObject(), "fogDensity", 1); chance = JsonFactory.getFloat(element.getAsJsonObject(), "genChance", 1); isVoid = JsonFactory.getString(element.getAsJsonObject(), "type", "land").equals("void"); + hasCaves = JsonFactory.getBoolean(element.getAsJsonObject(), "hasCaves", true); } - EndBiome endBiome = new EndBiome(id, biome, fog, chance); + EndBiome endBiome = new EndBiome(id, biome, fog, chance, hasCaves); if (isVoid) { VOID_BIOMES.addBiomeMutable(endBiome); } @@ -175,7 +177,7 @@ public class EndBiomes { * @return registered {@link EndBiome} */ public static EndBiome registerBiome(Biome biome, BiomeType type, float fogDensity, float genChance) { - EndBiome endBiome = new EndBiome(BuiltinRegistries.BIOME.getId(biome), biome, fogDensity, genChance); + EndBiome endBiome = new EndBiome(BuiltinRegistries.BIOME.getId(biome), biome, fogDensity, genChance, true); addToPicker(endBiome, type); return endBiome; } @@ -187,8 +189,8 @@ public class EndBiomes { * @param genChance - generation chance [0.0F - Infinity] * @return registered {@link EndBiome} */ - public static EndBiome registerSubBiome(Biome biome, EndBiome parent, float genChance) { - return registerSubBiome(biome, parent, 1, genChance); + public static EndBiome registerSubBiome(Biome biome, EndBiome parent, float genChance, boolean hasCaves) { + return registerSubBiome(biome, parent, 1, genChance, hasCaves); } /** @@ -199,8 +201,8 @@ public class EndBiomes { * @param genChance - generation chance [0.0F - Infinity] * @return registered {@link EndBiome} */ - public static EndBiome registerSubBiome(Biome biome, EndBiome parent, float fogDensity, float genChance) { - EndBiome endBiome = new EndBiome(BuiltinRegistries.BIOME.getId(biome), biome, fogDensity, genChance); + public static EndBiome registerSubBiome(Biome biome, EndBiome parent, float fogDensity, float genChance, boolean hasCaves) { + EndBiome endBiome = new EndBiome(BuiltinRegistries.BIOME.getId(biome), biome, fogDensity, genChance, hasCaves); parent.addSubBiome(endBiome); SUBBIOMES.add(endBiome); ID_MAP.put(endBiome.getID(), endBiome); @@ -239,7 +241,7 @@ public class EndBiomes { } private static EndBiome registerSubBiome(RegistryKey key, EndBiome parent, float genChance) { - return registerSubBiome(BuiltinRegistries.BIOME.get(key), parent, genChance); + return registerSubBiome(BuiltinRegistries.BIOME.get(key), parent, genChance, true); } private static void addToPicker(EndBiome biome, BiomeType type) { diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index c3e015e2..0f80c135 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -125,7 +125,7 @@ public class EndFeatures { addFeature(ENDER_ORE, features); addFeature(CRASHED_SHIP, features); - if (!id.getPath().equals("blossoming_spires")) { + if (EndBiomes.getBiome(id).hasCaves()) { addFeature(ROUND_CAVE_RARE, features); addFeature(CAVE_GRASS, features); } diff --git a/src/main/java/ru/betterend/world/biome/BiomeBlossomingSpires.java b/src/main/java/ru/betterend/world/biome/BiomeBlossomingSpires.java index 02986112..dc615281 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeBlossomingSpires.java +++ b/src/main/java/ru/betterend/world/biome/BiomeBlossomingSpires.java @@ -11,6 +11,7 @@ public class BiomeBlossomingSpires extends EndBiome { .setFogColor(241, 146, 229) .setFogDensity(1.7F) .setPlantsColor(122, 45, 122) + .setCaves(false) .setSurface(EndBlocks.PINK_MOSS) .setMusic(EndSounds.MUSIC_BLOSSOMING_SPIRES) .setLoop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) diff --git a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java index 253077be..ac3b2442 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java +++ b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java @@ -59,6 +59,7 @@ public class BiomeDefinition { private final Identifier id; private float genChance = 1F; + private boolean hasCaves = true; private ConfiguredSurfaceBuilder surface; @@ -198,6 +199,11 @@ public class BiomeDefinition { this.music = music; return this; } + + public BiomeDefinition setCaves(boolean hasCaves) { + this.hasCaves = hasCaves; + return this; + } public Biome build() { SpawnSettings.Builder spawnSettings = new SpawnSettings.Builder(); @@ -255,4 +261,8 @@ public class BiomeDefinition { public float getGenChance() { return genChance; } + + public boolean hasCaves() { + return hasCaves; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/biome/BiomeDustWastelands.java b/src/main/java/ru/betterend/world/biome/BiomeDustWastelands.java index e55ff709..d6da20a6 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeDustWastelands.java +++ b/src/main/java/ru/betterend/world/biome/BiomeDustWastelands.java @@ -11,6 +11,7 @@ public class BiomeDustWastelands extends EndBiome { super(new BiomeDefinition("dust_wastelands") .setFogColor(226, 239, 168) .setFogDensity(2) + .setCaves(false) .setWaterColor(192, 180, 131) .setWaterFogColor(192, 180, 131) .setSurface(EndBlocks.ENDSTONE_DUST) diff --git a/src/main/java/ru/betterend/world/biome/BiomePaintedMountains.java b/src/main/java/ru/betterend/world/biome/BiomePaintedMountains.java index d21773f7..b1bd0fd2 100644 --- a/src/main/java/ru/betterend/world/biome/BiomePaintedMountains.java +++ b/src/main/java/ru/betterend/world/biome/BiomePaintedMountains.java @@ -11,6 +11,7 @@ public class BiomePaintedMountains extends EndBiome { super(new BiomeDefinition("painted_mountains") .setFogColor(226, 239, 168) .setFogDensity(2) + .setCaves(false) .setWaterColor(192, 180, 131) .setWaterFogColor(192, 180, 131) .setMusic(EndSounds.MUSIC_DUST_WASTELANDS) diff --git a/src/main/java/ru/betterend/world/biome/BiomeSulfurSprings.java b/src/main/java/ru/betterend/world/biome/BiomeSulfurSprings.java index 086905d6..1201ae22 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeSulfurSprings.java +++ b/src/main/java/ru/betterend/world/biome/BiomeSulfurSprings.java @@ -11,6 +11,7 @@ public class BiomeSulfurSprings extends EndBiome { .setSurface(SurfaceBuilders.SULPHURIC_SURFACE) .setFogColor(207, 194, 62) .setFogDensity(1.5F) + .setCaves(false) .setParticles(EndParticles.SULPHUR_PARTICLE, 0.001F) .addFeature(EndFeatures.GEYSER) .addFeature(EndFeatures.SULPHURIC_LAKE) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 8460b2b6..9bc382ed 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -32,6 +32,7 @@ public class EndBiome { protected float genChance = 1; private final float fogDensity; + private final boolean hasCaves; private EndFeature structuresFeature; private Biome actualBiome; @@ -40,14 +41,16 @@ public class EndBiome { mcID = definition.getID(); fogDensity = definition.getFodDensity(); genChanceUnmutable = definition.getGenChance(); + hasCaves = definition.hasCaves(); readStructureList(); } - public EndBiome(Identifier id, Biome biome, float fogDensity, float genChance) { + public EndBiome(Identifier id, Biome biome, float fogDensity, float genChance, boolean hasCaves) { this.biome = biome; this.mcID = id; this.fogDensity = fogDensity; this.genChanceUnmutable = genChance; + this.hasCaves = hasCaves; readStructureList(); } @@ -165,4 +168,8 @@ public class EndBiome { public float getGenChance() { return this.genChance; } + + public boolean hasCaves() { + return hasCaves; + } } diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 022b7e39..73723179 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -92,8 +92,22 @@ public class SulphuricLakeFeature extends DefaultFeature { } else { BlocksHelper.setWithoutUpdate(world, POS, Blocks.WATER); + brimstone.remove(POS); + for (Direction dir: BlocksHelper.HORIZONTAL) { + BlockPos offseted = POS.offset(dir); + if (world.getBlockState(offseted).isIn(EndTags.GEN_TERRAIN)) { + brimstone.add(offseted); + } + } if (isDeepWater(world, POS)) { BlocksHelper.setWithoutUpdate(world, POS.move(Direction.DOWN), Blocks.WATER); + brimstone.remove(POS); + for (Direction dir: BlocksHelper.HORIZONTAL) { + BlockPos offseted = POS.offset(dir); + if (world.getBlockState(offseted).isIn(EndTags.GEN_TERRAIN)) { + brimstone.add(offseted); + } + } } brimstone.add(POS.down()); if (random.nextBoolean()) { @@ -179,9 +193,9 @@ public class SulphuricLakeFeature extends DefaultFeature { private void makeShards(StructureWorldAccess world, BlockPos pos, Random random) { for (Direction dir: BlocksHelper.DIRECTIONS) { BlockPos side; - if (random.nextInt(4) == 0 && world.getBlockState((side = pos.offset(dir))).getMaterial().isReplaceable()) { + if (random.nextInt(3) == 0 && world.getBlockState((side = pos.offset(dir))).isOf(Blocks.WATER)) { BlockState state = EndBlocks.SULPHUR_CRYSTAL.getDefaultState() - .with(BlockSulphurCrystal.WATERLOGGED, world.getBlockState(side).isOf(Blocks.WATER)) + .with(BlockSulphurCrystal.WATERLOGGED, true) .with(BlockSulphurCrystal.FACING, dir) .with(BlockSulphurCrystal.AGE, random.nextInt(3)); BlocksHelper.setWithoutUpdate(world, side, state);