diff --git a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java index d3e9d94d5..29e5e4f9f 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java @@ -40,6 +40,7 @@ public class CarverConfig extends TerraConfig { private final boolean replaceIsBlacklistOuter; private final boolean replaceIsBlacklistTop; private final boolean replaceIsBlacklistBottom; + private final boolean updateOcean; @SuppressWarnings("unchecked") public CarverConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException { @@ -66,6 +67,8 @@ public class CarverConfig extends TerraConfig { update = ConfigUtil.toBlockData(getStringList("update"), "update", getID()); + updateOcean = getBoolean("update-liquids", false); + shift = new HashMap<>(); for(Map.Entry e : Objects.requireNonNull(getConfigurationSection("shift")).getValues(false).entrySet()) { Set l = new HashSet<>(); @@ -184,6 +187,10 @@ public class CarverConfig extends TerraConfig { return null; } + public boolean shouldUpdateOcean() { + return updateOcean; + } + @Override public String toString() { return "Carver with ID " + getID(); diff --git a/src/main/java/com/dfsek/terra/population/CavePopulator.java b/src/main/java/com/dfsek/terra/population/CavePopulator.java index cb50f1f1e..8ea317df9 100644 --- a/src/main/java/com/dfsek/terra/population/CavePopulator.java +++ b/src/main/java/com/dfsek/terra/population/CavePopulator.java @@ -6,11 +6,13 @@ import com.dfsek.terra.carving.SimplexCarver; import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.config.base.ConfigUtil; import com.dfsek.terra.config.genconfig.CarverConfig; +import com.dfsek.terra.structure.StructureSpawnRequirement; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.generator.BlockPopulator; import org.bukkit.util.Vector; @@ -46,19 +48,19 @@ public class CavePopulator extends BlockPopulator { if(e.getValue().equals(CarvingData.CarvingType.CENTER) && c.isReplaceableInner(m)) { if(c.getShiftedBlocks().containsKey(b.getType())) shiftCandidate.put(b.getLocation(), b.getType()); - b.setBlockData(c.getPaletteInner(v.getBlockY()).get(random), c.getUpdateBlocks().contains(m)); + b.setBlockData(c.getPaletteInner(v.getBlockY()).get(random), c.shouldUpdateOcean() && borderingOcean(b)); } else if(e.getValue().equals(CarvingData.CarvingType.WALL) && c.isReplaceableOuter(m)) { if(c.getShiftedBlocks().containsKey(b.getType())) shiftCandidate.put(b.getLocation(), b.getType()); - b.setBlockData(c.getPaletteOuter(v.getBlockY()).get(random), c.getUpdateBlocks().contains(m)); + b.setBlockData(c.getPaletteOuter(v.getBlockY()).get(random), c.shouldUpdateOcean() && borderingOcean(b)); } else if(e.getValue().equals(CarvingData.CarvingType.TOP) && c.isReplaceableTop(m)) { if(c.getShiftedBlocks().containsKey(b.getType())) shiftCandidate.put(b.getLocation(), b.getType()); - b.setBlockData(c.getPaletteTop(v.getBlockY()).get(random), c.getUpdateBlocks().contains(m)); + b.setBlockData(c.getPaletteTop(v.getBlockY()).get(random), c.shouldUpdateOcean() && borderingOcean(b)); } else if(e.getValue().equals(CarvingData.CarvingType.BOTTOM) && c.isReplaceableBottom(m)) { if(c.getShiftedBlocks().containsKey(b.getType())) shiftCandidate.put(b.getLocation(), b.getType()); - b.setBlockData(c.getPaletteBottom(v.getBlockY()).get(random), c.getUpdateBlocks().contains(m)); + b.setBlockData(c.getPaletteBottom(v.getBlockY()).get(random), c.shouldUpdateOcean() && borderingOcean(b)); } if(c.getUpdateBlocks().contains(m)) { updateNeeded.add(b); @@ -98,4 +100,7 @@ public class CavePopulator extends BlockPopulator { } } + private boolean borderingOcean(Block b) { + return b.getRelative(BlockFace.UP).getType().equals(Material.WATER) || b.getType().equals(Material.LAVA); + } }