diff options
Diffstat (limited to 'src/Java/binnie/extrabees/worldgen')
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; + } +} |