Package mods.railcraft.common.worldgen

Source Code of mods.railcraft.common.worldgen.PoorOreGenerator

/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.worldgen;

import com.google.common.collect.MapMaker;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import java.util.Map;
import java.util.Random;
import mods.railcraft.common.blocks.ore.BlockOre;
import mods.railcraft.common.blocks.ore.EnumOre;
import mods.railcraft.common.worldgen.NoiseGen.NoiseGenSimplex;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraft.world.gen.feature.WorldGenerator;
import net.minecraftforge.event.terraingen.OreGenEvent;
import net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType;
import net.minecraftforge.event.terraingen.TerrainGen;

/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public abstract class PoorOreGenerator {

    private final EventType eventType;
    private final WorldGenerator oreGen;
    private final double scale, denseArea, fringeArea;
    private final int yLevel, yRange, noiseSeed;

    private final Map<World, NoiseGen> noiseMap = new MapMaker().weakKeys().makeMap();

    public PoorOreGenerator(EventType eventType, EnumOre ore, int density, int yLevel, int yRange, int noiseSeed) {
        this(eventType, ore, 0.0025, 0.85, 0.65, density, yLevel, yRange, noiseSeed);
    }

    public PoorOreGenerator(EventType eventType, EnumOre ore, double scale, double denseArea, double fringeArea, int density, int yLevel, int yRange, int noiseSeed) {
        this.eventType = eventType;
        this.scale = scale;
        this.denseArea = denseArea;
        this.fringeArea = fringeArea;
        this.yLevel = yLevel;
        this.yRange = yRange;
        this.noiseSeed = noiseSeed;
        if (density >= 4)
            oreGen = new WorldGenMinable(BlockOre.getBlock(), ore.ordinal(), density, Blocks.stone);
        else
            oreGen = new WorldGenSmallDeposits(BlockOre.getBlock(), ore.ordinal(), density, Blocks.stone);
    }

    @SubscribeEvent
    public void generate(OreGenEvent.Post event) {

        World world = event.world;
        Random rand = event.rand;
        int worldX = event.worldX;
        int worldZ = event.worldZ;

        if (!TerrainGen.generateOre(world, rand, oreGen, worldX, worldZ, eventType))
            return;

        NoiseGen noise = noiseMap.get(world);
        if (noise == null) {
            long seed = world.getSeed();
            seed += world.provider.dimensionId;
            seed += noiseSeed;
            noise = new NoiseGenSimplex(new Random(seed), scale);
            noiseMap.put(world, noise);
        }

        if (canGen(world, rand, worldX, worldZ))
            for (int i = 0; i < 32; i++) {
                int x = worldX + rand.nextInt(16);
                int z = worldZ + rand.nextInt(16);
                double strength = noise.noise(x, z);
                if (strength > denseArea || (strength > fringeArea && rand.nextFloat() > 0.7)) {
                    int y = yLevel + Math.round((float) rand.nextGaussian() * yRange);
                    oreGen.generate(world, rand, x, y, z);
                }
            }
    }

    protected boolean canGen(World world, Random rand, int x, int z) {
        return true;
    }

}
TOP

Related Classes of mods.railcraft.common.worldgen.PoorOreGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.