From 311ab89f93558233a40079f7cb16605b141b5346 Mon Sep 17 00:00:00 2001 From: Johann Bernhardt Date: Sun, 12 Dec 2021 19:38:06 +0100 Subject: Move sources and resources --- .../gtPlusPlus/australia/GTplusplus_Australia.java | 158 ++++ .../australia/biome/CustomDecorator.java | 355 +++++++++ .../australia/biome/GenLayerAustralia.java | 32 + .../biome/GenLayerBiomesAustraliaDimension.java | 47 ++ .../biome/type/Biome_AustralianDesert.java | 355 +++++++++ .../biome/type/Biome_AustralianDesert2.java | 355 +++++++++ .../biome/type/Biome_AustralianDesert_Ex.java | 65 ++ .../biome/type/Biome_AustralianForest.java | 198 +++++ .../biome/type/Biome_AustralianOcean.java | 52 ++ .../biome/type/Biome_AustralianOutback.java | 381 ++++++++++ .../biome/type/Biome_AustralianPlains.java | 122 +++ .../australia/block/AustraliaContentLoader.java | 67 ++ .../australia/block/BlockAustraliaPortal.java | 403 ++++++++++ .../australia/block/BlockAustraliaSand.java | 25 + .../australia/block/BlockAustraliaTopSoil.java | 76 ++ .../australia/block/BlockDarkWorldPortalFrame.java | 30 + .../australia/chunk/ChunkProviderAustralia.java | 821 +++++++++++++++++++++ .../australia/dimension/Dimension_Australia.java | 23 + .../entity/model/ModelAustralianSpider.java | 148 ++++ .../australia/entity/model/ModelBoar.java | 20 + .../australia/entity/model/ModelDingo.java | 168 +++++ .../australia/entity/model/ModelOctopus.java | 67 ++ .../entity/render/RenderAustralianSpider.java | 84 +++ .../australia/entity/render/RenderBoar.java | 64 ++ .../australia/entity/render/RenderDingo.java | 90 +++ .../australia/entity/render/RenderOctopus.java | 120 +++ .../entity/type/EntityAustralianSpiderBase.java | 41 + .../australia/entity/type/EntityBoar.java | 220 ++++++ .../australia/entity/type/EntityDingo.java | 536 ++++++++++++++ .../australia/entity/type/EntityOctopus.java | 228 ++++++ .../australia/gen/gt/WorldGen_Australia_Ores.java | 294 ++++++++ .../australia/gen/gt/WorldGen_GT_Australia.java | 48 ++ .../gen/gt/WorldGen_GT_Australia_Base.java | 471 ++++++++++++ .../gen/gt/WorldGen_GT_Australia_Ore_Layer.java | 511 +++++++++++++ .../australia/gen/map/MapGenExtendedVillage.java | 265 +++++++ .../australia/gen/map/MapGenLargeRavine.java | 217 ++++++ .../gen/map/component/AustraliaComponent.java | 196 +++++ .../australia/gen/map/component/ComponentHut.java | 474 ++++++++++++ .../gen/map/component/ComponentShack.java | 279 +++++++ .../gen/map/structure/StructureManager.java | 20 + .../map/structure/type/ComponentVillageBank.java | 175 +++++ .../australia/gen/world/WorldGenAustralianOre.java | 87 +++ .../gen/world/WorldGenAustralianTrees.java | 250 +++++++ .../australia/item/ItemAustraliaPortalTrigger.java | 100 +++ .../australia/item/ItemBlockAustralia.java | 39 + .../australia/world/AustraliaPortalPosition.java | 14 + .../world/AustraliaTeleporterDimensionMod.java | 470 ++++++++++++ .../world/AustraliaWorldChunkManager.java | 257 +++++++ .../australia/world/AustraliaWorldGenerator.java | 142 ++++ .../australia/world/AustraliaWorldProvider.java | 80 ++ .../australia/world/AustraliaWorldType.java | 59 ++ 51 files changed, 9799 insertions(+) create mode 100644 src/main/java/gtPlusPlus/australia/GTplusplus_Australia.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/CustomDecorator.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/GenLayerAustralia.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/GenLayerBiomesAustraliaDimension.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert2.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianDesert_Ex.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianForest.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOcean.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianOutback.java create mode 100644 src/main/java/gtPlusPlus/australia/biome/type/Biome_AustralianPlains.java create mode 100644 src/main/java/gtPlusPlus/australia/block/AustraliaContentLoader.java create mode 100644 src/main/java/gtPlusPlus/australia/block/BlockAustraliaPortal.java create mode 100644 src/main/java/gtPlusPlus/australia/block/BlockAustraliaSand.java create mode 100644 src/main/java/gtPlusPlus/australia/block/BlockAustraliaTopSoil.java create mode 100644 src/main/java/gtPlusPlus/australia/block/BlockDarkWorldPortalFrame.java create mode 100644 src/main/java/gtPlusPlus/australia/chunk/ChunkProviderAustralia.java create mode 100644 src/main/java/gtPlusPlus/australia/dimension/Dimension_Australia.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/model/ModelAustralianSpider.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/model/ModelBoar.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/model/ModelDingo.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/model/ModelOctopus.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/render/RenderAustralianSpider.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/render/RenderBoar.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/render/RenderDingo.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/render/RenderOctopus.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/type/EntityAustralianSpiderBase.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/type/EntityBoar.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/type/EntityDingo.java create mode 100644 src/main/java/gtPlusPlus/australia/entity/type/EntityOctopus.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/gt/WorldGen_Australia_Ores.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/gt/WorldGen_GT_Australia.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/gt/WorldGen_GT_Australia_Base.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/gt/WorldGen_GT_Australia_Ore_Layer.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/map/MapGenExtendedVillage.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/map/MapGenLargeRavine.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/map/component/AustraliaComponent.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/map/component/ComponentHut.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/map/component/ComponentShack.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/map/structure/StructureManager.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/map/structure/type/ComponentVillageBank.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/world/WorldGenAustralianOre.java create mode 100644 src/main/java/gtPlusPlus/australia/gen/world/WorldGenAustralianTrees.java create mode 100644 src/main/java/gtPlusPlus/australia/item/ItemAustraliaPortalTrigger.java create mode 100644 src/main/java/gtPlusPlus/australia/item/ItemBlockAustralia.java create mode 100644 src/main/java/gtPlusPlus/australia/world/AustraliaPortalPosition.java create mode 100644 src/main/java/gtPlusPlus/australia/world/AustraliaTeleporterDimensionMod.java create mode 100644 src/main/java/gtPlusPlus/australia/world/AustraliaWorldChunkManager.java create mode 100644 src/main/java/gtPlusPlus/australia/world/AustraliaWorldGenerator.java create mode 100644 src/main/java/gtPlusPlus/australia/world/AustraliaWorldProvider.java create mode 100644 src/main/java/gtPlusPlus/australia/world/AustraliaWorldType.java (limited to 'src/main/java/gtPlusPlus/australia') diff --git a/src/main/java/gtPlusPlus/australia/GTplusplus_Australia.java b/src/main/java/gtPlusPlus/australia/GTplusplus_Australia.java new file mode 100644 index 0000000000..9a16ad1785 --- /dev/null +++ b/src/main/java/gtPlusPlus/australia/GTplusplus_Australia.java @@ -0,0 +1,158 @@ +package gtPlusPlus.australia; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; +import gtPlusPlus.api.objects.Logger; +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 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.australia.gen.map.structure.StructureManager; +import gtPlusPlus.australia.world.AustraliaWorldGenerator; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.CORE.Australia; +import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.xmod.gregtech.api.util.GTPP_Config; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.config.Configuration; + +@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; + public static GTPP_Config sCustomWorldgenFile = null; + + // Dark World Handler + //protected static volatile Biome_AustralianDesert Australian_Desert_Biome_1; + //protected static volatile Biome_AustralianDesert2 Australian_Desert_Biome_2; + + public static volatile Biome_AustralianDesert_Ex Australian_Desert_Biome_3; + public static volatile Biome_AustralianForest Australian_Forest_Biome; + public static volatile Biome_AustralianOcean Australian_Ocean_Biome; + public static volatile Biome_AustralianOutback Australian_Outback_Biome; + public static volatile Biome_AustralianPlains Australian_Plains_Biome; + + public static volatile Dimension_Australia Australia_Dimension; + public static AustraliaWorldGenerator Australia_World_Generator; + 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); + + + Australian_Desert_Biome_3 = (Biome_AustralianDesert_Ex.biome); + Australian_Forest_Biome = (Biome_AustralianForest.biome); + Australian_Ocean_Biome = (Biome_AustralianOcean.biome); + Australian_Outback_Biome = (Biome_AustralianOutback.biome); + Australian_Plains_Biome = Biome_AustralianPlains.biome; + + //Load Villages + StructureManager.registerVillageComponents(); + + setupWorldGenerator(); + + //Load/Set Custom Ore Gen + sCustomWorldgenFile = new GTPP_Config(new Configuration(new File(new File(event.getModConfigurationDirectory(), "GTplusplus"), "Australia.cfg"))); + + } + + @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(); + Australian_Desert_Biome_3.load(); + Australian_Forest_Biome.load(); + Australian_Ocean_Biome.load(); + Australian_Outback_Biome.load(); + Australian_Plains_Biome.load(); + + Australia_Dimension.load(); + + } + + public static synchronized void GenerateOreMaterials() { + + } + + protected synchronized void setVars(FMLPreInitializationEvent event){ + + sCustomWorldgenFile = new GTPP_Config(new Configuration(new File(new File(event.getModConfigurationDirectory(), "GTplusplus"), "Australia.cfg"))); + + if (DimensionManager.isDimensionRegistered(Dimension_Australia.DIMID)){ + Dimension_Australia.DIMID = DimensionManager.getNextFreeDimId(); + } + + /* + * Set World Generation Values + */ + WorldGen_Australia_Ores.generateValidOreVeins(); + WorldGen_GT_Australia_Base.oreveinPercentage = 16; + WorldGen_GT_Australia_Base.oreveinAttempts = 16; + WorldGen_GT_Australia_Base.oreveinMaxPlacementAttempts = 2; + if (CORE_Preloader.DEBUG_MODE || CORE.DEVENV){ + WorldGen_GT_Australia_Base.debugWorldGen = true; + } + AustraliaContentLoader.run(); + } + + @EventHandler + public void serverLoad(FMLServerStartingEvent event) { + Australia_World_Generator.initiate(); + } + + @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 + + } + + private void setupWorldGenerator() { + Logger.INFO("Registering World Generator for Australia."); + Australia_World_Generator = new AustraliaWorldGenerator(); + GameRegistry.registerWorldGenerator(Australia_World_Generator, 0); + } + +} 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 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 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