aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/australia
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2018-07-06 23:49:27 +1000
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2018-07-06 23:49:27 +1000
commit0d30becbc219fc2c86234e84dae306276dafe4c6 (patch)
tree8761781cdddb6dcc54f37a7fe66311c2e29c88c3 /src/Java/gtPlusPlus/australia
parentc37b091b581a838c49a63911d2cda6324d029e10 (diff)
downloadGT5-Unofficial-0d30becbc219fc2c86234e84dae306276dafe4c6.tar.gz
GT5-Unofficial-0d30becbc219fc2c86234e84dae306276dafe4c6.tar.bz2
GT5-Unofficial-0d30becbc219fc2c86234e84dae306276dafe4c6.zip
+ Added a new Dimension, Australia.
% Stopped Custom Villagers spawning as professions that aren't custom. % Trade improvements for some Villagers. $ Fixed a bug in AutoMap mapping to internal name map.
Diffstat (limited to 'src/Java/gtPlusPlus/australia')
-rw-r--r--src/Java/gtPlusPlus/australia/GTplusplus_Australia.java111
-rw-r--r--src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert.java343
-rw-r--r--src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert2.java343
-rw-r--r--src/Java/gtPlusPlus/australia/biome/GenLayerAustralia.java32
-rw-r--r--src/Java/gtPlusPlus/australia/biome/GenLayerBiomesAustraliaDimension.java32
-rw-r--r--src/Java/gtPlusPlus/australia/block/AustraliaContentLoader.java52
-rw-r--r--src/Java/gtPlusPlus/australia/block/BlockAustraliaPortal.java403
-rw-r--r--src/Java/gtPlusPlus/australia/block/BlockAustraliaSand.java25
-rw-r--r--src/Java/gtPlusPlus/australia/block/BlockAustraliaTopSoil.java75
-rw-r--r--src/Java/gtPlusPlus/australia/block/BlockDarkWorldPortalFrame.java30
-rw-r--r--src/Java/gtPlusPlus/australia/chunk/ChunkProviderAustralia.java464
-rw-r--r--src/Java/gtPlusPlus/australia/dimension/Dimension_Australia.java23
-rw-r--r--src/Java/gtPlusPlus/australia/gen/gt/WorldGen_Australia_Ores.java327
-rw-r--r--src/Java/gtPlusPlus/australia/gen/gt/WorldGen_GT_Australia.java49
-rw-r--r--src/Java/gtPlusPlus/australia/gen/gt/WorldGen_GT_Australia_Base.java471
-rw-r--r--src/Java/gtPlusPlus/australia/gen/gt/WorldGen_GT_Australia_Ore_Layer.java511
-rw-r--r--src/Java/gtPlusPlus/australia/item/ItemAustraliaPortalTrigger.java100
-rw-r--r--src/Java/gtPlusPlus/australia/item/ItemBlockAustralia.java39
-rw-r--r--src/Java/gtPlusPlus/australia/world/AustraliaPortalPosition.java14
-rw-r--r--src/Java/gtPlusPlus/australia/world/AustraliaTeleporterDimensionMod.java470
-rw-r--r--src/Java/gtPlusPlus/australia/world/AustraliaWorldChunkManager.java257
-rw-r--r--src/Java/gtPlusPlus/australia/world/AustraliaWorldProvider.java80
-rw-r--r--src/Java/gtPlusPlus/australia/world/AustraliaWorldType.java59
23 files changed, 4310 insertions, 0 deletions
diff --git a/src/Java/gtPlusPlus/australia/GTplusplus_Australia.java b/src/Java/gtPlusPlus/australia/GTplusplus_Australia.java
new file mode 100644
index 0000000000..954c25e897
--- /dev/null
+++ b/src/Java/gtPlusPlus/australia/GTplusplus_Australia.java
@@ -0,0 +1,111 @@
+package gtPlusPlus.australia;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import cpw.mods.fml.common.Mod;
+import cpw.mods.fml.common.Mod.EventHandler;
+import cpw.mods.fml.common.event.*;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.australia.biome.Biome_AustralianDesert;
+import gtPlusPlus.australia.biome.Biome_AustralianDesert2;
+import gtPlusPlus.australia.block.AustraliaContentLoader;
+import gtPlusPlus.australia.dimension.Dimension_Australia;
+import gtPlusPlus.australia.gen.gt.WorldGen_Australia_Ores;
+import gtPlusPlus.australia.gen.gt.WorldGen_GT_Australia_Base;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.lib.CORE.Australia;
+import net.minecraftforge.common.DimensionManager;
+
+@MCVersion(value = "1.7.10")
+@Mod(modid = Australia.MODID, name = Australia.NAME, version = Australia.VERSION, dependencies = "required-after:Forge; after:dreamcraft; after:IC2; after:ihl; required-after:gregtech; required-after:miscutils;")
+public class GTplusplus_Australia implements ActionListener {
+
+ //Mod Instance
+ @Mod.Instance(Australia.MODID)
+ public static GTplusplus_Australia instance;
+
+ // Dark World Handler
+ protected static volatile Biome_AustralianDesert Australian_Desert_Biome_1;
+ protected static volatile Biome_AustralianDesert2 Australian_Desert_Biome_2;
+ protected static volatile Dimension_Australia Australia_Dimension;
+ public static int globalAustraliaPortalSpawnTimer = 0;
+
+ // Pre-Init
+ @Mod.EventHandler
+ public void preInit(final FMLPreInitializationEvent event) {
+ Logger.INFO("Loading " + Australia.MODID + " V" + Australia.VERSION);
+
+ //Setup
+ setVars(event);
+
+ Australia_Dimension = new Dimension_Australia();
+ Australia_Dimension.instance = instance;
+
+ Australian_Desert_Biome_1 = (new Biome_AustralianDesert());
+ Australian_Desert_Biome_2 = (new Biome_AustralianDesert2());
+
+ Australian_Desert_Biome_1.instance = instance;
+ Australian_Desert_Biome_2.instance = instance;
+
+ Australian_Desert_Biome_1.preInit(event);
+ Australian_Desert_Biome_2.preInit(event);
+
+ }
+
+ @EventHandler
+ public void load(final FMLInitializationEvent e) {
+ Logger.INFO("Begin resource allocation for " + Australia.MODID + " V" +Australia.VERSION);
+
+ //Load World and Biome
+ GameRegistry.registerWorldGenerator(new WorldGen_GT_Australia_Base(), Short.MAX_VALUE);
+
+ Australian_Desert_Biome_1.load();
+ Australian_Desert_Biome_2.load();
+
+ Australia_Dimension.load();
+
+ }
+
+ public static synchronized void GenerateOreMaterials() {
+
+ }
+
+ protected synchronized void setVars(FMLPreInitializationEvent event){
+ if (DimensionManager.isDimensionRegistered(Dimension_Australia.DIMID)){
+ Dimension_Australia.DIMID = DimensionManager.getNextFreeDimId();
+ }
+
+ /*
+ * Set World Generation Values
+ */
+ WorldGen_Australia_Ores.generateValidOreVeins();
+ WorldGen_GT_Australia_Base.oreveinPercentage = 32;
+ WorldGen_GT_Australia_Base.oreveinAttempts = 16;
+ WorldGen_GT_Australia_Base.oreveinMaxPlacementAttempts = 2;
+ if (CORE.DEBUG || CORE.DEVENV){
+ WorldGen_GT_Australia_Base.debugWorldGen = true;
+ }
+ AustraliaContentLoader.run();
+ }
+
+ @EventHandler
+ public void serverLoad(FMLServerStartingEvent event) {
+ Australian_Desert_Biome_1.serverLoad(event);
+ Australian_Desert_Biome_2.serverLoad(event);
+ }
+
+ @EventHandler
+ public static void postInit(final FMLPostInitializationEvent e) {
+ Logger.INFO("Finished loading Australia plugin for GT++.");
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
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--;
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert2.java b/src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert2.java
new file mode 100644
index 0000000000..6f38fe5cd8
--- /dev/null
+++ b/src/Java/gtPlusPlus/australia/biome/Biome_AustralianDesert2.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_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() {
+ 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) &&