aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/australia/biome
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gtPlusPlus/australia/biome')
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/CustomDecorator.java355
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/GenLayerAustralia.java32
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/GenLayerBiomesAustraliaDimension.java47
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert.java355
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert2.java355
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert_Ex.java65
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianForest.java198
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOcean.java52
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOutback.java381
-rw-r--r--src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianPlains.java122
10 files changed, 1962 insertions, 0 deletions
diff --git a/src/main/java/gtPlusPlus/australia/biome/CustomDecorator.java b/src/main/java/gtPlusPlus/australia/biome/CustomDecorator.java
new file mode 100644
index 0000000000..2d9b335d52
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/CustomDecorator.java
@@ -0,0 +1,355 @@
+package gtPlusPlus.australia.biome;
+
+import java.util.Random;
+
+import gtPlusPlus.api.interfaces.IGeneratorWorld;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.australia.GTplusplus_Australia;
+import gtPlusPlus.australia.gen.world.WorldGenAustralianOre;
+import net.minecraft.block.BlockFlower;
+import net.minecraft.block.material.Material;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeDecorator;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.gen.feature.WorldGenAbstractTree;
+import net.minecraft.world.gen.feature.WorldGenBigMushroom;
+import net.minecraft.world.gen.feature.WorldGenCactus;
+import net.minecraft.world.gen.feature.WorldGenDeadBush;
+import net.minecraft.world.gen.feature.WorldGenFlowers;
+import net.minecraft.world.gen.feature.WorldGenLiquids;
+import net.minecraft.world.gen.feature.WorldGenMinable;
+import net.minecraft.world.gen.feature.WorldGenPumpkin;
+import net.minecraft.world.gen.feature.WorldGenReed;
+import net.minecraft.world.gen.feature.WorldGenSand;
+import net.minecraft.world.gen.feature.WorldGenWaterlily;
+import net.minecraft.world.gen.feature.WorldGenerator;
+
+import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.*;
+import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.*;
+import net.minecraftforge.common.*;
+import net.minecraftforge.event.terraingen.*;
+
+public class CustomDecorator extends BiomeDecorator {
+
+
+ public CustomDecorator() {
+ this.sandGen = new WorldGenSand(Blocks.sand, 10);
+ this.gravelAsSandGen = new WorldGenSand(Blocks.gravel, 6);
+ this.dirtGen = new WorldGenMinable(Blocks.dirt, 16);
+ this.gravelGen = new WorldGenMinable(Blocks.gravel, 16);
+
+ this.coalGen = new WorldGenAustralianOre(Blocks.coal_ore, 4);
+ this.ironGen = new WorldGenAustralianOre(Blocks.clay, 4);
+ this.goldGen = new WorldGenAustralianOre(Blocks.soul_sand, 20);
+ this.redstoneGen = new WorldGenAustralianOre(Blocks.bedrock, 8);
+ this.diamondGen = new WorldGenAustralianOre(Blocks.diamond_ore, 1);
+ this.lapisGen = new WorldGenAustralianOre(Blocks.lava, 16);
+
+ this.yellowFlowerGen = new WorldGenFlowers(Blocks.yellow_flower);
+ this.mushroomBrownGen = new WorldGenFlowers(Blocks.brown_mushroom);
+ this.mushroomRedGen = new WorldGenFlowers(Blocks.red_mushroom);
+ this.bigMushroomGen = new WorldGenBigMushroom();
+ this.reedGen = new WorldGenReed();
+ this.cactusGen = new WorldGenCactus();
+ this.waterlilyGen = new WorldGenWaterlily();
+ this.flowersPerChunk = 2;
+ this.grassPerChunk = 1;
+ this.sandPerChunk = 1;
+ this.sandPerChunk2 = 3;
+ this.clayPerChunk = 2;
+ this.generateLakes = true;
+ }
+
+ int mDecoratorTimeout = 0;
+
+ public void decorateChunk(World aWorld, Random aRand, BiomeGenBase aGen, int aX, int aZ) {
+ if (this.currentWorld != null && this.chunk_X == aX && this.chunk_Z == aZ) {
+ try {
+ while (this.currentWorld != null) {
+ if (mDecoratorTimeout % 1000 == 0) {
+ Logger.WORLD("Waiting for chunk @ "+aX+", "+aZ+" to generate. Waited "+mDecoratorTimeout+"ms already.");
+ }
+ if (this.currentWorld == null) {
+ break;
+ }
+ if (mDecoratorTimeout >= 5000) {
+ throw new RuntimeException("Already decorating!!");
+ }
+ mDecoratorTimeout++;
+ }
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ throw new RuntimeException("Already decorating!!");
+ }
+ }
+ if (this.currentWorld == null) {
+ this.currentWorld = aWorld;
+ this.randomGenerator = aRand;
+ this.chunk_X = aX;
+ this.chunk_Z = aZ;
+ this.genDecorations(aGen);
+ this.currentWorld = null;
+ this.randomGenerator = null;
+ }
+ }
+
+ protected void genDecorations(BiomeGenBase p_150513_1_) {
+ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(currentWorld, randomGenerator, chunk_X, chunk_Z));
+ this.generateOres();
+ int i;
+ int j;
+ int k;
+
+ boolean doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SAND);
+ for (i = 0; doGen && i < this.sandPerChunk2; ++i) {
+ j = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ this.sandGen.generate(this.currentWorld, this.randomGenerator, j,
+ this.currentWorld.getTopSolidOrLiquidBlock(j, k), k);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, CLAY);
+ for (i = 0; doGen && i < this.clayPerChunk; ++i) {
+ j = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ this.clayGen.generate(this.currentWorld, this.randomGenerator, j,
+ this.currentWorld.getTopSolidOrLiquidBlock(j, k), k);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SAND_PASS2);
+ for (i = 0; doGen && i < this.sandPerChunk; ++i) {
+ j = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ this.gravelAsSandGen.generate(this.currentWorld, this.randomGenerator, j,
+ this.currentWorld.getTopSolidOrLiquidBlock(j, k), k);
+ }
+
+ i = this.treesPerChunk;
+
+ if (this.randomGenerator.nextInt(10) == 0) {
+ ++i;
+ }
+
+ int l;
+ int i1;
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, TREE);
+ for (j = 0; doGen && j < i; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = this.currentWorld.getHeightValue(k, l);
+ WorldGenAbstractTree worldgenabstracttree = p_150513_1_.func_150567_a(this.randomGenerator);
+ worldgenabstracttree.setScale(1.0D, 1.0D, 1.0D);
+
+ if (worldgenabstracttree.generate(this.currentWorld, this.randomGenerator, k, i1, l)) {
+ worldgenabstracttree.func_150524_b(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, BIG_SHROOM);
+ for (j = 0; doGen && j < this.bigMushroomsPerChunk; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ this.bigMushroomGen.generate(this.currentWorld, this.randomGenerator, k,
+ this.currentWorld.getHeightValue(k, l), l);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, FLOWERS);
+ for (j = 0; doGen && j < this.flowersPerChunk; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = nextInt(this.currentWorld.getHeightValue(k, l) + 32);
+ String s = p_150513_1_.func_150572_a(this.randomGenerator, k, i1, l);
+ BlockFlower blockflower = BlockFlower.func_149857_e(s);
+
+ if (blockflower.getMaterial() != Material.air) {
+ this.yellowFlowerGen.func_150550_a(blockflower, BlockFlower.func_149856_f(s));
+ this.yellowFlowerGen.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, GRASS);
+ for (j = 0; doGen && j < this.grassPerChunk; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2);
+ WorldGenerator worldgenerator = p_150513_1_.getRandomWorldGenForGrass(this.randomGenerator);
+ worldgenerator.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, DEAD_BUSH);
+ for (j = 0; doGen && j < this.deadBushPerChunk; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2);
+ (new WorldGenDeadBush(Blocks.deadbush)).generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LILYPAD);
+ for (j = 0; doGen && j < this.waterlilyPerChunk; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+
+ for (i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); i1 > 0
+ && this.currentWorld.isAirBlock(k, i1 - 1, l); --i1) {
+ ;
+ }
+
+ this.waterlilyGen.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SHROOM);
+ for (j = 0; doGen && j < this.mushroomsPerChunk; ++j) {
+ if (this.randomGenerator.nextInt(4) == 0) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = this.currentWorld.getHeightValue(k, l);
+ this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+
+ if (this.randomGenerator.nextInt(8) == 0) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2);
+ this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+ }
+
+ if (doGen && this.randomGenerator.nextInt(4) == 0) {
+ j = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ l = nextInt(this.currentWorld.getHeightValue(j, k) * 2);
+ this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, j, l, k);
+ }
+
+ if (doGen && this.randomGenerator.nextInt(8) == 0) {
+ j = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ l = nextInt(this.currentWorld.getHeightValue(j, k) * 2);
+ this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, j, l, k);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, REED);
+ for (j = 0; doGen && j < this.reedsPerChunk; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2);
+ this.reedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+
+ for (j = 0; doGen && j < 10; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2);
+ this.reedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, PUMPKIN);
+ if (doGen && this.randomGenerator.nextInt(32) == 0) {
+ j = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ l = nextInt(this.currentWorld.getHeightValue(j, k) * 2);
+ (new WorldGenPumpkin()).generate(this.currentWorld, this.randomGenerator, j, l, k);
+ }
+
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, CACTUS);
+ for (j = 0; doGen && j < this.cactiPerChunk; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2);
+ this.cactusGen.generate(this.currentWorld, this.randomGenerator, k, i1, l);
+ }
+
+ try {
+ int midX = Math.max(0, 7 / 2);
+ int midZ = Math.max(0, 7 / 2);
+ int mCurrentBiomeID = Integer.valueOf(currentWorld.getBiomeGenForCoords(chunk_X+midX, chunk_Z+midZ).biomeID);
+
+ if (mCurrentBiomeID == GTplusplus_Australia.Australian_Outback_Biome.biomeID) {
+ this.generateLakes = false;
+ }
+
+ if (mCurrentBiomeID != GTplusplus_Australia.Australian_Outback_Biome.biomeID) {
+ doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LAKE);
+ if (doGen && this.generateLakes) {
+ for (j = 0; j < 50; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.randomGenerator.nextInt(this.randomGenerator.nextInt(248) + 8);
+ i1 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ (new WorldGenLiquids(Blocks.flowing_water)).generate(this.currentWorld, this.randomGenerator, k, l, i1);
+ }
+
+ for (j = 0; j < 20; ++j) {
+ k = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
+ l = this.randomGenerator
+ .nextInt(this.randomGenerator.nextInt(this.randomGenerator.nextInt(240) + 8) + 8);
+ i1 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
+ (new WorldGenLiquids(Blocks.flowing_lava)).generate(this.currentWorld, this.randomGenerator, k, l, i1);
+ }
+ }
+ }
+ }
+ catch (Throwable t) {
+
+ }
+
+ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(currentWorld, randomGenerator, chunk_X, chunk_Z));
+ }
+
+ /**
+ * Standard ore generation helper. Generates most ores.
+ */
+ protected void genStandardOre1(int aAmount, WorldGenerator aOreGenerator, int p_76795_3_, int p_76795_4_) {
+ for (int l = 0; l < aAmount; ++l) {
+ int i1 = this.chunk_X + this.randomGenerator.nextInt(16);
+ int j1 = this.randomGenerator.nextInt(p_76795_4_ - p_76795_3_) + p_76795_3_;
+ int k1 = this.chunk_Z + this.randomGenerator.nextInt(16);
+ aOreGenerator.generate(this.currentWorld, this.randomGenerator, i1, j1, k1);
+ }
+ }
+
+ /**
+ * Standard ore generation helper. Generates Lapis Lazuli.
+ */
+ protected void genStandardOre2(int p_76793_1_, WorldGenerator p_76793_2_, int p_76793_3_, int p_76793_4_) {
+ for (int l = 0; l < p_76793_1_; ++l) {
+ int i1 = this.chunk_X + this.randomGenerator.nextInt(16);
+ int j1 = this.randomGenerator.nextInt(p_76793_4_) + this.randomGenerator.nextInt(p_76793_4_)
+ + (p_76793_3_ - p_76793_4_);
+ int k1 = this.chunk_Z + this.randomGenerator.nextInt(16);
+ p_76793_2_.generate(this.currentWorld, this.randomGenerator, i1, j1, k1);
+ }
+ }
+
+ /**
+ * Generates ores in the current chunk
+ */
+ protected void generateOres() {
+ MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Pre(currentWorld, randomGenerator, chunk_X, chunk_Z));
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, dirtGen, chunk_X, chunk_Z, DIRT))
+ this.genStandardOre1(20, this.dirtGen, 0, 256);
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, gravelGen, chunk_X, chunk_Z, GRAVEL))
+ this.genStandardOre1(10, this.gravelGen, 0, 256);
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, coalGen, chunk_X, chunk_Z, COAL))
+ this.genStandardOre1(20, this.coalGen, 0, 128);
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, ironGen, chunk_X, chunk_Z, IRON))
+ this.genStandardOre1(10, this.ironGen, 0, 64);
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, goldGen, chunk_X, chunk_Z, GOLD))
+ this.genStandardOre1(15, this.goldGen, 0, 32);
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, redstoneGen, chunk_X, chunk_Z, REDSTONE))
+ this.genStandardOre1(10, this.redstoneGen, 0, 16);
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, diamondGen, chunk_X, chunk_Z, DIAMOND))
+ this.genStandardOre1(1, this.diamondGen, 0, 16);
+ if (TerrainGen.generateOre(currentWorld, randomGenerator, lapisGen, chunk_X, chunk_Z, LAPIS))
+ this.genStandardOre2(10, this.lapisGen, 16, 16);
+ MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Post(currentWorld, randomGenerator, chunk_X, chunk_Z));
+ }
+
+ private int nextInt(int i) {
+ if (i <= 1)
+ return 0;
+ return this.randomGenerator.nextInt(i);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/australia/biome/GenLayerAustralia.java b/src/main/java/gtPlusPlus/australia/biome/GenLayerAustralia.java
new file mode 100644
index 0000000000..d9c328d756
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/GenLayerAustralia.java
@@ -0,0 +1,32 @@
+package gtPlusPlus.australia.biome;
+
+import net.minecraft.world.WorldType;
+import net.minecraft.world.gen.layer.GenLayer;
+import net.minecraft.world.gen.layer.GenLayerVoronoiZoom;
+import net.minecraft.world.gen.layer.GenLayerZoom;
+
+public class GenLayerAustralia extends GenLayer {
+
+ public GenLayerAustralia(long seed) {
+ super(seed);
+ }
+
+ public static GenLayer[] makeTheWorld(long seed, WorldType type) {
+ GenLayer biomes = new GenLayerBiomesAustraliaDimension(1L);
+ biomes = new GenLayerZoom(1000L, biomes);
+ biomes = new GenLayerZoom(1001L, biomes);
+ biomes = new GenLayerZoom(1002L, biomes);
+ biomes = new GenLayerZoom(1003L, biomes);
+ biomes = new GenLayerZoom(1004L, biomes);
+ biomes = new GenLayerZoom(1005L, biomes);
+ GenLayer genlayervoronoizoom = new GenLayerVoronoiZoom(10L, biomes);
+ biomes.initWorldGenSeed(seed);
+ genlayervoronoizoom.initWorldGenSeed(seed);
+ return new GenLayer[] { biomes, genlayervoronoizoom };
+ }
+
+ @Override
+ public int[] getInts(int p_75904_1_, int p_75904_2_, int p_75904_3_, int p_75904_4_) {
+ return new int[] {};
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/australia/biome/GenLayerBiomesAustraliaDimension.java b/src/main/java/gtPlusPlus/australia/biome/GenLayerBiomesAustraliaDimension.java
new file mode 100644
index 0000000000..571ae636e0
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/GenLayerBiomesAustraliaDimension.java
@@ -0,0 +1,47 @@
+package gtPlusPlus.australia.biome;
+
+import gtPlusPlus.australia.biome.type.Biome_AustralianDesert_Ex;
+import gtPlusPlus.australia.biome.type.Biome_AustralianForest;
+import gtPlusPlus.australia.biome.type.Biome_AustralianOcean;
+import gtPlusPlus.australia.biome.type.Biome_AustralianOutback;
+import gtPlusPlus.australia.biome.type.Biome_AustralianPlains;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.gen.layer.GenLayer;
+import net.minecraft.world.gen.layer.IntCache;
+
+public class GenLayerBiomesAustraliaDimension extends GenLayer {
+
+ protected BiomeGenBase[] allowedBiomes = {
+ Biome_AustralianDesert_Ex.biome,
+ Biome_AustralianDesert_Ex.biome,
+ Biome_AustralianOutback.biome,
+ Biome_AustralianOutback.biome,
+ Biome_AustralianForest.biome,
+ Biome_AustralianForest.biome,
+ Biome_AustralianPlains.biome,
+ Biome_AustralianPlains.biome,
+ Biome_AustralianOcean.biome,
+ };
+
+ public GenLayerBiomesAustraliaDimension(long seed) {
+ super(seed);
+ }
+
+ public GenLayerBiomesAustraliaDimension(long seed, GenLayer genlayer) {
+ super(seed);
+ this.parent = genlayer;
+ }
+
+ @Override
+ public int[] getInts(int x, int z, int width, int depth) {
+ int[] dest = IntCache.getIntCache(width * depth);
+ for (int dz = 0; dz < depth; dz++) {
+ for (int dx = 0; dx < width; dx++) {
+ this.initChunkSeed(dx + x, dz + z);
+ dest[(dx + dz * width)] = this.allowedBiomes[nextInt(this.allowedBiomes.length)].biomeID;
+ }
+ }
+ return dest;
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert.java b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert.java
new file mode 100644
index 0000000000..666360f058
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert.java
@@ -0,0 +1,355 @@
+package gtPlusPlus.australia.biome.type;
+
+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.WorldGenAbstractTree;
+import net.minecraft.world.gen.feature.WorldGenerator;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianDesert {
+
+
+ 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 static BiomeGenAustralianDesert biome = new BiomeGenAustralianDesert();
+ 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() {
+ try {
+ Field mInternalBiomeList = ReflectionUtils.getField(BiomeGenBase.class, "biomeList");
+ Field mClone = mInternalBiomeList;
+ BiomeGenBase[] mOriginalList = (BiomeGenBase[]) mInternalBiomeList.get(null);
+ BiomeGenBase[] mTempList = new BiomeGenBase[mOriginalList.length];
+ for (int index=0;index<mTempList.length;index++) {
+ mTempList[index] = mOriginalList[index];
+ }
+ if (mTempList != null){
+ mTempList[CORE.AUSTRALIA_BIOME_DESERT_1_ID] = this;
+ mInternalBiomeList.set(null, mTempList);
+ if (mTempList != mInternalBiomeList.get(null)){
+ ReflectionUtils.setFinalFieldValue(BiomeGenBase.class, 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()+".");
+ e.printStackTrace();
+ 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;
+ }
+
+ @Override
+ public WorldGenAbstractTree func_150567_a(Random par1Random){
+ return (WorldGenAbstractTree)(getRandomWorldGenForTrees(par1Random));
+ }
+
+
+ //TODO - DOES THIS WORK?
+ public WorldGenerator getRandomWorldGenForTrees(Random par1Random)
+ {
+ return new Tree();
+ }
+
+ class Tree
+ extends WorldGenAbstractTree
+ {
+ private final int minTreeHeight;
+ private final boolean vinesGrow;
+ private final int metaWood;
+ private final int metaLeaves;
+
+ public Tree()
+ {
+ super(false);
+ 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--;
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert2.java b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert2.java
new file mode 100644
index 0000000000..2ac11bb412
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert2.java
@@ -0,0 +1,355 @@
+package gtPlusPlus.australia.biome.type;
+
+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.math.MathUtils;
+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.WorldGenAbstractTree;
+import net.minecraft.world.gen.feature.WorldGenerator;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianDesert2 {
+
+ public static BiomeGenAustralianDesert2 biome = new BiomeGenAustralianDesert2();
+
+ 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_AustralianDesert2() {
+ }
+
+ 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 BiomeGenAustralianDesert2 extends BiomeGenBase {
+ @SuppressWarnings("unchecked")
+ public BiomeGenAustralianDesert2() {
+ super(CORE.AUSTRALIA_BIOME_DESERT_2_ID);
+ this.setBiomeName("Australian Desert II");
+ //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 = 40;
+ this.theBiomeDecorator.flowersPerChunk = 0;
+ this.theBiomeDecorator.grassPerChunk = 0;
+ this.theBiomeDecorator.deadBushPerChunk = 63;
+ this.theBiomeDecorator.mushroomsPerChunk = 0;
+ this.theBiomeDecorator.reedsPerChunk = 42;
+ this.theBiomeDecorator.cactiPerChunk = 84;
+ this.theBiomeDecorator.sandPerChunk = 84;
+ this.rainfall = 0.1F;
+ this.waterColorMultiplier = 13434879;
+ setHeight(new BiomeGenBase.Height(0.10F, 0.35F));
+ this.rootHeight = -0.15f; //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() {
+ try {
+ Field mInternalBiomeList = ReflectionUtils.getField(BiomeGenBase.class, "biomeList");
+ Field mClone = mInternalBiomeList;
+ BiomeGenBase[] mOriginalList = (BiomeGenBase[]) mInternalBiomeList.get(null);
+ BiomeGenBase[] mTempList = new BiomeGenBase[mOriginalList.length];
+ for (int index=0;index<mTempList.length;index++) {
+ mTempList[index] = mOriginalList[index];
+ }
+ if (mTempList != null){
+ mTempList[CORE.AUSTRALIA_BIOME_DESERT_1_ID] = this;
+ mInternalBiomeList.set(null, mTempList);
+ if (mTempList != mInternalBiomeList.get(null)){
+ ReflectionUtils.setFinalFieldValue(BiomeGenBase.class, 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()+".");
+ e.printStackTrace();
+ 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;
+ }
+
+ @Override
+ public WorldGenAbstractTree func_150567_a(Random par1Random){
+ boolean a = (MathUtils.randInt(0, 100) < MathUtils.randInt(30, 65));
+ return a ? getRandomWorldGenForTrees(par1Random) : super.func_150567_a(par1Random);
+ }
+
+ //TODO - DOES THIS WORK?
+ public WorldGenAbstractTree getRandomWorldGenForTrees(Random par1Random)
+ {
+ return new Tree();
+ }
+
+ class Tree
+ extends WorldGenAbstractTree
+ {
+ private final int minTreeHeight;
+ private final boolean vinesGrow;
+ private final int metaWood;
+ private final int metaLeaves;
+
+ public Tree()
+ {
+ super(false);
+ this.minTreeHeight = 3;
+ 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--;
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert_Ex.java b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert_Ex.java
new file mode 100644
index 0000000000..bfb0fb8631
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert_Ex.java
@@ -0,0 +1,65 @@
+package gtPlusPlus.australia.biome.type;
+
+import java.util.Random;
+
+import gtPlusPlus.australia.biome.CustomDecorator;
+import gtPlusPlus.core.lib.CORE;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeDecorator;
+import net.minecraft.world.biome.BiomeGenDesert;
+import net.minecraft.world.gen.feature.WorldGenDesertWells;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianDesert_Ex extends BiomeGenDesert {
+
+ public Biome_AustralianDesert_Ex(int aID)
+ {
+ super(aID);
+ this.spawnableCreatureList.clear();
+ this.topBlock = Blocks.sand;
+ this.fillerBlock = Blocks.sand;
+ this.theBiomeDecorator.treesPerChunk = -999;
+ this.theBiomeDecorator.deadBushPerChunk = 2;
+ this.theBiomeDecorator.reedsPerChunk = 50;
+ this.theBiomeDecorator.cactiPerChunk = 20;
+ this.setColor(16421912);
+ this.setBiomeName("Australian Desert III");
+ this.setDisableRain();
+ this.setTemperatureRainfall(2.0F, 0.0F);
+ this.setHeight(height_LowPlains);
+ this.spawnableCreatureList.clear();
+ }
+
+ public static Biome_AustralianDesert_Ex biome = new Biome_AustralianDesert_Ex(CORE.AUSTRALIA_BIOME_DESERT_3_ID);
+ public void load() {
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DRY);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.SPARSE);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.HOT);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DESERT);
+ BiomeManager.addSpawnBiome(biome);
+ }
+
+ public void decorate(World p_76728_1_, Random p_76728_2_, int p_76728_3_, int p_76728_4_)
+ {
+ super.decorate(p_76728_1_, p_76728_2_, p_76728_3_, p_76728_4_);
+
+ if (p_76728_2_.nextInt(850) == 0)
+ {
+ int k = p_76728_3_ + p_76728_2_.nextInt(16) + 8;
+ int l = p_76728_4_ + p_76728_2_.nextInt(16) + 8;
+ WorldGenDesertWells worldgendesertwells = new WorldGenDesertWells();
+ worldgendesertwells.generate(p_76728_1_, p_76728_2_, k, p_76728_1_.getHeightValue(k, l) + 1, l);
+ }
+ }
+
+ /**
+ * Allocate a new BiomeDecorator for this BiomeGenBase
+ */
+ @Override
+ public BiomeDecorator createBiomeDecorator()
+ {
+ return getModdedBiomeDecorator(new CustomDecorator());
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianForest.java b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianForest.java
new file mode 100644
index 0000000000..c00fd5edef
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianForest.java
@@ -0,0 +1,198 @@
+package gtPlusPlus.australia.biome.type;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.australia.biome.CustomDecorator;
+import gtPlusPlus.australia.gen.world.WorldGenAustralianTrees;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.util.math.MathUtils;
+
+import java.util.Random;
+import net.minecraft.block.BlockFlower;
+import net.minecraft.entity.passive.EntityWolf;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeDecorator;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.biome.BiomeGenForest;
+import net.minecraft.world.gen.feature.WorldGenAbstractTree;
+import net.minecraft.world.gen.feature.WorldGenBigMushroom;
+import net.minecraft.world.gen.feature.WorldGenCanopyTree;
+import net.minecraft.world.gen.feature.WorldGenForest;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianForest extends BiomeGenForest {
+
+ private int mWoodMeta;
+ protected static final WorldGenForest mGenTreeForest = new WorldGenForest(false, true);
+ protected static final WorldGenForest mGenTreeForest2 = new WorldGenForest(false, false);
+ protected static final WorldGenCanopyTree mGenTreeCanopy = new WorldGenCanopyTree(false);
+ protected static final WorldGenAustralianTrees mGenTreeAustralian = new WorldGenAustralianTrees(true);
+
+ public static Biome_AustralianForest biome = new Biome_AustralianForest(CORE.AUSTRALIA_BIOME_FOREST_ID, 2);
+
+ public void load() {
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.FOREST);
+ BiomeManager.addSpawnBiome(biome);
+ }
+
+ public Biome_AustralianForest(int p_i45377_1_, int aWoodMeta) {
+ super(p_i45377_1_, aWoodMeta);
+ this.mWoodMeta = aWoodMeta;
+ this.setColor(353825);
+ this.setBiomeName("Australian Forest");
+ this.setTemperatureRainfall(1.1F, 0.75F);
+ this.theBiomeDecorator.treesPerChunk = 16;
+ this.theBiomeDecorator.grassPerChunk = 5;
+ this.theBiomeDecorator.flowersPerChunk = 2;
+ this.func_76733_a(5159473);
+ this.spawnableCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityWolf.class, 5, 4, 4));
+ }
+
+ public BiomeGenBase func_150557_a(int p_150557_1_, boolean p_150557_2_) {
+ if (this.mWoodMeta == 2) {
+ this.field_150609_ah = 353825;
+ this.color = p_150557_1_;
+
+ if (p_150557_2_) {
+ this.field_150609_ah = (this.field_150609_ah & 16711422) >> 1;
+ }
+
+ return this;
+ } else {
+ return super.func_150557_a(p_150557_1_, p_150557_2_);
+ }
+ }
+
+ public WorldGenAbstractTree func_150567_a(Random p_150567_1_) {
+ int mTreeType = MathUtils.getRandomFromArray(new int[] {
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5
+ });
+ if (mTreeType == 0) {
+ return mGenTreeCanopy;
+ }
+ else if (mTreeType == 1) {
+ return mGenTreeAustralian;
+ }
+ else if (mTreeType == 2) {
+ return mGenTreeForest;
+ }
+ else if (mTreeType == 3) {
+ return mGenTreeForest2;
+ }
+ else if (mTreeType == 4) {
+ return this.worldGeneratorSwamp;
+ }
+ else {
+ return MathUtils.randInt(0, 1) == 0 ? this.worldGeneratorTrees : this.worldGeneratorBigTree;
+ }
+ }
+
+ public String func_150572_a(Random p_150572_1_, int p_150572_2_, int p_150572_3_, int p_150572_4_) {
+ if (this.mWoodMeta == 1) {
+ double d0 = MathHelper.clamp_double(
+ (1.0D + plantNoise.func_151601_a((double) p_150572_2_ / 48.0D, (double) p_150572_4_ / 48.0D))
+ / 2.0D,
+ 0.0D, 0.9999D);
+ int l = (int) (d0 * (double) BlockFlower.field_149859_a.length);
+
+ if (l == 1) {
+ l = 0;
+ }
+
+ return BlockFlower.field_149859_a[l];
+ } else {
+ return super.func_150572_a(p_150572_1_, p_150572_2_, p_150572_3_, p_150572_4_);
+ }
+ }
+
+ public void decorate(World p_76728_1_, Random p_76728_2_, int p_76728_3_, int p_76728_4_) {
+ int k;
+ int l;
+ int i1;
+ int j1;
+ int k1;
+
+ if (this.mWoodMeta == 3) {
+ for (k = 0; k < 4; ++k) {
+ for (l = 0; l < 4; ++l) {
+ i1 = p_76728_3_ + k * 4 + 1 + 8 + p_76728_2_.nextInt(3);
+ j1 = p_76728_4_ + l * 4 + 1 + 8 + p_76728_2_.nextInt(3);
+ k1 = p_76728_1_.getHeightValue(i1, j1);
+
+ if (p_76728_2_.nextInt(20) == 0) {
+ WorldGenBigMushroom worldgenbigmushroom = new WorldGenBigMushroom();
+ worldgenbigmushroom.generate(p_76728_1_, p_76728_2_, i1, k1, j1);
+ } else {
+ WorldGenAbstractTree worldgenabstracttree = this.func_150567_a(p_76728_2_);
+ worldgenabstracttree.setScale(1.0D, 1.0D, 1.0D);
+
+ if (worldgenabstracttree.generate(p_76728_1_, p_76728_2_, i1, k1, j1)) {
+ worldgenabstracttree.func_150524_b(p_76728_1_, p_76728_2_, i1, k1, j1);
+ }
+ }
+ }
+ }
+ }
+
+ k = p_76728_2_.nextInt(5) - 3;
+
+ if (this.mWoodMeta == 1) {
+ k += 2;
+ }
+
+ l = 0;
+
+ while (l < k) {
+ i1 = p_76728_2_.nextInt(3);
+
+ if (i1 == 0) {
+ genTallFlowers.func_150548_a(1);
+ } else if (i1 == 1) {
+ genTallFlowers.func_150548_a(4);
+ } else if (i1 == 2) {
+ genTallFlowers.func_150548_a(5);
+ }
+
+ j1 = 0;
+
+ while (true) {
+ if (j1 < 5) {
+ k1 = p_76728_3_ + p_76728_2_.nextInt(16) + 8;
+ int i2 = p_76728_4_ + p_76728_2_.nextInt(16) + 8;
+ int l1 = p_76728_2_.nextInt(p_76728_1_.getHeightValue(k1, i2) + 32);
+
+ if (!genTallFlowers.generate(p_76728_1_, p_76728_2_, k1, l1, i2)) {
+ ++j1;
+ continue;
+ }
+ }
+
+ ++l;
+ break;
+ }
+ }
+
+ super.decorate(p_76728_1_, p_76728_2_, p_76728_3_, p_76728_4_);
+ }
+
+ /**
+ * Provides the basic grass color based on the biome temperature and rainfall
+ */
+ @SideOnly(Side.CLIENT)
+ public int getBiomeGrassColor(int p_150558_1_, int p_150558_2_, int p_150558_3_) {
+ int l = super.getBiomeGrassColor(p_150558_1_, p_150558_2_, p_150558_3_);
+ return this.mWoodMeta == 3 ? (l & 16711422) + 2634762 >> 1 : l;
+ }
+
+ /**
+ * Allocate a new BiomeDecorator for this BiomeGenBase
+ */
+ @Override
+ public BiomeDecorator createBiomeDecorator()
+ {
+ return getModdedBiomeDecorator(new CustomDecorator());
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOcean.java b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOcean.java
new file mode 100644
index 0000000000..ebfb455882
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOcean.java
@@ -0,0 +1,52 @@
+package gtPlusPlus.australia.biome.type;
+
+import java.util.Random;
+
+import gtPlusPlus.australia.biome.CustomDecorator;
+import gtPlusPlus.core.lib.CORE;
+import net.minecraft.block.Block;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeDecorator;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.biome.BiomeGenOcean;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianOcean extends BiomeGenOcean {
+
+ public Biome_AustralianOcean(int p_i1985_1_)
+ {
+ super(p_i1985_1_);
+ this.setColor(48);
+ this.setBiomeName("Australian Ocean");
+ this.setHeight(height_DeepOceans);
+ this.spawnableCreatureList.clear();
+ }
+
+ public static Biome_AustralianOcean biome = new Biome_AustralianOcean(CORE.AUSTRALIA_BIOME_OCEAN_ID);
+ public void load() {
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.SPARSE);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.COLD);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.OCEAN);
+ BiomeManager.addSpawnBiome(biome);
+ }
+
+ public BiomeGenBase.TempCategory getTempCategory()
+ {
+ return BiomeGenBase.TempCategory.OCEAN;
+ }
+
+ public void genTerrainBlocks(World p_150573_1_, Random p_150573_2_, Block[] p_150573_3_, byte[] p_150573_4_, int p_150573_5_, int p_150573_6_, double p_150573_7_)
+ {
+ super.genTerrainBlocks(p_150573_1_, p_150573_2_, p_150573_3_, p_150573_4_, p_150573_5_, p_150573_6_, p_150573_7_);
+ }
+
+ /**
+ * Allocate a new BiomeDecorator for this BiomeGenBase
+ */
+ @Override
+ public BiomeDecorator createBiomeDecorator()
+ {
+ return getModdedBiomeDecorator(new CustomDecorator());
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOutback.java b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOutback.java
new file mode 100644
index 0000000000..439c213ac7
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOutback.java
@@ -0,0 +1,381 @@
+package gtPlusPlus.australia.biome.type;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.australia.biome.CustomDecorator;
+import gtPlusPlus.core.lib.CORE;
+
+import java.util.Arrays;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeDecorator;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.biome.BiomeGenMesa;
+import net.minecraft.world.gen.NoiseGeneratorPerlin;
+import net.minecraft.world.gen.feature.WorldGenAbstractTree;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianOutback extends BiomeGenMesa
+{
+ private byte[] field_150621_aC;
+ private long field_150622_aD;
+ private NoiseGeneratorPerlin field_150623_aE;
+ private NoiseGeneratorPerlin field_150624_aF;
+ private NoiseGeneratorPerlin field_150625_aG;
+ private boolean field_150626_aH;
+ private boolean field_150620_aI;
+
+ public Biome_AustralianOutback(int p_i45380_1_){
+ super(p_i45380_1_, false, false);
+ this.setColor(14238997);
+ this.setBiomeName("Australian Outback");
+ this.field_150626_aH = false;
+ this.field_150620_aI = false;
+ this.theBiomeDecorator.generateLakes = false;
+ this.setDisableRain();
+ this.setTemperatureRainfall(2.0F, 0.0F);
+ this.spawnableCreatureList.clear();
+ this.topBlock = Blocks.sand;
+ this.field_150604_aj = 1;
+ this.fillerBlock = Blocks.stained_hardened_clay;
+ this.theBiomeDecorator.deadBushPerChunk = 20;
+ this.theBiomeDecorator.reedsPerChunk = 3;
+ this.theBiomeDecorator.cactiPerChunk = 20;
+ this.theBiomeDecorator.flowersPerChunk = 0;
+ this.spawnableCreatureList.clear();
+ this.theBiomeDecorator.treesPerChunk = 5;
+ }
+
+ public static Biome_AustralianOutback biome = new Biome_AustralianOutback(CORE.AUSTRALIA_BIOME_OUTBACK_ID);
+ public void load() {
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DRY);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.SPARSE);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.HOT);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DESERT);
+ BiomeManager.addSpawnBiome(biome);
+ }
+
+ public WorldGenAbstractTree func_150567_a(Random p_150567_1_)
+ {
+ return this.worldGeneratorTrees;
+ }
+
+ public void decorate(World p_76728_1_, Random p_76728_2_, int p_76728_3_, int p_76728_4_)
+ {
+ super.decorate(p_76728_1_, p_76728_2_, p_76728_3_, p_76728_4_);
+ }
+
+ public void genTerrainBlocks(World p_150573_1_, Random p_150573_2_, Block[] p_150573_3_, byte[] p_150573_4_, int p_150573_5_, int p_150573_6_, double p_150573_7_)
+ {
+ if (this.field_150621_aC == null || this.field_150622_aD != p_150573_1_.getSeed())
+ {
+ this.func_150619_a(p_150573_1_.getSeed());
+ }
+
+ if (this.field_150623_aE == null || this.field_150624_aF == null || this.field_150622_aD != p_150573_1_.getSeed())
+ {
+ Random random1 = new Random(this.field_150622_aD);
+ this.field_150623_aE = new NoiseGeneratorPerlin(random1, 3);
+ this.field_150624_aF = new NoiseGeneratorPerlin(random1, 3);
+ }
+
+ this.field_150622_aD = p_150573_1_.getSeed();
+ double d5 = 0.0D;
+ int k;
+ int l;
+
+ if (this.field_150626_aH)
+ {
+ k = (p_150573_5_ & -16) + (p_150573_6_ & 15);
+ l = (p_150573_6_ & -16) + (p_150573_5_ & 15);
+ double d1 = Math.min(Math.abs(p_150573_7_), this.field_150623_aE.func_151601_a((double)k * 0.25D, (double)l * 0.25D));
+
+ if (d1 > 0.0D)
+ {
+ double d2 = 0.001953125D;
+ double d3 = Math.abs(this.field_150624_aF.func_151601_a((double)k * d2, (double)l * d2));
+ d5 = d1 * d1 * 2.5D;
+ double d4 = Math.ceil(d3 * 50.0D) + 32.0D;
+
+ if (d5 > d4)
+ {
+ d5 = d4;
+ }
+
+ d5 += 64.0D;
+ }
+ }
+
+ k = p_150573_5_ & 15;
+ l = p_150573_6_ & 15;
+ boolean flag = true;
+ Block block = Blocks.stained_hardened_clay;
+ Block block2 = this.fillerBlock;
+ int i1 = (int)(p_150573_7_ / 3.0D + 3.0D + p_150573_2_.nextDouble() * 0.25D);
+ boolean flag1 = Math.cos(p_150573_7_ / 3.0D * Math.PI) > 0.0D;
+ int j1 = -1;
+ boolean flag2 = false;
+ int k1 = p_150573_3_.length / 256;
+
+ for (int l1 = 255; l1 >= 0; --l1)
+ {
+ int i2 = (l * 16 + k) * k1 + l1;
+
+ if ((p_150573_3_[i2] == null || p_150573_3_[i2].getMaterial() == Material.air) && l1 < (int)d5)
+ {
+ p_150573_3_[i2] = Blocks.stone;
+ }
+
+ if (l1 <= 0 + p_150573_2_.nextInt(5))
+ {
+ p_150573_3_[i2] = Blocks.bedrock;
+ }
+ else
+ {
+ Block block1 = p_150573_3_[i2];
+
+ if (block1 != null && block1.getMaterial() != Material.air)
+ {
+ if (block1 == Blocks.stone)
+ {
+ byte b0;
+
+ if (j1 == -1)
+ {
+ flag2 = false;
+
+ if (i1 <= 0)
+ {
+ block = null;
+ block2 = Blocks.stone;
+ }
+ else if (l1 >= 59 && l1 <= 64)
+ {
+ block = Blocks.stained_hardened_clay;
+ block2 = this.fillerBlock;
+ }
+
+ if (l1 < 63 && (block == null || block.getMaterial() == Material.air))
+ {
+ block = Blocks.sandstone;
+ }
+
+ j1 = i1 + Math.max(0, l1 - 63);
+
+ if (l1 >= 62)
+ {
+ if (this.field_150620_aI && l1 > 86 + i1 * 2)
+ {
+ if (flag1)
+ {
+ p_150573_3_[i2] = Blocks.dirt;
+ p_150573_4_[i2] = 1;
+ }
+ else
+ {
+ p_150573_3_[i2] = Blocks.grass;
+ }
+ }
+ else if (l1 > 66 + i1)
+ {
+ b0 = 16;
+
+ if (l1 >= 64 && l1 <= 127)
+ {
+ if (!flag1)
+ {
+ b0 = this.func_150618_d(p_150573_5_, l1, p_150573_6_);
+ }
+ }
+ else
+ {
+ b0 = 1;
+ }
+
+ if (b0 < 16)
+ {
+ p_150573_3_[i2] = Blocks.stained_hardened_clay;
+ p_150573_4_[i2] = (byte)b0;
+ }
+ else
+ {
+ p_150573_3_[i2] = Blocks.hardened_clay;
+ }
+ }
+ else
+ {
+ p_150573_3_[i2] = this.topBlock;
+ p_150573_4_[i2] = (byte)this.field_150604_aj;
+ flag2 = true;
+ }
+ }
+ else
+ {
+ p_150573_3_[i2] = block2;
+
+ if (block2 == Blocks.stained_hardened_clay)
+ {
+ p_150573_4_[i2] = 1;
+ }
+ }
+ }
+ else if (j1 > 0)
+ {
+ --j1;
+
+ if (flag2)
+ {
+ p_150573_3_[i2] = Blocks.stained_hardened_clay;
+ p_150573_4_[i2] = 1;
+ }
+ else
+ {
+ b0 = this.func_150618_d(p_150573_5_, l1, p_150573_6_);
+
+ if (b0 < 16)
+ {
+ p_150573_3_[i2] = Blocks.stained_hardened_clay;
+ p_150573_4_[i2] = b0;
+ }
+ else
+ {
+ p_150573_3_[i2] = Blocks.hardened_clay;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ j1 = -1;
+ }
+ }
+ }
+ super.genTerrainBlocks(p_150573_1_, p_150573_2_, p_150573_3_, p_150573_4_, p_150573_5_, p_150573_6_, p_150573_7_);
+ }
+
+ public void func_150619_a(long p_150619_1_)
+ {
+ this.field_150621_aC = new byte[128];
+ Arrays.fill(this.field_150621_aC, (byte)16);
+ Random random = new Random(p_150619_1_);
+ this.field_150625_aG = new NoiseGeneratorPerlin(random, 3);
+ int j;
+
+ for (j = 0; j < 128; ++j)
+ {
+ j += random.nextInt(8) + 1;
+
+ if (j < 128)
+ {
+ this.field_150621_aC[j] = 1;
+ }
+ }
+
+ j = random.nextInt(7) + 2;
+ int k;
+ int l;
+ int i1;
+ int j1;
+
+ for (k = 0; k < j; ++k)
+ {
+ l = random.nextInt(7) + 1;
+ i1 = random.nextInt(128);
+
+ for (j1 = 0; i1 + j1 < 128 && j1 < l; ++j1)
+ {
+ this.field_150621_aC[i1 + j1] = 4;
+ }
+ }
+
+ k = random.nextInt(6) + 2;
+ int k1;
+
+ for (l = 0; l < k; ++l)
+ {
+ i1 = random.nextInt(7) + 2;
+ j1 = random.nextInt(128);
+
+ for (k1 = 0; j1 + k1 < 128 && k1 < i1; ++k1)
+ {
+ this.field_150621_aC[j1 + k1] = 12;
+ }
+ }
+
+ l = random.nextInt(7) + 2;
+
+ for (i1 = 0; i1 < l; ++i1)
+ {
+ j1 = random.nextInt(5) + 1;
+ k1 = random.nextInt(128);
+
+ for (int l1 = 0; k1 + l1 < 128 && l1 < j1; ++l1)
+ {
+ this.field_150621_aC[k1 + l1] = 14;
+ }
+ }
+
+ i1 = random.nextInt(8) + 3;
+ j1 = 0;
+
+ for (k1 = 0; k1 < i1; ++k1)
+ {
+ byte b0 = 1;
+ j1 += random.nextInt(8) + 4;
+
+ for (int i2 = 0; j1 + i2 < 128 && i2 < b0; ++i2)
+ {
+ this.field_150621_aC[j1 + i2] = 0;
+
+ if (j1 + i2 > 1 && random.nextBoolean())
+ {
+ this.field_150621_aC[j1 + i2 - 1] = 8;
+ }
+
+ if (j1 + i2 < 63 && random.nextBoolean())
+ {
+ this.field_150621_aC[j1 + i2 + 1] = 8;
+ }
+ }
+ }
+ }
+
+ /**
+ * Provides the basic foliage color based on the biome temperature and rainfall
+ */
+ @SideOnly(Side.CLIENT)
+ public int getBiomeFoliageColor(int p_150571_1_, int p_150571_2_, int p_150571_3_)
+ {
+ return 10387789;
+ }
+
+ /**
+ * Provides the basic grass color based on the biome temperature and rainfall
+ */
+ @SideOnly(Side.CLIENT)
+ public int getBiomeGrassColor(int p_150558_1_, int p_150558_2_, int p_150558_3_)
+ {
+ return 9470285;
+ }
+
+ public byte func_150618_d(int p_150618_1_, int p_150618_2_, int p_150618_3_)
+ {
+ int l = (int)Math.round(this.field_150625_aG.func_151601_a((double)p_150618_1_ * 1.0D / 512.0D, (double)p_150618_1_ * 1.0D / 512.0D) * 2.0D);
+ return this.field_150621_aC[(p_150618_2_ + l + 64) % 64];
+ }
+
+ /**
+ * Allocate a new BiomeDecorator for this BiomeGenBase
+ */
+ @Override
+ public BiomeDecorator createBiomeDecorator()
+ {
+ return getModdedBiomeDecorator(new CustomDecorator());
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianPlains.java b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianPlains.java
new file mode 100644
index 0000000000..c04f211fd3
--- /dev/null
+++ b/src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianPlains.java
@@ -0,0 +1,122 @@
+package gtPlusPlus.australia.biome.type;
+
+import java.util.Random;
+
+import gtPlusPlus.australia.biome.CustomDecorator;
+import gtPlusPlus.core.lib.CORE;
+import net.minecraft.block.BlockFlower;
+import net.minecraft.entity.passive.EntityHorse;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeDecorator;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.biome.BiomeGenPlains;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeManager;
+
+public class Biome_AustralianPlains extends BiomeGenPlains
+{
+
+ public Biome_AustralianPlains(int p_i1986_1_)
+ {
+ super(p_i1986_1_);
+ this.setTemperatureRainfall(0.8F, 0.4F);
+ this.setColor(9286496);
+ this.setBiomeName("Plainlands");
+ this.setHeight(height_LowPlains);
+ this.spawnableCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityHorse.class, 5, 2, 6));
+ this.theBiomeDecorator.treesPerChunk = 1;
+ this.theBiomeDecorator.flowersPerChunk = 4;
+ this.theBiomeDecorator.grassPerChunk = 20;
+ this.flowers.clear();
+ this.addFlower(Blocks.red_flower, 4, 3);
+ this.addFlower(Blocks.red_flower, 5, 3);
+ this.addFlower(Blocks.red_flower, 6, 3);
+ this.addFlower(Blocks.red_flower, 7, 3);
+ this.addFlower(Blocks.red_flower, 0, 20);
+ this.addFlower(Blocks.red_flower, 3, 20);
+ this.addFlower(Blocks.red_flower, 8, 20);
+ this.addFlower(Blocks.yellow_flower, 0, 30);
+ }
+
+ public static Biome_AustralianPlains biome = new Biome_AustralianPlains(CORE.AUSTRALIA_BIOME_PLAINS_ID);
+ public void load() {
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DRY);
+ BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.SPARSE);
+ BiomeManager.addSpawnBiome(biome);
+ }
+
+ public String func_150572_a(Random p_150572_1_, int p_150572_2_, int p_150572_3_, int p_150572_4_)
+ {
+ double d0 = plantNoise.func_151601_a((double)p_150572_2_ / 200.0D, (double)p_150572_4_ / 200.0D);
+ int l;
+
+ if (d0 < -0.8D)
+ {
+ l = p_150572_1_.nextInt(4);
+ return BlockFlower.field_149859_a[4 + l];
+ }
+ else if (p_150572_1_.nextInt(3) > 0)
+ {
+ l = p_150572_1_.nextInt(3);
+ return l == 0 ? BlockFlower.field_149859_a[0] : (l == 1 ? BlockFlower.field_149859_a[3] : BlockFlower.field_149859_a[8]);
+ }
+ else
+ {
+ return BlockFlower.field_149858_b[0];
+ }
+ }
+
+ public void decorate(World aWorld, Random aRand, int aX, int aZ)
+ {
+ double d0 = plantNoise.func_151601_a((double)(aX + 8) / 200.0D, (double)(aZ + 8) / 200.0D);
+ int k;
+ int l;
+ int i1;
+ int j1;
+
+ if (d0 < -0.8D)
+ {
+ this.theBiomeDecorator.flowersPerChunk = 15;
+ this.theBiomeDecorator.grassPerChunk = 5;
+ }
+ else
+ {
+ this.theBiomeDecorator.flowersPerChunk = 4;
+ this.theBiomeDecorator.grassPerChunk = 10;
+ genTallFlowers.func_150548_a(2);
+
+ for (k = 0; k < 7; ++k)
+ {
+ l = aX + aRand.nextInt(16) + 8;
+ i1 = aZ + aRand.nextInt(16) + 8;
+ j1 = aRand.nextInt(aWorld.getHeightValue(l, i1) + 32);
+ genTallFlowers.generate(aWorld, aRand, l, j1, i1);
+ }
+ }
+
+ if (this.field_150628_aC)
+ {
+ genTallFlowers.func_150548_a(0);
+
+ for (k = 0; k < 10; ++k)
+ {
+ l = aX + aRand.nextInt(16) + 8;
+ i1 = aZ + aRand.nextInt(16) + 8;
+ j1 = aRand.nextInt(aWorld.getHeightValue(l, i1) + 32);
+ genTallFlowers.generate(aWorld, aRand, l, j1, i1);
+ }
+ }
+
+ this.theBiomeDecorator.decorateChunk(aWorld, aRand, this, aX, aZ);
+ }
+
+ /**
+ * Allocate a new BiomeDecorator for this BiomeGenBase
+ */
+ @Override
+ public BiomeDecorator createBiomeDecorator()
+ {
+ return getModdedBiomeDecorator(new CustomDecorator());
+ }
+} \ No newline at end of file