diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java index 185b92af4..3b0fb7dd1 100644 --- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java +++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java @@ -8,6 +8,7 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.InvalidConfigurationException; import org.polydev.gaea.math.Range; @@ -28,8 +29,10 @@ public class FloraConfig extends TerraConfig implements Flora { private final boolean physics; private final boolean ceiling; - Set spawnable; - Set replaceable; + private final Set irrigable; + + private final Set spawnable; + private final Set replaceable; public FloraConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException { super(file, config); @@ -41,6 +44,11 @@ public class FloraConfig extends TerraConfig implements Flora { spawnable = ConfigUtil.toBlockData(getStringList("spawnable"), "spawnable", getID()); replaceable = ConfigUtil.toBlockData(getStringList("replaceable"), "replaceable", getID()); + + if(contains("irrigable")) { + irrigable = ConfigUtil.toBlockData(getStringList("irrigable"), "irrigable", getID()); + } else irrigable = null; + physics = getBoolean("physics", false); ceiling = getBoolean("ceiling", false); @@ -59,7 +67,7 @@ public class FloraConfig extends TerraConfig implements Flora { if(ceiling) for(int y : range) { if(y > 255 || y < 1) continue; Block check = chunk.getBlock(x, y, z); - Block other = chunk.getBlock(x, y - 1, z); + Block other = check.getRelative(BlockFace.DOWN); if(spawnable.contains(check.getType()) && replaceable.contains(other.getType())) { blocks.add(check); } @@ -67,14 +75,22 @@ public class FloraConfig extends TerraConfig implements Flora { else for(int y : range) { if(y > 254 || y < 0) continue; Block check = chunk.getBlock(x, y, z); - Block other = chunk.getBlock(x, y + 1, z); - if(spawnable.contains(check.getType()) && replaceable.contains(other.getType())) { + Block other = check.getRelative(BlockFace.UP); + if(spawnable.contains(check.getType()) && replaceable.contains(other.getType()) && isIrrigated(check)) { blocks.add(check); } } return blocks; } + private boolean isIrrigated(Block b) { + if(irrigable == null) return true; + return irrigable.contains(b.getRelative(BlockFace.NORTH).getType()) + || irrigable.contains(b.getRelative(BlockFace.SOUTH).getType()) + || irrigable.contains(b.getRelative(BlockFace.EAST).getType()) + || irrigable.contains(b.getRelative(BlockFace.WEST).getType()); + } + @Override public boolean plant(Location location) { int size = floraPalette.getSize(); diff --git a/src/main/resources/default-config/biomes/river.yml b/src/main/resources/default-config/biomes/river.yml index d5981f23b..a436cff6a 100644 --- a/src/main/resources/default-config/biomes/river.yml +++ b/src/main/resources/default-config/biomes/river.yml @@ -26,10 +26,15 @@ flora: min: 62 max: 84 GRASS: - weight: 700 + weight: 675 y: min: 62 max: 84 + SUGARCANE: + weight: 25 + y: + min: 62 + max: 68 ocean: palette: "BLOCK:minecraft:water" diff --git a/src/main/resources/default-config/flora/sugarcane.yml b/src/main/resources/default-config/flora/sugarcane.yml new file mode 100644 index 000000000..39ac6d5c1 --- /dev/null +++ b/src/main/resources/default-config/flora/sugarcane.yml @@ -0,0 +1,17 @@ +layers: + - materials: + - "minecraft:sugar_cane": 2 + layers: 1 + - materials: + - "minecraft:sugar_cane": 1 + - "minecraft:air": 1 + layers: 1 +id: "SUGARCANE" +spawnable: + - "minecraft:sand" + - "minecraft:red_sand" + - "minecraft:grass_block" +replaceable: + - "minecraft:air" +irrigable: + - "minecraft:water" \ No newline at end of file