diff --git a/src/dark/core/common/CoreRecipeLoader.java b/src/dark/core/common/CoreRecipeLoader.java index 377172fd..0b484a8e 100644 --- a/src/dark/core/common/CoreRecipeLoader.java +++ b/src/dark/core/common/CoreRecipeLoader.java @@ -35,7 +35,7 @@ public class CoreRecipeLoader extends RecipeLoader public static Block blockBasalt; public static Block blockGlowGlass; public static Block basicMachine, blockSolar; - public static BlockGasOre blockGas; + public static Block blockGas; /* ITEMS */ public static Item itemMetals, battery, itemTool, itemParts; diff --git a/src/dark/core/common/DarkMain.java b/src/dark/core/common/DarkMain.java index d72a493c..3dd25096 100644 --- a/src/dark/core/common/DarkMain.java +++ b/src/dark/core/common/DarkMain.java @@ -42,6 +42,7 @@ import dark.core.common.blocks.BlockColorSand; import dark.core.common.blocks.BlockGasOre; import dark.core.common.blocks.BlockOre; import dark.core.common.blocks.BlockOre.OreData; +import dark.core.common.blocks.GasOreGenerator; import dark.core.common.blocks.ItemBlockColored; import dark.core.common.blocks.ItemBlockOre; import dark.core.common.blocks.OreGenFluid; @@ -149,7 +150,7 @@ public class DarkMain extends ModPrefab } if (CoreRecipeLoader.blockGas != null) { - OreGenerator.addOre(new OreGenFluid("METHANE", "GasMETHANE", new FluidStack(EnumGas.NATURAL_GAS.getGas(), 1000), 1, 3, 50, 10, 8)); + GameRegistry.registerWorldGenerator(new GasOreGenerator()); } if (CoreRecipeLoader.blockOre != null) { @@ -277,11 +278,8 @@ public class DarkMain extends ModPrefab CoreRecipeLoader.blockBasalt = ModObjectRegistry.createNewBlock("DMBlockBasalt", DarkMain.MOD_ID, BlockBasalt.class, ItemBlockColored.class); CoreRecipeLoader.blockGlowGlass = ModObjectRegistry.createNewBlock("DMBlockGlowGlass", DarkMain.MOD_ID, BlockColorGlowGlass.class, ItemBlockColored.class); CoreRecipeLoader.blockSolar = ModObjectRegistry.createNewBlock("DMBlockSolar", DarkMain.MOD_ID, BlockSolarPanel.class, ItemBlockHolder.class); - Block block = ModObjectRegistry.createNewBlock("DMBlockGas", DarkMain.MOD_ID, BlockGasOre.class, ItemBlockHolder.class); - if (block instanceof BlockGasOre) - { - CoreRecipeLoader.blockDebug = block; - } + CoreRecipeLoader.blockGas = ModObjectRegistry.createNewBlock("DMBlockGas", DarkMain.MOD_ID, BlockGasOre.class, ItemBlockHolder.class); + /* ITEMS */ CoreRecipeLoader.itemTool = ModObjectRegistry.createNewItem("DMReadoutTools", DarkMain.MOD_ID, ItemReadoutTools.class, true); @@ -306,7 +304,7 @@ public class DarkMain extends ModPrefab meta.logoFile = TEXTURE_DIRECTORY + "GP_Banner.png"; meta.version = VERSION; - meta.authorList = Arrays.asList(new String[] { "DarkGuardsman", "HangCow" }); + meta.authorList = Arrays.asList(new String[] { "DarkGuardsman", "HangCow", "Elrath18", "Archadia" }); meta.credits = "Please see the website."; meta.autogenerated = false; } diff --git a/src/dark/core/common/blocks/GasOreGenerator.java b/src/dark/core/common/blocks/GasOreGenerator.java new file mode 100644 index 00000000..0c88b68e --- /dev/null +++ b/src/dark/core/common/blocks/GasOreGenerator.java @@ -0,0 +1,138 @@ +package dark.core.common.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.ChunkProviderEnd; +import net.minecraft.world.gen.ChunkProviderGenerate; +import net.minecraft.world.gen.ChunkProviderHell; +import net.minecraftforge.fluids.FluidStack; +import universalelectricity.prefab.ore.OreGenBase; +import cpw.mods.fml.common.IWorldGenerator; +import cpw.mods.fml.common.registry.GameRegistry; + +public class GasOreGenerator implements IWorldGenerator +{ + + public int minGenerateLevel = 6; + public int maxGenerateLevel = 50; + public int amountPerChunk = 3; + public int amountPerBranch = 10; + public int replaceID = 1; + + public FluidStack stack; + + @Override + public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) + { + chunkX = chunkX << 4; + chunkZ = chunkZ << 4; + + if (this.isOreGeneratedInWorld(world, chunkGenerator)) + { + this.generate(world, rand, chunkX, chunkZ); + } + } + + public void generate(World world, Random random, int varX, int varZ) + { + try + { + //TODO get the biome of the chunk and generate more gas in swamp biomes + // chunk = world.getChunkFromChunkCoords(varX, varZ); + for (int i = 0; i < this.amountPerChunk; i++) + { + int x = varX + random.nextInt(16); + int z = varZ + random.nextInt(16); + int y = random.nextInt(Math.max(this.maxGenerateLevel - this.minGenerateLevel, 0)) + this.minGenerateLevel; + this.generateReplace(world, random, x, y, z); + } + } + catch (Exception e) + { + System.out.println("[CoreMachine]Error generating natural gas"); + e.printStackTrace(); + } + } + + public boolean generateReplace(World world, Random random, int par3, int par4, int par5) + { + float var6 = random.nextFloat() * (float) Math.PI; + double var7 = par3 + 8 + MathHelper.sin(var6) * this.amountPerBranch / 8.0F; + double var9 = par3 + 8 - MathHelper.sin(var6) * this.amountPerBranch / 8.0F; + double var11 = par5 + 8 + MathHelper.cos(var6) * this.amountPerBranch / 8.0F; + double var13 = par5 + 8 - MathHelper.cos(var6) * this.amountPerBranch / 8.0F; + double var15 = par4 + random.nextInt(3) - 2; + double var17 = par4 + random.nextInt(3) - 2; + + for (int oreCount = 0; oreCount <= this.amountPerBranch; ++oreCount) + { + double var20 = var7 + (var9 - var7) * oreCount / this.amountPerBranch; + double var22 = var15 + (var17 - var15) * oreCount / this.amountPerBranch; + double var24 = var11 + (var13 - var11) * oreCount / this.amountPerBranch; + double var26 = random.nextDouble() * this.amountPerBranch / 16.0D; + double var28 = (MathHelper.sin(oreCount * (float) Math.PI / this.amountPerBranch) + 1.0F) * var26 + 1.0D; + double var30 = (MathHelper.sin(oreCount * (float) Math.PI / this.amountPerBranch) + 1.0F) * var26 + 1.0D; + int var32 = MathHelper.floor_double(var20 - var28 / 2.0D); + int var33 = MathHelper.floor_double(var22 - var30 / 2.0D); + int var34 = MathHelper.floor_double(var24 - var28 / 2.0D); + int var35 = MathHelper.floor_double(var20 + var28 / 2.0D); + int var36 = MathHelper.floor_double(var22 + var30 / 2.0D); + int var37 = MathHelper.floor_double(var24 + var28 / 2.0D); + + for (int x = var32; x <= var35; ++x) + { + double var39 = (x + 0.5D - var20) / (var28 / 2.0D); + + if (var39 * var39 < 1.0D) + { + for (int y = var33; y <= var36; ++y) + { + double var42 = (y + 0.5D - var22) / (var30 / 2.0D); + + if (var39 * var39 + var42 * var42 < 1.0D) + { + for (int z = var34; z <= var37; ++z) + { + double var45 = (z + 0.5D - var24) / (var28 / 2.0D); + + int blockid = world.getBlockId(x, y, z); + Block block = Block.blocksList[blockid]; + if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && (block == null || block.isAirBlock(world, x, y, z) || block.canBeReplacedByLeaves(world, x, y, z) || blockid == this.replaceID)) + { + System.out.println("Generated a gas at " + x + "x " + y + "y " + z + "z "); + BlockGasOre.placeAndCreate(world, x, y, z, stack); + } + } + } + } + } + } + } + + return true; + } + + public boolean isOreGeneratedInWorld(World world, IChunkProvider chunkGenerator) + { + if (chunkGenerator instanceof ChunkProviderGenerate) + { + return false; + } + if (chunkGenerator instanceof ChunkProviderHell) + { + return false; + } + if (chunkGenerator instanceof ChunkProviderEnd) + { + return false; + } + return true; + } +} diff --git a/src/dark/core/common/blocks/OreGenFluid.java b/src/dark/core/common/blocks/OreGenFluid.java index 2083e9b3..d429ae99 100644 --- a/src/dark/core/common/blocks/OreGenFluid.java +++ b/src/dark/core/common/blocks/OreGenFluid.java @@ -65,24 +65,24 @@ public class OreGenFluid extends OreGenBase } } - public boolean generateReplace(World world, Random par2Random, int par3, int par4, int par5) + public boolean generateReplace(World world, Random random, int par3, int par4, int par5) { - float var6 = par2Random.nextFloat() * (float) Math.PI; + float var6 = random.nextFloat() * (float) Math.PI; double var7 = par3 + 8 + MathHelper.sin(var6) * this.amountPerBranch / 8.0F; double var9 = par3 + 8 - MathHelper.sin(var6) * this.amountPerBranch / 8.0F; double var11 = par5 + 8 + MathHelper.cos(var6) * this.amountPerBranch / 8.0F; double var13 = par5 + 8 - MathHelper.cos(var6) * this.amountPerBranch / 8.0F; - double var15 = par4 + par2Random.nextInt(3) - 2; - double var17 = par4 + par2Random.nextInt(3) - 2; + double var15 = par4 + random.nextInt(3) - 2; + double var17 = par4 + random.nextInt(3) - 2; - for (int var19 = 0; var19 <= this.amountPerBranch; ++var19) + for (int oreCount = 0; oreCount <= this.amountPerBranch; ++oreCount) { - double var20 = var7 + (var9 - var7) * var19 / this.amountPerBranch; - double var22 = var15 + (var17 - var15) * var19 / this.amountPerBranch; - double var24 = var11 + (var13 - var11) * var19 / this.amountPerBranch; - double var26 = par2Random.nextDouble() * this.amountPerBranch / 16.0D; - double var28 = (MathHelper.sin(var19 * (float) Math.PI / this.amountPerBranch) + 1.0F) * var26 + 1.0D; - double var30 = (MathHelper.sin(var19 * (float) Math.PI / this.amountPerBranch) + 1.0F) * var26 + 1.0D; + double var20 = var7 + (var9 - var7) * oreCount / this.amountPerBranch; + double var22 = var15 + (var17 - var15) * oreCount / this.amountPerBranch; + double var24 = var11 + (var13 - var11) * oreCount / this.amountPerBranch; + double var26 = random.nextDouble() * this.amountPerBranch / 16.0D; + double var28 = (MathHelper.sin(oreCount * (float) Math.PI / this.amountPerBranch) + 1.0F) * var26 + 1.0D; + double var30 = (MathHelper.sin(oreCount * (float) Math.PI / this.amountPerBranch) + 1.0F) * var26 + 1.0D; int var32 = MathHelper.floor_double(var20 - var28 / 2.0D); int var33 = MathHelper.floor_double(var22 - var30 / 2.0D); int var34 = MathHelper.floor_double(var24 - var28 / 2.0D); @@ -110,6 +110,7 @@ public class OreGenFluid extends OreGenBase Block block = Block.blocksList[blockid]; if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && (block == null || block.isAirBlock(world, x, y, z) || block.canBeReplacedByLeaves(world, x, y, z) || blockid == this.replaceID)) { + System.out.println("Generated a gas at " + x + "x " + y + "y " + z + "z "); BlockGasOre.placeAndCreate(world, x, y, z, stack); } } diff --git a/src/dark/core/prefab/fluids/EnumFluid.java b/src/dark/core/prefab/fluids/EnumFluid.java index e1e2417a..4246ef3d 100644 --- a/src/dark/core/prefab/fluids/EnumFluid.java +++ b/src/dark/core/prefab/fluids/EnumFluid.java @@ -1,6 +1,21 @@ package dark.core.prefab.fluids; +import net.minecraftforge.fluids.Fluid; + +/** Some common Fluid that other mods use + * + * @author DarkGuardsman */ public enum EnumFluid { + FUEL(new Fluid("fuel").setUnlocalizedName("fluid.fuel.name")), + OIL(new Fluid("oil").setUnlocalizedName("fluid.oil.name").setDensity(1500).setViscosity(4700)), + BIOFUEL(new Fluid("biofuel").setUnlocalizedName("fluid.biofuel.name")), + WASTE(new Fluid("waste").setUnlocalizedName("fluid.waste.name").setDensity(1300).setViscosity(1800)); + public final Fluid fluid; + + private EnumFluid(Fluid fluid) + { + this.fluid = fluid; + } }