More Oil improvements and tweaks

Added a 50% bonus to well gen in biomes that spawn Lakes.

Added Taiga to biomes that spawn Oil Lakes (waves at Canada and
Siberia).
This commit is contained in:
CovertJaguar 2013-05-03 13:56:29 -07:00
parent 6fc1fc0abd
commit 4d601e976e

View file

@ -20,6 +20,7 @@ import buildcraft.BuildCraftEnergy;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import net.minecraft.block.BlockFlower; import net.minecraft.block.BlockFlower;
import net.minecraftforge.common.ForgeDirection;
public class OilPopulate { public class OilPopulate {
@ -28,6 +29,7 @@ public class OilPopulate {
static { static {
surfaceDepositBiomes.add(BiomeGenBase.desert.biomeID); surfaceDepositBiomes.add(BiomeGenBase.desert.biomeID);
surfaceDepositBiomes.add(BiomeGenBase.taiga.biomeID);
excludedBiomes.add(BiomeGenBase.sky.biomeID); excludedBiomes.add(BiomeGenBase.sky.biomeID);
excludedBiomes.add(BiomeGenBase.hell.biomeID); excludedBiomes.add(BiomeGenBase.hell.biomeID);
@ -58,7 +60,7 @@ public class OilPopulate {
} }
// Generate a surface oil lake // Generate a surface oil lake
if (surfaceDepositBiomes.contains(biome.biomeID) && rand.nextFloat() > 0.97) { if (surfaceDepositBiomes.contains(biome.biomeID) && rand.nextDouble() <= 0.02) { // 2%
int lakeX = rand.nextInt(10) + 2 + x; int lakeX = rand.nextInt(10) + 2 + x;
int lakeZ = rand.nextInt(10) + 2 + z; int lakeZ = rand.nextInt(10) + 2 + z;
int lakeY = world.getTopSolidOrLiquidBlock(lakeX, lakeZ) - 1; int lakeY = world.getTopSolidOrLiquidBlock(lakeX, lakeZ) - 1;
@ -69,8 +71,9 @@ public class OilPopulate {
} }
} }
boolean mediumDeposit = rand.nextDouble() <= (0.15 / 100.0); double bonus = surfaceDepositBiomes.contains(biome.biomeID) ? 1.5 : 1;
boolean largeDeposit = rand.nextDouble() <= (0.005 / 100.0); boolean mediumDeposit = rand.nextDouble() <= 0.0015 * bonus; // 0.15%
boolean largeDeposit = rand.nextDouble() <= 0.0005 * bonus; // 0.05%
if (BuildCraftCore.debugMode && x == 0 && z == 0) { if (BuildCraftCore.debugMode && x == 0 && z == 0) {
largeDeposit = true; largeDeposit = true;
@ -112,7 +115,7 @@ public class OilPopulate {
boolean started = false; boolean started = false;
for (int y = 128; y >= baseY; --y) { for (int y = world.getActualHeight(); y >= baseY; --y) {
if (started) { if (started) {
int blockId = world.getBlockId(baseX, y, baseZ); int blockId = world.getBlockId(baseX, y, baseZ);
if (blockId == Block.bedrock.blockID) { if (blockId == Block.bedrock.blockID) {
@ -132,13 +135,11 @@ public class OilPopulate {
generateSurfaceDeposit(world, rand, baseX, y, baseZ, 5 + rand.nextInt(5)); generateSurfaceDeposit(world, rand, baseX, y, baseZ, 5 + rand.nextInt(5));
} }
int ymax = 0; int wellHeight = 4;
if (largeDeposit) { if (largeDeposit) {
ymax = (y + 30 < 128 ? y + 30 : 128); wellHeight = 16;
} else if (mediumDeposit) {
ymax = (y + 4 < 128 ? y + 4 : 128);
} }
int ymax = Math.min(y + wellHeight, world.getActualHeight() - 1);
for (int h = y + 1; h <= ymax; ++h) { for (int h = y + 1; h <= ymax; ++h) {
world.setBlock(baseX, h, baseZ, BuildCraftEnergy.oilStill.blockID); world.setBlock(baseX, h, baseZ, BuildCraftEnergy.oilStill.blockID);
@ -178,6 +179,11 @@ public class OilPopulate {
} }
} }
private static boolean isOilOrWater(World world, int x, int y, int z) {
int blockId = world.getBlockId(x, y, z);
return blockId == Block.waterMoving.blockID || blockId == Block.waterStill.blockID || blockId == BuildCraftEnergy.oilStill.blockID || blockId == BuildCraftEnergy.oilMoving.blockID;
}
private static boolean isOil(World world, int x, int y, int z) { private static boolean isOil(World world, int x, int y, int z) {
int blockId = world.getBlockId(x, y, z); int blockId = world.getBlockId(x, y, z);
return (blockId == BuildCraftEnergy.oilStill.blockID || blockId == BuildCraftEnergy.oilMoving.blockID); return (blockId == BuildCraftEnergy.oilStill.blockID || blockId == BuildCraftEnergy.oilMoving.blockID);
@ -194,16 +200,18 @@ public class OilPopulate {
} }
if (adjacentOil || force) { if (adjacentOil || force) {
if (world.isAirBlock(x, y + 1, z) || Block.blocksList[world.getBlockId(x, y + 1, z)] instanceof BlockFlower) { if (world.isAirBlock(x, y + 1, z) || !world.isBlockOpaqueCube(x, y + 1, z) || Block.blocksList[world.getBlockId(x, y + 1, z)] instanceof BlockFlower) {
int blockId = world.getBlockId(x, y, z); world.setBlockToAir(x, y + 1, z);
if (blockId == Block.waterMoving.blockID || blockId == Block.waterStill.blockID || isOil(world, x, y, z)) { if (isOilOrWater(world, x, y, z)) {
world.setBlock(x, y, z, BuildCraftEnergy.oilStill.blockID); world.setBlock(x, y, z, BuildCraftEnergy.oilStill.blockID);
} else { } else {
world.setBlockToAir(x, y, z); world.setBlockToAir(x, y, z);
} }
for (int i = depth; i > 0; i--) { for (int d = depth; d > 0; d--) {
world.setBlock(x, y - i, z, BuildCraftEnergy.oilStill.blockID); if (isOilOrWater(world, x, y - d - 1, z) || world.isBlockSolidOnSide(x, y - d - 1, z, ForgeDirection.UP)) {
world.setBlock(x, y - d, z, BuildCraftEnergy.oilStill.blockID);
}
} }
} }
} }