aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert.java')
-rw-r--r--src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert.java343
1 files changed, 343 insertions, 0 deletions
diff --git a/src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert.java b/src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert.java
new file mode 100644
index 0000000000..e012fa8590
--- /dev/null
+++ b/src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert.java
@@ -0,0 +1,343 @@
+package gtPlusPlus.australia.biome;
+
+import java.lang.reflect.Field;
+import java.util.Random;
+
+import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import cpw.mods.fml.common.event.FMLServerStartingEvent;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
+import net.minecraft.block.Block;
+import net.minecraft.entity.monster.EntityCreeper;
+import net.minecraft.entity.monster.EntitySilverfish;
+import net.minecraft.entity.monster.EntitySkeleton;
+import net.minecraft.entity.monster.EntitySlime;
+import net.minecraft.entity.monster.EntitySpider;
+import net.minecraft.entity.monster.EntityWitch;
+import net.minecraft.entity.monster.EntityZombie;
+import net.minecraft.entity.passive.EntityChicken;
+import net.minecraft.entity.passive.EntityCow;
+import net.minecraft.entity.passive.EntityHorse;
+import net.minecraft.entity.passive.EntitySheep;
+import net.minecraft.entity.passive.EntitySquid;
+import net.minecraft.entity.passive.EntityWolf;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.gen.feature.WorldGenerator;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianDesert {
+
+ public static BiomeGenAustralianDesert biome = new BiomeGenAustralianDesert();
+
+ public Object instance;
+
+ public static Block blockTopLayer;
+ public static Block blockSecondLayer;
+ public static Block blockMainFiller = Blocks.stone;
+ public static Block blockSecondaryFiller;
+ public static Block blockFluidLakes;
+
+ public Biome_AustralianDesert() {
+ }
+
+ public void load() {
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DESERT);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DRY);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.HOT);
+ BiomeManager.addSpawnBiome(biome);
+ }
+
+ public void generateNether(World world, Random random, int chunkX, int chunkZ) {
+ }
+
+ public void generateSurface(World world, Random random, int chunkX, int chunkZ) {
+ }
+
+ public void registerRenderers() {
+ }
+
+ public int addFuel(ItemStack fuel) {
+ return 0;
+ }
+
+ public void serverLoad(FMLServerStartingEvent event) {
+ }
+
+ public void preInit(FMLPreInitializationEvent event) {
+ }
+
+ static class BiomeGenAustralianDesert extends BiomeGenBase {
+ @SuppressWarnings("unchecked")
+ public BiomeGenAustralianDesert() {
+ super(CORE.AUSTRALIA_BIOME_DESERT_1_ID);
+ this.setBiomeName("Australian Desert");
+ this.setBiomeID();
+ this.enableRain = true;
+ this.enableSnow = false;
+ this.topBlock = blockTopLayer;
+ this.fillerBlock = blockSecondLayer;
+ //this.theBiomeDecorator = new BiomeGenerator_Custom();
+ this.theBiomeDecorator.generateLakes = true;
+ this.theBiomeDecorator.treesPerChunk = 20;
+ this.theBiomeDecorator.flowersPerChunk = 0;
+ this.theBiomeDecorator.grassPerChunk = 5;
+ this.theBiomeDecorator.deadBushPerChunk = 63;
+ this.theBiomeDecorator.mushroomsPerChunk = 0;
+ this.theBiomeDecorator.reedsPerChunk = 42;
+ this.theBiomeDecorator.cactiPerChunk = 56;
+ this.theBiomeDecorator.sandPerChunk = 84;
+ this.rainfall = 0.1F;
+ this.waterColorMultiplier = 13434879;
+ setHeight(new BiomeGenBase.Height(0.15F, 0.45F));
+ this.rootHeight = -0.25f; //Ground level
+
+ this.spawnableMonsterList.clear();
+ this.spawnableCreatureList.clear();
+ this.spawnableWaterCreatureList.clear();
+ this.spawnableCaveCreatureList.clear();
+
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityChicken.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityCow.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityCreeper.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityHorse.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySheep.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySilverfish.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySkeleton.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySlime.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySpider.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityWitch.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityWolf.class, 5, 1, 5));
+ this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityZombie.class, 5, 1, 5));
+
+ this.spawnableWaterCreatureList.add(new BiomeGenBase.SpawnListEntry(EntitySquid.class, 5, 1, 5));
+
+ }
+
+ private synchronized boolean setBiomeID() {
+ BiomeGenBase[] mTempList;
+ try {
+ Field mInternalBiomeList = ReflectionUtils.getField(BiomeGenBase.class, "biomeList");
+ Field mClone = mInternalBiomeList;
+ mTempList = (BiomeGenBase[]) mInternalBiomeList.get(null);
+ if (mTempList != null){
+ mTempList[CORE.AUSTRALIA_BIOME_DESERT_1_ID] = this;
+ mInternalBiomeList.set(null, mTempList);
+ if (mTempList != mInternalBiomeList.get(null)){
+ ReflectionUtils.setFinalStatic(mInternalBiomeList, mTempList);
+ Logger.REFLECTION("Set Biome ID for "+this.biomeName+" Biome internally in 'biomeList' field from "+BiomeGenBase.class.getCanonicalName()+".");
+ return true;
+ }
+ else {
+ Logger.REFLECTION("Failed to set Biome ID for "+this.biomeName+" Biome internally in 'biomeList' field from "+BiomeGenBase.class.getCanonicalName()+".");
+ }
+ }
+ return false;
+ }
+ catch (Exception e) {
+ Logger.REFLECTION("Could not access 'biomeList' field in "+BiomeGenBase.class.getCanonicalName()+".");
+ return false;
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public int getBiomeGrassColor() {
+ return 6697728;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public int getBiomeFoliageColor() {
+ return 6697728;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public int getSkyColorByTemp(float par1) {
+ return 13421772;
+ }
+
+ @SuppressWarnings({ "unchecked", "unused" })
+ private boolean addToMonsterSpawnLists(Class<?> EntityClass, int a, int b, int c){
+ //this.spawnableMonsterList.add(new SpawnListEntry(EntityClass, a, b, c));
+ this.spawnableCaveCreatureList.add(new SpawnListEntry(EntityClass, a, b, c));
+ return true;
+ }
+
+ //TODO - DOES THIS WORK?
+ public WorldGenerator getRandomWorldGenForTrees(Random par1Random)
+ {
+ return new Tree();
+ }
+
+ class Tree
+ extends WorldGenerator
+ {
+ private final int minTreeHeight;
+ private final boolean vinesGrow;
+ private final int metaWood;
+ private final int metaLeaves;
+
+ public Tree()
+ {
+ super();
+ this.minTreeHeight = 5;
+ this.metaWood = 0;
+ this.metaLeaves = 0;
+ this.vinesGrow = false;
+ }
+
+ public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
+ {
+ int var6 = par2Random.nextInt(3) + this.minTreeHeight;
+ boolean var7 = true;
+ if ((par4 >= 1) && (par4 + var6 + 1 <= 256))
+ {
+ for (int var8 = par4; var8 <= par4 + 1 + var6; var8++)
+ {
+ byte var9 = 1;
+ if (var8 == par4) {
+ var9 = 0;
+ }
+ if (var8 >= par4 + 1 + var6 - 2) {
+ var9 = 2;
+ }
+ for (int var10 = par3 - var9; (var10 <= par3 + var9) && (var7); var10++) {
+ for (int var11 = par5 - var9; (var11 <= par5 + var9) && (var7); var11++) {
+ if ((var8 >= 0) && (var8 < 256))
+ {
+ Block var12s = par1World.getBlock(var10, var8, var11);
+ int var12 = Block.getIdFromBlock(var12s);
+ if ((var12 != 0) && (var12s != Blocks.air) && (var12s != Blocks.grass) && (var12s != Blocks.dirt) && (var12s != Blocks.cactus)) {
+ var7 = false;
+ }
+ }
+ else
+ {
+ var7 = false;
+ }
+ }
+ }
+ }
+ if (!var7) {
+ return false;
+ }
+ Block var8s = par1World.getBlock(par3, par4 - 1, par5);
+ int var8 = Block.getIdFromBlock(var8s);
+ if (((var8s == Blocks.grass) || (var8s == Blocks.dirt)) && (par4 < 256 - var6 - 1))
+ {
+ par1World.setBlock(par3, par4 - 1, par5, Blocks.dirt, 0, 2);
+ byte var9 = 3;
+ byte var18 = 0;
+ for (int var11 = par4 - var9 + var6; var11 <= par4 + var6; var11++)
+ {
+ int var12 = var11 - (par4 + var6);
+ int var13 = var18 + 1 - var12 / 2;
+ for (int var14 = par3 - var13; var14 <= par3 + var13; var14++)
+ {
+ int var15 = var14 - par3;
+ for (int var16 = par5 - var13; var16 <= par5 + var13; var16++)
+ {
+ int var17 = var16 - par5;
+ if ((Math.abs(var15) != var13) || (Math.abs(var17) != var13) || ((par2Random.nextInt(2) != 0) && (var12 != 0))) {
+ par1World.setBlock(var14, var11, var16, Blocks.air, this.metaLeaves, 2);
+ }
+ }
+ }
+ }
+ for (int var11 = 0; var11 < var6; var11++)
+ {
+ Block var12s = par1World.getBlock(par3, par4 + var11, par5);
+ int var12 = Block.getIdFromBlock(var12s);
+ if ((var12 == 0) || (var12s == Blocks.air))
+ {
+ par1World.setBlock(par3, par4 + var11, par5, Blocks.cactus, this.metaWood, 2);
+ if ((this.vinesGrow) && (var11 > 0))
+ {
+ if ((par2Random.nextInt(3) > 0) && (par1World.isAirBlock(par3 - 1, par4 + var11, par5))) {
+ par1World.setBlock(par3 - 1, par4 + var11, par5, Blocks.air, 8, 2);
+ }
+ if ((par2Random.nextInt(3) > 0) && (par1World.isAirBlock(par3 + 1, par4 + var11, par5))) {
+ par1World.setBlock(par3 + 1, par4 + var11, par5, Blocks.air, 2, 2);
+ }
+ if ((par2Random.nextInt(3) > 0) && (par1World.isAirBlock(par3, par4 + var11, par5 - 1))) {
+ par1World.setBlock(par3, par4 + var11, par5 - 1, Blocks.air, 1, 2);
+ }
+ if ((par2Random.nextInt(3) > 0) && (par1World.isAirBlock(par3, par4 + var11, par5 + 1))) {
+ par1World.setBlock(par3, par4 + var11, par5 + 1, Blocks.air, 4, 2);
+ }
+ }
+ }
+ }
+ if (this.vinesGrow)
+ {
+ for (int var11 = par4 - 3 + var6; var11 <= par4 + var6; var11++)
+ {
+ int var12 = var11 - (par4 + var6);
+ int var13 = 2 - var12 / 2;
+ for (int var14 = par3 - var13; var14 <= par3 + var13; var14++) {
+ for (int var15 = par5 - var13; var15 <= par5 + var13; var15++) {
+ if (par1World.getBlock(var14, var11, var15) == Blocks.air)
+ {
+ if ((par2Random.nextInt(4) == 0) &&
+ (Block.getIdFromBlock(par1World.getBlock(var14 - 1, var11, var15)) == 0)) {
+ growVines(par1World, var14 - 1, var11, var15, 8);
+ }
+ if ((par2Random.nextInt(4) == 0) &&
+ (Block.getIdFromBlock(par1World.getBlock(var14 + 1, var11, var15)) == 0)) {
+ growVines(par1World, var14 + 1, var11, var15, 2);
+ }
+ if ((par2Random.nextInt(4) == 0) &&
+ (Block.getIdFromBlock(par1World.getBlock(var14, var11, var15 - 1)) == 0)) {
+ growVines(par1World, var14, var11, var15 - 1, 1);
+ }
+ if ((par2Random.nextInt(4) == 0) &&
+ (Block.getIdFromBlock(par1World.getBlock(var14, var11, var15 + 1)) == 0)) {
+ growVines(par1World, var14, var11, var15 + 1, 4);
+ }
+ }
+ }
+ }
+ }
+ if ((par2Random.nextInt(5) == 0) && (var6 > 5)) {
+ for (int var11 = 0; var11 < 2; var11++) {
+ for (int var12 = 0; var12 < 4; var12++) {
+ if (par2Random.nextInt(4 - var11) == 0)
+ {
+ int var13 = par2Random.nextInt(3);
+ par1World.setBlock(par3 + net.minecraft.util.Direction.offsetX[net.minecraft.util.Direction.rotateOpposite[var12]], par4 + var6 - 5 + var11, par5 + net.minecraft.util.Direction.offsetZ[net.minecraft.util.Direction.rotateOpposite[var12]], Blocks.air, var13 << 2 | var12, 2);
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+ return false;
+ }
+
+ private void growVines(World par1World, int par2, int par3, int par4, int par5)
+ {
+ par1World.setBlock(par2, par3, par4, Blocks.vine, par5, 2);
+ int var6 = 4;
+ for (;;)
+ {
+ par3--;
+ if ((Block.getIdFromBlock(par1World.getBlock(par2, par3, par4)) != 0) || (var6 <= 0)) {
+ return;
+ }
+ par1World.setBlock(par2, par3, par4, Blocks.air, par5, 2);
+ var6--;
+ }
+ }
+ }
+
+ }
+
+}