Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package gregtech.common;
- import gregtech.api.unification.material.Materials;
- import gregtech.api.unification.material.type.DustMaterial;
- import gregtech.common.blocks.BlockOre;
- import gregtech.common.blocks.MetaBlocks;
- import net.minecraft.block.state.IBlockState;
- import net.minecraft.init.Blocks;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.world.World;
- import net.minecraft.world.chunk.IChunkProvider;
- import net.minecraft.world.gen.IChunkGenerator;
- import net.minecraftforge.fml.common.IWorldGenerator;
- import net.minecraftforge.fml.common.registry.GameRegistry;
- import java.util.*;
- import static gregtech.api.unification.material.type.Material.MATERIAL_REGISTRY;
- public class GTWorldGenerator implements IWorldGenerator {
- private final static Map<Integer, List<OreVeinConfig>> configs = new HashMap<>();
- private static int w = 0;
- private static int wn = 0;
- private static int we = 0;
- static {
- List<OreVeinConfig> overworld = new ArrayList<>();
- overworld.add(new OreVeinConfig(1000, 32, Materials.Aluminium, Materials.Bauxite));
- overworld.add(new OreVeinConfig(16000, 16, Materials.Platinum, Materials.Platinum, Materials.Iridium));
- List<OreVeinConfig> nether = new ArrayList<>();
- List<OreVeinConfig> end = new ArrayList<>();
- configs.put(0, overworld);
- configs.put(-1, nether);
- configs.put(1, end);
- addOldOreRecordToConfig("naquadah", 10, 60, 10, 5, 32, false, false, true, false, true, true, Materials.Naquadah, Materials.Naquadah, Materials.Naquadah, Materials.NaquadahEnriched);
- addOldOreRecordToConfig("lignite", 50, 130, 160, 8, 32, true, false, false, false, false, false, Materials.Lignite, Materials.Lignite, Materials.Lignite, Materials.Coal);
- addOldOreRecordToConfig("coal", 50, 80, 80, 6, 32, true, false, false, false, false, false, Materials.Coal, Materials.Coal, Materials.Coal, Materials.Lignite);
- addOldOreRecordToConfig("magnetite", 50, 120, 160, 3, 32, true, true, false, true, true, false, Materials.Magnetite, Materials.Magnetite, Materials.Iron, Materials.VanadiumMagnetite);
- addOldOreRecordToConfig("gold", 60, 80, 160, 3, 32, true, false, false, true, true, true, Materials.Magnetite, Materials.Magnetite, Materials.VanadiumMagnetite, Materials.Gold);
- addOldOreRecordToConfig("iron", 10, 40, 120, 4, 24, true, true, false, true, true, false, Materials.BrownLimonite, Materials.YellowLimonite, Materials.BandedIron, Materials.Malachite);
- addOldOreRecordToConfig("cassiterite", 40, 120, 50, 5, 24, true, false, true, true, true, true, Materials.Tin, Materials.Tin, Materials.Cassiterite, Materials.Tin);
- addOldOreRecordToConfig("tetrahedrite", 80, 120, 70, 4, 24, true, true, false, true, true, true, Materials.Tetrahedrite, Materials.Tetrahedrite, Materials.Copper, Materials.Stibnite);
- addOldOreRecordToConfig("netherquartz", 40, 80, 80, 5, 24, false, true, false, false, false, false, Materials.NetherQuartz, Materials.NetherQuartz, Materials.NetherQuartz, Materials.NetherQuartz);
- addOldOreRecordToConfig("sulfur", 5, 20, 100, 5, 24, false, true, false, false, true, false, Materials.Sulfur, Materials.Sulfur, Materials.Pyrite, Materials.Sphalerite);
- addOldOreRecordToConfig("copper", 10, 30, 80, 4, 24, true, true, false, true, true, false, Materials.Chalcopyrite, Materials.Iron, Materials.Pyrite, Materials.Copper);
- addOldOreRecordToConfig("bauxite", 50, 90, 80, 4, 24, true, false, false, true, true, true, Materials.Bauxite, Materials.Bauxite, Materials.Aluminium, Materials.Ilmenite);
- addOldOreRecordToConfig("salts", 50, 60, 50, 3, 24, true, false, false, true, false, false, Materials.RockSalt, Materials.Salt, Materials.Lepidolite, Materials.Spodumene);
- addOldOreRecordToConfig("redstone", 10, 40, 60, 3, 24, true, true, false, true, true, true, Materials.Redstone, Materials.Redstone, Materials.Ruby, Materials.Cinnabar);
- addOldOreRecordToConfig("soapstone", 10, 40, 40, 3, 16, true, false, false, true, true, false, Materials.Soapstone, Materials.Talc, Materials.Glauconite, Materials.Pentlandite);
- addOldOreRecordToConfig("nickel", 10, 40, 40, 3, 16, true, true, true, true, true, true, Materials.Garnierite, Materials.Nickel, Materials.Cobaltite, Materials.Pentlandite);
- addOldOreRecordToConfig("platinum", 40, 50, 5, 3, 16, true, false, true, false, true, true, Materials.Cooperite, Materials.Palladium, Materials.Platinum, Materials.Iridium);
- addOldOreRecordToConfig("pitchblende", 10, 40, 40, 3, 16, true, false, false, true, true, true, Materials.Pitchblende, Materials.Pitchblende, Materials.Uraninite, Materials.Uraninite);
- addOldOreRecordToConfig("uranium", 20, 30, 20, 3, 16, true, false, false, true, true, true, Materials.Uraninite, Materials.Uraninite, Materials.Uranium, Materials.Uranium);
- addOldOreRecordToConfig("monazite", 20, 40, 30, 3, 16, true, false, false, true, true, true, Materials.Bastnasite, Materials.Bastnasite, Materials.Monazite, Materials.Neodymium);
- addOldOreRecordToConfig("molybdenum", 20, 50, 5, 3, 16, true, false, true, true, true, true, Materials.Wulfenite, Materials.Molybdenite, Materials.Molybdenum, Materials.Powellite);
- addOldOreRecordToConfig("tungstate", 20, 50, 10, 3, 16, true, false, true, true, true, true, Materials.Scheelite, Materials.Scheelite, Materials.Tungstate, Materials.Lithium);
- addOldOreRecordToConfig("sapphire", 10, 40, 60, 3, 16, true, false, false, true, true, true, Materials.Almandine, Materials.Pyrope, Materials.Sapphire, Materials.GreenSapphire);
- addOldOreRecordToConfig("manganese", 20, 30, 20, 3, 16, true, false, true, true, false, true, Materials.Grossular, Materials.Spessartine, Materials.Pyrolusite, Materials.Tantalite);
- addOldOreRecordToConfig("quartz", 40, 80, 60, 3, 16, true, false, false, true, true, true, Materials.Quartzite, Materials.Barite, Materials.CertusQuartz, Materials.CertusQuartz);
- addOldOreRecordToConfig("diamond", 5, 20, 40, 2, 16, true, false, false, true, true, true, Materials.Graphite, Materials.Graphite, Materials.Diamond, Materials.Coal);
- addOldOreRecordToConfig("olivine", 10, 40, 60, 3, 16, true, false, true, true, true, true, Materials.Bentonite, Materials.Magnesite, Materials.Olivine, Materials.Glauconite);
- addOldOreRecordToConfig("apatite", 40, 60, 60, 3, 16, true, false, false, false, false, false, Materials.Apatite, Materials.Apatite, Materials.Phosphorus, Materials.Phosphate);
- addOldOreRecordToConfig("galena", 30, 60, 40, 5, 16, true, false, false, true, true, true, Materials.Galena, Materials.Galena, Materials.Silver, Materials.Lead);
- addOldOreRecordToConfig("lapis", 20, 50, 40, 5, 16, true, false, true, true, true, true, Materials.Lazurite, Materials.Sodalite, Materials.Lapis, Materials.Calcite);
- addOldOreRecordToConfig("beryllium", 5, 30, 30, 3, 16, true, false, true, true, true, true, Materials.Beryllium, Materials.Beryllium, Materials.Emerald, Materials.Thorium);
- addOldOreRecordToConfig("oilsand", 50, 80, 80, 6, 32, true, false, false, false, false, false, Materials.Oilsands, Materials.Oilsands, Materials.Oilsands, Materials.Oilsands);
- System.out.println(w + " " + wn + " " + we);
- }
- public static void addOldOreRecordToConfig(String name, int minY, int maxY, int weight, int density, int size, boolean over, boolean nether, boolean end, boolean moon, boolean mars, boolean asteroids, DustMaterial p, DustMaterial s, DustMaterial b, DustMaterial a) {
- if (over) {
- w += weight;
- System.out.println("overworld.add(new OreVeinConfig(48*coef*totalW/" + weight + "," + (size + 8) + ", " + minY + ", " + maxY
- + ", " + density + ", Materials."+MATERIAL_REGISTRY.getNameForObject(p)+", Materials.Bauxite));");
- }
- //psba
- if (nether) {
- wn += weight;
- System.out.println("nether.add(new OreVeinConfig(48*coef*totalWn/" + weight + "," + (size + 8) + ", " + minY + ", " + maxY
- + ", " + density + ", Materials.Aluminium, Materials.Bauxite));");
- }
- if (end) {
- we += weight;
- System.out.println("end.add(new OreVeinConfig(48*coef*totalWe/" + weight + "," + (size + 8) + ", " + minY + ", " + maxY
- + ", " + density + ", Materials.Aluminium, Materials.Bauxite));");
- }
- }
- public GTWorldGenerator() {
- GameRegistry.registerWorldGenerator(this, 0x3fffffff);
- }
- @Override
- public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
- generateOreVeins(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
- generateSmallOres(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
- }
- private void generateOreVeins(Random chunkRandom, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
- List<OreVeinConfig> oreVeinConfigs = configs.get(world.provider.getDimensionType().getId());
- if (oreVeinConfigs == null) return;
- //convert to positive coordinates
- final long shift = 0x80000000L;
- long xPositive = (chunkX << 4) + shift;
- long zPositive = (chunkZ << 4) + shift;
- Random worldRandom = new Random(world.getSeed());
- for (OreVeinConfig config : oreVeinConfigs) {
- Random veinRandom = new Random(worldRandom.nextLong());
- //int xOffset = veinRandom.nextInt(config.distance);
- //int zOffset = veinRandom.nextInt(config.distance);
- int xOffset = 0;
- int zOffset = 0;
- int distance = config.distance;
- long xGrid = getGridCoordinate(xPositive, xOffset, distance);
- long zGrid = getGridCoordinate(zPositive, zOffset, distance);
- //ignore chunks on the grid
- if (xGrid != getGridCoordinate(xPositive + 15, xOffset, distance)
- || zGrid != getGridCoordinate(zPositive + 15, zOffset, distance)) continue;
- Random gridRandom = new Random(xGrid * veinRandom.nextInt() + zGrid * veinRandom.nextInt() ^ veinRandom.nextLong());
- int xVein = (int) (xGrid + distance / 4 + gridRandom.nextInt(distance / 2) - shift);
- int zVein = (int) (zGrid + distance / 4 + gridRandom.nextInt(distance / 2) - shift);
- //Random random = nearestCenter.getRandom(veinConfigSeed); //todo random size
- int xMax = xVein + config.radius, xMin = xVein - config.radius, zMax = zVein + config.radius, zMin = zVein - config.radius;
- if (inChunk(xVein, chunkX) && inChunk(zVein, chunkZ))
- for (int y = 35; y < 40; y++)
- world.setBlockState(new BlockPos(xVein, y, zVein), Blocks.REDSTONE_BLOCK.getDefaultState(), 2);
- for (int x = xMin; x <= xMax; x++) {
- if (!inChunk(x, chunkX)) continue;
- for (int z = zMin; z <= zMax; z++) {
- if (!inChunk(z, chunkZ)) continue;
- for (int y = 30; y < 35; y++) {
- int i = chunkRandom.nextInt(config.materials.length);
- world.setBlockState(new BlockPos(x, y, z), getNormalOreBlockStateFor(config.materials[i]), 2);
- }
- }
- }
- }
- }
- private boolean inChunk(int coordinate, int chunkCoordinate) {
- return coordinate >> 4 == chunkCoordinate;
- }
- private IBlockState getNormalOreBlockStateFor(DustMaterial material) {
- return MetaBlocks.ORES.get(material).getDefaultState().withProperty(BlockOre.SMALL, false);
- }
- private long getGridCoordinate(long coordinate, int offset, int distance) {
- return (coordinate - offset) / distance * distance + offset;
- }
- private void generateSmallOres(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
- //todo
- }
- private static class OreVeinConfig {
- public int distance;
- public int radius;
- public int minY;
- public int maxY;
- public DustMaterial[] materials;
- public OreVeinConfig(int distance, int radius, int minY, int maxY, int d, DustMaterial... materials) {
- this(distance, radius, materials);
- this.minY = minY;
- this.maxY = maxY;
- }
- public OreVeinConfig(int distance, int radius, DustMaterial... materials) {
- this.distance = distance;
- this.radius = radius;
- this.materials = materials;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement