aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/extrabees/worldgen
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/binnie/extrabees/worldgen')
-rw-r--r--src/Java/binnie/extrabees/worldgen/BlockExtraBeeHive.java109
-rw-r--r--src/Java/binnie/extrabees/worldgen/EnumHiveType.java14
-rw-r--r--src/Java/binnie/extrabees/worldgen/HiveDrop.java65
-rw-r--r--src/Java/binnie/extrabees/worldgen/ItemBeehive.java37
-rw-r--r--src/Java/binnie/extrabees/worldgen/MaterialBeehive.java20
-rw-r--r--src/Java/binnie/extrabees/worldgen/ModuleGeneration.java85
-rw-r--r--src/Java/binnie/extrabees/worldgen/WorldGenHiveNether.java33
-rw-r--r--src/Java/binnie/extrabees/worldgen/WorldGenHiveRock.java27
-rw-r--r--src/Java/binnie/extrabees/worldgen/WorldGenHiveWater.java31
9 files changed, 421 insertions, 0 deletions
diff --git a/src/Java/binnie/extrabees/worldgen/BlockExtraBeeHive.java b/src/Java/binnie/extrabees/worldgen/BlockExtraBeeHive.java
new file mode 100644
index 0000000000..1923c93283
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/BlockExtraBeeHive.java
@@ -0,0 +1,109 @@
+package binnie.extrabees.worldgen;
+
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.apiculture.IHiveDrop;
+import forestry.api.core.Tabs;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+public class BlockExtraBeeHive
+ extends Block
+{
+ IIcon[][] icons;
+
+ public BlockExtraBeeHive()
+ {
+ super(ExtraBees.materialBeehive);
+ setLightLevel(0.2F);
+ setHardness(1.0F);
+ setTickRandomly(true);
+ setBlockName("hive");
+
+ setCreativeTab(Tabs.tabApiculture);
+ }
+
+ public String getUnlocalizedName(ItemStack par1ItemStack)
+ {
+ return "extrabees.block.hive." + par1ItemStack.getItemDamage();
+ }
+
+ public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List itemList)
+ {
+ for (int i = 0; i < 4; i++) {
+ itemList.add(new ItemStack(this, 1, i));
+ }
+ }
+
+ public IIcon getIcon(int side, int metadata)
+ {
+ if (metadata >= EnumHiveType.values().length) {
+ return null;
+ }
+ if (side < 2) {
+ return this.icons[metadata][1];
+ }
+ return this.icons[metadata][0];
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister register)
+ {
+ this.icons = new IIcon[EnumHiveType.values().length][2];
+ for (EnumHiveType hive : EnumHiveType.values())
+ {
+ this.icons[hive.ordinal()][0] = ExtraBees.proxy.getIcon(register, "hive/" + hive.toString().toLowerCase() + ".0");
+ this.icons[hive.ordinal()][1] = ExtraBees.proxy.getIcon(register, "hive/" + hive.toString().toLowerCase() + ".1");
+ }
+ }
+
+ public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune)
+ {
+ ArrayList<ItemStack> ret = new ArrayList();
+
+ List<IHiveDrop> dropList = EnumHiveType.values()[metadata].drops;
+
+ Collections.shuffle(dropList);
+
+ int tries = 0;
+ boolean hasPrincess = false;
+ while ((tries <= 10) && (!hasPrincess))
+ {
+ tries++;
+ for (IHiveDrop drop : dropList) {
+ if (world.rand.nextInt(100) < drop.getChance(world, x, y, z))
+ {
+ ret.add(drop.getPrincess(world, x, y, z, fortune));
+ hasPrincess = true;
+ break;
+ }
+ }
+ }
+ for (IHiveDrop drop : dropList) {
+ if (world.rand.nextInt(100) < drop.getChance(world, x, y, z))
+ {
+ ret.addAll(drop.getDrones(world, x, y, z, fortune));
+ break;
+ }
+ }
+ for (IHiveDrop drop : dropList) {
+ if (world.rand.nextInt(100) < drop.getChance(world, x, y, z))
+ {
+ ret.addAll(drop.getAdditional(world, x, y, z, fortune));
+ break;
+ }
+ }
+ return ret;
+ }
+}
diff --git a/src/Java/binnie/extrabees/worldgen/EnumHiveType.java b/src/Java/binnie/extrabees/worldgen/EnumHiveType.java
new file mode 100644
index 0000000000..d115afb24f
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/EnumHiveType.java
@@ -0,0 +1,14 @@
+package binnie.extrabees.worldgen;
+
+import forestry.api.apiculture.IHiveDrop;
+import java.util.ArrayList;
+import java.util.List;
+
+public enum EnumHiveType
+{
+ Water, Rock, Nether, Marble;
+
+ public List<IHiveDrop> drops = new ArrayList();
+
+ private EnumHiveType() {}
+}
diff --git a/src/Java/binnie/extrabees/worldgen/HiveDrop.java b/src/Java/binnie/extrabees/worldgen/HiveDrop.java
new file mode 100644
index 0000000000..10d8db4c26
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/HiveDrop.java
@@ -0,0 +1,65 @@
+package binnie.extrabees.worldgen;
+
+import binnie.Binnie;
+import binnie.core.genetics.ManagerGenetics;
+import forestry.api.apiculture.EnumBeeType;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.apiculture.IHiveDrop;
+import forestry.api.genetics.IAllele;
+import java.util.ArrayList;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class HiveDrop
+ implements IHiveDrop
+{
+ private IAllele[] template;
+ private ArrayList<ItemStack> additional = new ArrayList();
+ private int chance;
+
+ public HiveDrop(IAlleleBeeSpecies species, int chance)
+ {
+ this(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()), new ItemStack[0], chance);
+ }
+
+ public HiveDrop(IAllele[] template, ItemStack[] bonus, int chance)
+ {
+ if (template == null) {
+ template = Binnie.Genetics.getBeeRoot().getDefaultTemplate();
+ }
+ this.template = template;
+ this.chance = chance;
+ for (ItemStack stack : bonus) {
+ this.additional.add(stack);
+ }
+ }
+
+ public ItemStack getPrincess(World world, int x, int y, int z, int fortune)
+ {
+ return Binnie.Genetics.getBeeRoot().getMemberStack(Binnie.Genetics.getBeeRoot().getBee(world, Binnie.Genetics.getBeeRoot().templateAsGenome(this.template)), EnumBeeType.PRINCESS.ordinal());
+ }
+
+ public ArrayList<ItemStack> getDrones(World world, int x, int y, int z, int fortune)
+ {
+ ArrayList<ItemStack> ret = new ArrayList();
+ ret.add(Binnie.Genetics.getBeeRoot().getMemberStack(Binnie.Genetics.getBeeRoot().templateAsIndividual(this.template), EnumBeeType.DRONE.ordinal()));
+
+
+ return ret;
+ }
+
+ public ArrayList<ItemStack> getAdditional(World world, int x, int y, int z, int fortune)
+ {
+ ArrayList<ItemStack> ret = new ArrayList();
+ for (ItemStack stack : this.additional) {
+ ret.add(stack.copy());
+ }
+ return ret;
+ }
+
+ public int getChance(World world, int x, int y, int z)
+ {
+ return this.chance;
+ }
+}
diff --git a/src/Java/binnie/extrabees/worldgen/ItemBeehive.java b/src/Java/binnie/extrabees/worldgen/ItemBeehive.java
new file mode 100644
index 0000000000..e853a055b3
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/ItemBeehive.java
@@ -0,0 +1,37 @@
+package binnie.extrabees.worldgen;
+
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+
+public class ItemBeehive
+ extends ItemBlock
+{
+ public ItemBeehive(Block block)
+ {
+ super(block);
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(CreativeTabs.tabBlock);
+ }
+
+ public int getMetadata(int i)
+ {
+ return i;
+ }
+
+ public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List itemList)
+ {
+ for (int i = 0; i < 4; i++) {
+ itemList.add(new ItemStack(this, 1, i));
+ }
+ }
+
+ public String getItemStackDisplayName(ItemStack itemStack)
+ {
+ return EnumHiveType.values()[itemStack.getItemDamage()].toString() + " Hive";
+ }
+}
diff --git a/src/Java/binnie/extrabees/worldgen/MaterialBeehive.java b/src/Java/binnie/extrabees/worldgen/MaterialBeehive.java
new file mode 100644
index 0000000000..b94960c494
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/MaterialBeehive.java
@@ -0,0 +1,20 @@
+package binnie.extrabees.worldgen;
+
+import net.minecraft.block.material.MapColor;
+import net.minecraft.block.material.Material;
+
+public class MaterialBeehive
+ extends Material
+{
+ public MaterialBeehive()
+ {
+ super(MapColor.stoneColor);
+ setRequiresTool();
+ setImmovableMobility();
+ }
+
+ public boolean isOpaque()
+ {
+ return true;
+ }
+}
diff --git a/src/Java/binnie/extrabees/worldgen/ModuleGeneration.java b/src/Java/binnie/extrabees/worldgen/ModuleGeneration.java
new file mode 100644
index 0000000000..8708ca7bf7
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/ModuleGeneration.java
@@ -0,0 +1,85 @@
+package binnie.extrabees.worldgen;
+
+import binnie.core.IInitializable;
+import binnie.core.genetics.ForestryAllele.BeeSpecies;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.config.ConfigurationMain;
+import binnie.extrabees.genetics.ExtraBeesSpecies;
+import buildcraft.api.core.BuildCraftAPI;
+import cpw.mods.fml.common.IWorldGenerator;
+import cpw.mods.fml.common.registry.GameRegistry;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import net.minecraft.block.Block;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class ModuleGeneration
+ implements IWorldGenerator, IInitializable
+{
+ static int waterRate = 2;
+ static int rockRate = 2;
+ static int netherRate = 2;
+ static int marbleRate = 2;
+
+ public void preInit()
+ {
+ ExtraBees.materialBeehive = new MaterialBeehive();
+ ExtraBees.hive = new BlockExtraBeeHive();
+ GameRegistry.registerBlock(ExtraBees.hive, ItemBeehive.class, "hive");
+ }
+
+ public void init()
+ {
+ waterRate = ConfigurationMain.waterHiveRate;
+ rockRate = ConfigurationMain.rockHiveRate;
+ netherRate = ConfigurationMain.netherHiveRate;
+ GameRegistry.registerWorldGenerator(new ModuleGeneration(), 0);
+ if (!ConfigurationMain.canQuarryMineHives) {
+ BuildCraftAPI.softBlocks.add(ExtraBees.hive);
+ }
+ }
+
+ public void postInit()
+ {
+ EnumHiveType.Water.drops.add(new HiveDrop(ExtraBeesSpecies.WATER, 80));
+ EnumHiveType.Water.drops.add(new HiveDrop(ForestryAllele.BeeSpecies.Valiant.getAllele(), 3));
+ EnumHiveType.Rock.drops.add(new HiveDrop(ExtraBeesSpecies.ROCK, 80));
+ EnumHiveType.Rock.drops.add(new HiveDrop(ForestryAllele.BeeSpecies.Valiant.getAllele(), 3));
+ EnumHiveType.Nether.drops.add(new HiveDrop(ExtraBeesSpecies.BASALT, 80));
+ EnumHiveType.Nether.drops.add(new HiveDrop(ForestryAllele.BeeSpecies.Valiant.getAllele(), 3));
+
+ ExtraBees.hive.setHarvestLevel("scoop", 0, 0);
+ ExtraBees.hive.setHarvestLevel("scoop", 0, 1);
+ ExtraBees.hive.setHarvestLevel("scoop", 0, 2);
+ ExtraBees.hive.setHarvestLevel("scoop", 0, 3);
+ }
+
+ public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
+ {
+ chunkX <<= 4;
+ chunkZ <<= 4;
+ for (int i = 0; i < waterRate; i++)
+ {
+ int randPosX = chunkX + rand.nextInt(16);
+ int randPosY = rand.nextInt(50) + 20;
+ int randPosZ = chunkZ + rand.nextInt(16);
+ new WorldGenHiveWater().generate(world, rand, randPosX, randPosY, randPosZ);
+ }
+ for (int i = 0; i < rockRate; i++)
+ {
+ int randPosX = chunkX + rand.nextInt(16);
+ int randPosY = rand.nextInt(50) + 20;
+ int randPosZ = chunkZ + rand.nextInt(16);
+ new WorldGenHiveRock().generate(world, rand, randPosX, randPosY, randPosZ);
+ }
+ for (int i = 0; i < netherRate; i++)
+ {
+ int randPosX = chunkX + rand.nextInt(16);
+ int randPosY = rand.nextInt(50) + 20;
+ int randPosZ = chunkZ + rand.nextInt(16);
+ new WorldGenHiveNether().generate(world, rand, randPosX, randPosY, randPosZ);
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/worldgen/WorldGenHiveNether.java b/src/Java/binnie/extrabees/worldgen/WorldGenHiveNether.java
new file mode 100644
index 0000000000..4585adde12
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/WorldGenHiveNether.java
@@ -0,0 +1,33 @@
+package binnie.extrabees.worldgen;
+
+import binnie.extrabees.ExtraBees;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.biome.WorldChunkManager;
+import net.minecraft.world.gen.feature.WorldGenerator;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeDictionary.Type;
+
+public class WorldGenHiveNether
+ extends WorldGenerator
+{
+ public boolean generate(World world, Random random, int i, int j, int k)
+ {
+ BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(i, k);
+ if (!BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.NETHER)) {
+ return true;
+ }
+ if (embedInWall(world, Blocks.netherrack, i, j, k)) {
+ world.setBlock(i, j, k, ExtraBees.hive, 2, 0);
+ }
+ return true;
+ }
+
+ public boolean embedInWall(World world, Block blockID, int i, int j, int k)
+ {
+ return (world.getBlock(i, j, k) == blockID) && (world.getBlock(i, j + 1, k) == blockID) && (world.getBlock(i, j - 1, k) == blockID) && ((world.isAirBlock(i + 1, j, k)) || (world.isAirBlock(i - 1, j, k)) || (world.isAirBlock(i, j, k + 1)) || (world.isAirBlock(i, j, k - 1)));
+ }
+}
diff --git a/src/Java/binnie/extrabees/worldgen/WorldGenHiveRock.java b/src/Java/binnie/extrabees/worldgen/WorldGenHiveRock.java
new file mode 100644
index 0000000000..e6598fdcb7
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/WorldGenHiveRock.java
@@ -0,0 +1,27 @@
+package binnie.extrabees.worldgen;
+
+import binnie.extrabees.ExtraBees;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.biome.WorldChunkManager;
+import net.minecraft.world.gen.feature.WorldGenerator;
+
+public class WorldGenHiveRock
+ extends WorldGenerator
+{
+ public boolean generate(World world, Random random, int i, int j, int k)
+ {
+ BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(i, k);
+ Block block = world.getBlock(i, j, k);
+ if (block == null) {
+ return true;
+ }
+ if (block.isReplaceableOreGen(world, i, j, k, Blocks.stone)) {
+ world.setBlock(i, j, k, ExtraBees.hive, 1, 0);
+ }
+ return true;
+ }
+}
diff --git a/src/Java/binnie/extrabees/worldgen/WorldGenHiveWater.java b/src/Java/binnie/extrabees/worldgen/WorldGenHiveWater.java
new file mode 100644
index 0000000000..f672945288
--- /dev/null
+++ b/src/Java/binnie/extrabees/worldgen/WorldGenHiveWater.java
@@ -0,0 +1,31 @@
+package binnie.extrabees.worldgen;
+
+import binnie.extrabees.ExtraBees;
+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.BiomeGenBase;
+import net.minecraft.world.biome.WorldChunkManager;
+import net.minecraft.world.gen.feature.WorldGenerator;
+
+public class WorldGenHiveWater
+ extends WorldGenerator
+{
+ public boolean generate(World world, Random random, int i, int j, int k)
+ {
+ BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(i, k);
+
+ int i1 = i + random.nextInt(8) - random.nextInt(8);
+ int j1 = j + random.nextInt(4) - random.nextInt(4);
+ int k1 = k + random.nextInt(8) - random.nextInt(8);
+ if ((world.getBlock(i1, j1, k1) != Blocks.water) && (world.getBlock(i1, j1, k1) != Blocks.water)) {
+ return false;
+ }
+ if ((world.getBlock(i1, j1 - 1, k1).getMaterial() == Material.sand) || (world.getBlock(i1, j1 - 1, k1).getMaterial() == Material.clay) || (world.getBlock(i1, j1 - 1, k1).getMaterial() == Material.ground) || (world.getBlock(i1, j1 - 1, k1).getMaterial() == Material.rock)) {
+ world.setBlock(i1, j1, k1, ExtraBees.hive, 0, 0);
+ }
+ return true;
+ }
+}