package zmaster587.advancedRocketry.world.ore;
import java.util.Random;
import zmaster587.advancedRocketry.api.Configuration;
import zmaster587.advancedRocketry.dimension.DimensionManager;
import zmaster587.advancedRocketry.dimension.DimensionProperties;
import zmaster587.advancedRocketry.world.provider.WorldProviderPlanet;
import zmaster587.libVulpes.api.material.AllowedProducts;
import zmaster587.libVulpes.api.material.Material;
import zmaster587.libVulpes.api.material.MaterialRegistry;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraft.world.gen.feature.WorldGenerator;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.terraingen.OreGenEvent;
import net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType;
import cpw.mods.fml.common.IWorldGenerator;
import cpw.mods.fml.common.eventhandler.Event.Result;
public class OreGenerator extends WorldGenerator implements IWorldGenerator {
private void generate(World world, Material material, int numPerChunk,int clumpSize, int chunkX, int chunkZ, Random random) {
for(int i = 0; i < numPerChunk; i++) {
int coordX = 16*chunkX + random.nextInt(16);
int coordY = random.nextInt(64);
int coordZ = 16*chunkZ + random.nextInt(16);
new WorldGenMinable(Block.getBlockFromItem(material.getProduct(AllowedProducts.getProductByName("ORE")).getItem()),
material.getMeta(), clumpSize, Blocks.stone).generate(world, random, coordX, coordY, coordZ);
}
}
@Override
public void generate(Random random, int chunkX, int chunkZ, World world,
IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
OreGenEvent event = new OreGenEvent.GenerateMinable(world, random, this, chunkX, chunkZ, EventType.CUSTOM);
MinecraftForge.ORE_GEN_BUS.post(event);
if(event.getResult() != Result.DENY) {
if(Configuration.generateCopper) {
generate(world, MaterialRegistry.getMaterialFromName("Copper"), Configuration.copperPerChunk, Configuration.copperClumpSize, chunkX, chunkZ, random);
}
if(Configuration.generateTin) {
generate(world, MaterialRegistry.getMaterialFromName("Tin"), Configuration.tinPerChunk, Configuration.tinClumpSize, chunkX, chunkZ, random);
}
if(Configuration.generateRutile) {
generate(world, MaterialRegistry.getMaterialFromName("Rutile"), Configuration.rutilePerChunk, Configuration.rutileClumpSize, chunkX, chunkZ, random);
}
if(Configuration.generateAluminum) {
generate(world, MaterialRegistry.getMaterialFromName("Aluminum"), Configuration.aluminumPerChunk, Configuration.aluminumClumpSize, chunkX, chunkZ, random);
}
if(Configuration.generateDilithium) {
int dilithiumChance = Configuration.dilithiumPerChunk;
if(world.provider instanceof WorldProviderPlanet) {
dilithiumChance = DimensionProperties.AtmosphereTypes.getAtmosphereTypeFromValue(DimensionManager.getInstance().getDimensionProperties(world.provider.dimensionId).getAtmosphereDensity()) == DimensionProperties.AtmosphereTypes.NONE ? Configuration.dilithiumPerChunkMoon : Configuration.dilithiumPerChunk;;
}
for(int i = 0; i < dilithiumChance; i++) {
int coordX = 16*chunkX + random.nextInt(16);
int coordY = random.nextInt(64);
int coordZ = 16*chunkZ + random.nextInt(16);
new WorldGenMinable(MaterialRegistry.getMaterialFromName("Dilithium").getBlock(), MaterialRegistry.getMaterialFromName("Dilithium").getMeta(), Configuration.dilithiumClumpSize, Blocks.stone).generate(world, random, coordX, coordY, coordZ);
}
}
}
}
@Override
public boolean generate(World p_76484_1_, Random p_76484_2_,
int p_76484_3_, int p_76484_4_, int p_76484_5_) {
return false;
}
}