Package erogenousbeef.bigreactors.world

Source Code of erogenousbeef.bigreactors.world.BRSimpleOreGenerator

package erogenousbeef.bigreactors.world;

import java.util.Random;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.ChunkProviderEnd;
import net.minecraft.world.gen.ChunkProviderHell;
import net.minecraft.world.gen.feature.WorldGenMinable;

/**
* This class handles simple ore generation.
* @author Erogenous Beef
*
*/
public class BRSimpleOreGenerator extends WorldGenMinable {

  protected Block blockToGenerate;
  protected int blockToGenerateMetadata;
  protected Block blockToReplace;
 
  protected int minClustersPerChunk;
  protected int maxClustersPerChunk;
  protected int minY;
  protected int maxY;
 
  // For now, we never generate in those dimensions.
  protected Set<Integer> dimensionBlacklist;
 
  public BRSimpleOreGenerator(Block blockToGenerate, int blockMetadata, Block blockToReplace, int clustersPerChunk, int maxY, int maxOrePerCluster) {
    super(blockToGenerate, blockMetadata, maxOrePerCluster, blockToReplace);
    this.minClustersPerChunk = maxClustersPerChunk = clustersPerChunk;
    this.minY = 0;
    this.maxY = maxY;
   
    // this is only used for equality checks
    this.blockToGenerate = blockToGenerate;
    this.blockToGenerateMetadata = blockMetadata;
    this.blockToReplace = blockToReplace;

    dimensionBlacklist = new CopyOnWriteArraySet<Integer>();
  }
 
  public BRSimpleOreGenerator(Block blockToGenerate, int blockMetadata, Block blockToReplace, int minClustersPerChunk, int maxClustersPerChunk, int minY, int maxY, int maxOrePerCluster) {
    this(blockToGenerate, blockMetadata, blockToReplace, maxClustersPerChunk, maxY, maxOrePerCluster);
    this.minClustersPerChunk = minClustersPerChunk;
    this.minY = minY;
  }
 
  public void blacklistDimension(int dimensionId) {
    dimensionBlacklist.add(dimensionId);
  }
 
  /**
   * Call to generate in the given chunk in the given world.
   * Performs no validation as to whether this generator should run (per user settings).
   * @param world
   * @param random
   * @param chunkX
   * @param chunkZ
   */
  public void generateChunk(World world, Random random, int chunkX, int chunkZ) {
    int clustersToGen = minClustersPerChunk;
    if(maxClustersPerChunk > minClustersPerChunk) {
      clustersToGen += random.nextInt(maxClustersPerChunk - minClustersPerChunk);
    }

    int chunkBaseX = chunkX << 4;
    int chunkBaseZ = chunkZ << 4;
    int y;

    for(int i = 0; i < clustersToGen; i++) {
      y = this.minY + random.nextInt(this.maxY - this.minY);
     
      generate(world, random, chunkBaseX, y, chunkBaseZ);
    }
  }
 
  /**
   * Call to discover if this generator WISHES to generate in this world.
   * @param world
   * @return
   */
  public boolean shouldGenerateInWorld(World world) {
    IChunkProvider chunkProvider = world.getChunkProvider();
    if(dimensionBlacklist.contains(world.provider.dimensionId)) {
      return false;
    }
    else if(chunkProvider instanceof ChunkProviderHell) {
      return false;
    }
    else if(chunkProvider instanceof ChunkProviderEnd) {
      return false;
    }

    return true;
  }

  @Override
  public boolean equals(Object o) {
    if(o instanceof BRSimpleOreGenerator) {
      BRSimpleOreGenerator other = (BRSimpleOreGenerator)o;
      if(this.blockToGenerate != null) {
        return this.blockToGenerate == other.blockToGenerate && this.blockToGenerateMetadata == other.blockToGenerateMetadata;
      }
      else if(other.blockToGenerate != null) {
        return false;
      }
      else {
        return false;
      }
    }
    else {
      return false;
    }
  }
}
TOP

Related Classes of erogenousbeef.bigreactors.world.BRSimpleOreGenerator

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.