aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/extrabees/genetics/effect
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/binnie/extrabees/genetics/effect')
-rw-r--r--src/Java/binnie/extrabees/genetics/effect/BlockEctoplasm.java42
-rw-r--r--src/Java/binnie/extrabees/genetics/effect/EntityBeeLightning.java68
-rw-r--r--src/Java/binnie/extrabees/genetics/effect/ExtraBeesEffect.java585
-rw-r--r--src/Java/binnie/extrabees/genetics/effect/FireworkCreator.java83
4 files changed, 778 insertions, 0 deletions
diff --git a/src/Java/binnie/extrabees/genetics/effect/BlockEctoplasm.java b/src/Java/binnie/extrabees/genetics/effect/BlockEctoplasm.java
new file mode 100644
index 0000000000..2baf9ba2f1
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/effect/BlockEctoplasm.java
@@ -0,0 +1,42 @@
+package binnie.extrabees.genetics.effect;
+
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import java.util.Random;
+import net.minecraft.block.BlockWeb;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+
+public class BlockEctoplasm
+ extends BlockWeb
+{
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister register)
+ {
+ this.blockIcon = ExtraBees.proxy.getIcon(register, "ectoplasm");
+ }
+
+ public BlockEctoplasm()
+ {
+ setLightOpacity(1);
+ setHardness(0.5F);
+ }
+
+ public int quantityDropped(Random rand)
+ {
+ return rand.nextInt(5) == 0 ? 1 : 0;
+ }
+
+ public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_)
+ {
+ return Items.slime_ball;
+ }
+
+ public String getUnlocalizedName()
+ {
+ return "extrabees.block.ectoplasm";
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/effect/EntityBeeLightning.java b/src/Java/binnie/extrabees/genetics/effect/EntityBeeLightning.java
new file mode 100644
index 0000000000..eef4f27a6b
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/effect/EntityBeeLightning.java
@@ -0,0 +1,68 @@
+package binnie.extrabees.genetics.effect;
+
+import java.util.List;
+import java.util.Random;
+import net.minecraft.block.BlockFire;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.effect.EntityLightningBolt;
+import net.minecraft.init.Blocks;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.MathHelper;
+import net.minecraft.world.World;
+
+public class EntityBeeLightning
+ extends EntityLightningBolt
+{
+ int lightningState = 2;
+ int boltLivingTime;
+
+ public EntityBeeLightning(World par1World, double par2, double par4, double par6)
+ {
+ super(par1World, par2, par4, par6);
+ this.boltLivingTime = (this.rand.nextInt(3) + 1);
+ }
+
+ public void onUpdate()
+ {
+ onEntityUpdate();
+
+ this.lightningState -= 1;
+ if (this.lightningState < 0) {
+ if (this.boltLivingTime == 0)
+ {
+ setDead();
+ }
+ else if (this.lightningState < -this.rand.nextInt(10))
+ {
+ this.boltLivingTime -= 1;
+ this.lightningState = 1;
+ this.boltVertex = this.rand.nextLong();
+ if ((!this.worldObj.isRemote) && (this.worldObj.doChunksNearChunkExist(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ), 10)))
+ {
+ int i = MathHelper.floor_double(this.posX);
+ int j = MathHelper.floor_double(this.posY);
+ int k = MathHelper.floor_double(this.posZ);
+ if ((this.worldObj.getBlock(i, j, k) == null) && (Blocks.fire.canPlaceBlockAt(this.worldObj, i, j, k))) {
+ this.worldObj.setBlock(i, j, k, Blocks.fire);
+ }
+ }
+ }
+ }
+ if (this.lightningState >= 0) {
+ if (this.worldObj.isRemote)
+ {
+ this.worldObj.lastLightningBolt = 2;
+ }
+ else
+ {
+ double d0 = 3.0D;
+ List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(this.posX - d0, this.posY - d0, this.posZ - d0, this.posX + d0, this.posY + 6.0D + d0, this.posZ + d0));
+ for (int l = 0; l < list.size(); l++)
+ {
+ Entity entity = (Entity)list.get(l);
+ entity.onStruckByLightning(this);
+ }
+ }
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/effect/ExtraBeesEffect.java b/src/Java/binnie/extrabees/genetics/effect/ExtraBeesEffect.java
new file mode 100644
index 0000000000..b36091ce91
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/effect/ExtraBeesEffect.java
@@ -0,0 +1,585 @@
+package binnie.extrabees.genetics.effect;
+
+import binnie.Binnie;
+import binnie.core.liquid.ManagerLiquid;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.genetics.ExtraBeesFlowers;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cofh.api.energy.IEnergyReceiver;
+import forestry.api.apiculture.IAlleleBeeEffect;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IArmorApiarist;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAlleleRegistry;
+import forestry.api.genetics.IEffectData;
+import forestry.apiculture.proxy.ProxyApiculture;
+import forestry.plugins.PluginApiculture;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityList;
+import net.minecraft.entity.EntityLiving;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.item.EntityFireworkRocket;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.projectile.EntitySmallFireball;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemDye;
+import net.minecraft.item.ItemStack;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.FoodStats;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldServer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public enum ExtraBeesEffect
+ implements IAlleleBeeEffect
+{
+ ECTOPLASM, ACID, SPAWN_ZOMBIE, SPAWN_SKELETON, SPAWN_CREEPER, LIGHTNING, RADIOACTIVE, METEOR, HUNGER, FOOD, BLINDNESS, CONFUSION, FIREWORKS, FESTIVAL, BIRTHDAY, TELEPORT, GRAVITY, THIEF, WITHER, WATER, SLOW, BonemealSapling, BonemealFruit, BonemealMushroom, Power;
+
+ private ExtraBeesEffect()
+ {
+ this.uid = toString().toLowerCase();
+ this.combinable = false;
+ this.dominant = true;
+ }
+
+ String fx = "";
+ public boolean combinable;
+ public boolean dominant;
+ public int id;
+ private String uid;
+ static List<Birthday> birthdays;
+
+ public static void doInit()
+ {
+ BLINDNESS.setFX("blindness");
+ FOOD.setFX("food");
+ GRAVITY.setFX("gravity");
+ THIEF.setFX("gravity");
+ TELEPORT.setFX("gravity");
+ LIGHTNING.setFX("lightning");
+ METEOR.setFX("meteor");
+ RADIOACTIVE.setFX("radioactive");
+ WATER.setFX("water");
+ WITHER.setFX("wither");
+ for (ExtraBeesEffect effect : values()) {
+ effect.register();
+ }
+ }
+
+ private void setFX(String string)
+ {
+ this.fx = ("particles/" + string);
+ }
+
+ public void register()
+ {
+ AlleleManager.alleleRegistry.registerAllele(this);
+ }
+
+ public boolean isCombinable()
+ {
+ return this.combinable;
+ }
+
+ public IEffectData validateStorage(IEffectData storedData)
+ {
+ return storedData;
+ }
+
+ public String getName()
+ {
+ return ExtraBees.proxy.localise("effect." + name().toString().toLowerCase() + ".name");
+ }
+
+ public boolean isDominant()
+ {
+ return this.dominant;
+ }
+
+ public void spawnMob(World world, int x, int y, int z, String name)
+ {
+ if (anyPlayerInRange(world, x, y, z, 16))
+ {
+ double var1 = x + world.rand.nextFloat();
+ double var3 = y + world.rand.nextFloat();
+ double var5 = z + world.rand.nextFloat();
+ world.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D);
+ world.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D);
+ EntityLiving var9 = (EntityLiving)EntityList.createEntityByName(name, world);
+ if (var9 == null) {
+ return;
+ }
+ int var10 = world.getEntitiesWithinAABB(var9.getClass(), AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1).expand(8.0D, 4.0D, 8.0D)).size();
+ if (var10 >= 6) {
+ return;
+ }
+ if (var9 != null)
+ {
+ double var11 = x + (world.rand.nextDouble() - world.rand.nextDouble()) * 4.0D;
+
+
+ double var13 = y + world.rand.nextInt(3) - 1;
+ double var15 = z + (world.rand.nextDouble() - world.rand.nextDouble()) * 4.0D;
+
+
+ var9.setLocationAndAngles(var11, var13, var15, world.rand.nextFloat() * 360.0F, 0.0F);
+ if (var9.getCanSpawnHere())
+ {
+ world.spawnEntityInWorld(var9);
+ world.playAuxSFX(2004, x, y, z, 0);
+ var9.spawnExplosionParticle();
+ }
+ }
+ }
+ }
+
+ private boolean anyPlayerInRange(World world, int x, int y, int z, int distance)
+ {
+ return world.getClosestPlayer(x + 0.5D, y + 0.5D, z + 0.5D, distance) != null;
+ }
+
+ public static void doAcid(World world, int x, int y, int z)
+ {
+ Block block = world.getBlock(x, y, z);
+ if ((block == Blocks.cobblestone) || (block == Blocks.stone)) {
+ world.setBlock(x, y, z, Blocks.gravel, 0, 0);
+ } else if (((block == Blocks.dirt ? 1 : 0) | (block == Blocks.grass ? 1 : 0)) != 0) {
+ world.setBlock(x, y, z, Blocks.sand, 0, 0);
+ }
+ }
+
+ public String getUID()
+ {
+ return "extrabees.effect." + this.uid;
+ }
+
+ public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing)
+ {
+ World world = housing.getWorld();
+ int xHouse = housing.getXCoord();
+ int yHouse = housing.getYCoord();
+ int zHouse = housing.getZCoord();
+
+ int[] area = getModifiedArea(genome, housing);
+
+ int xd = 1 + area[0] / 2;
+ int yd = 1 + area[1] / 2;
+ int zd = 1 + area[2] / 2;
+ int x1 = xHouse - xd + world.rand.nextInt(2 * xd + 1);
+ int y1 = yHouse - yd + world.rand.nextInt(2 * yd + 1);
+ int z1 = zHouse - zd + world.rand.nextInt(2 * zd + 1);
+ switch (1.$SwitchMap$binnie$extrabees$genetics$effect$ExtraBeesEffect[ordinal()])
+ {
+ case 4:
+ if (world.rand.nextInt(100) < 4)
+ {
+ if ((world.isAirBlock(x1, y1, z1)) && ((world.isBlockNormalCubeDefault(x1, y1 - 1, z1, false)) || (world.getBlock(x1, y1 - 1, z1) == ExtraBees.ectoplasm))) {
+ world.setBlock(x1, y1, z1, ExtraBees.ectoplasm, 0, 0);
+ }
+ return null;
+ }
+ break;
+ case 5:
+ if (world.rand.nextInt(100) < 6) {
+ doAcid(world, x1, y1, z1);
+ }
+ break;
+ case 6:
+ if (world.rand.nextInt(200) < 2) {
+ spawnMob(world, x1, y1, z1, "Zombie");
+ }
+ break;
+ case 7:
+ if (world.rand.nextInt(200) < 2) {
+ spawnMob(world, x1, y1, z1, "Skeleton");
+ }
+ break;
+ case 8:
+ if (world.rand.nextInt(200) < 2) {
+ spawnMob(world, x1, y1, z1, "Creeper");
+ }
+ break;
+ case 9:
+ if (world.rand.nextInt(100) < 1) {
+ if ((world.canBlockSeeTheSky(x1, y1, z1)) &&
+ ((world instanceof WorldServer))) {
+ ((WorldServer)world).addWeatherEffect(new EntityBeeLightning(world, x1, y1, z1));
+ }
+ }
+ break;
+ case 10:
+ if (world.rand.nextInt(100) < 1) {
+ if (world.canBlockSeeTheSky(x1, y1, z1)) {
+ ((WorldServer)world).spawnEntityInWorld(new EntitySmallFireball(world, x1, y1 + 64, z1, 0.0D, -0.6D, 0.0D));
+ }
+ }
+ break;
+ case 11:
+ for (EntityLivingBase entity : getEntities(EntityLivingBase.class, genome, housing))
+ {
+ int damage = 4;
+ if ((entity instanceof EntityPlayer))
+ {
+ int count = wearsItems((EntityPlayer)entity);
+ if (count > 3) {
+ continue;
+ }
+ if (count > 2) {
+ damage = 1;
+ } else if (count > 1) {
+ damage = 2;
+ } else if (count > 0) {
+ damage = 3;
+ }
+ }
+ entity.attackEntityFrom(DamageSource.generic, damage);
+ }
+ break;
+ case 12:
+ for (EntityLivingBase entity : getEntities(EntityLivingBase.class, genome, housing)) {
+ if ((entity instanceof EntityPlayer))
+ {
+ EntityPlayer player = (EntityPlayer)entity;
+ player.getFoodStats().addStats(2, 0.2F);
+ }
+ }
+ break;
+ case 13:
+ for (EntityLivingBase entity : getEntities(EntityLivingBase.class, genome, housing)) {
+ if ((entity instanceof EntityPlayer))
+ {
+ EntityPlayer player = (EntityPlayer)entity;
+ if (world.rand.nextInt(4) >= wearsItems(player))
+ {
+ player.getFoodStats().addExhaustion(4.0F);
+ player.addPotionEffect(new PotionEffect(Potion.hunger.id, 100));
+ }
+ }
+ }
+ break;
+ case 14:
+ for (EntityLivingBase entity : getEntities(EntityLivingBase.class, genome, housing)) {
+ if ((entity instanceof EntityPlayer))
+ {
+ EntityPlayer player = (EntityPlayer)entity;
+ if (world.rand.nextInt(4) >= wearsItems(player)) {
+ player.addPotionEffect(new PotionEffect(Potion.blindness.id, 200));
+ }
+ }
+ }
+ break;
+ case 15:
+ for (EntityLivingBase entity : getEntities(EntityLivingBase.class, genome, housing)) {
+ if ((entity instanceof EntityPlayer))
+ {
+ EntityPlayer player = (EntityPlayer)entity;
+ if (world.rand.nextInt(4) >= wearsItems(player)) {
+ player.addPotionEffect(new PotionEffect(Potion.weakness.id, 200));
+ }
+ }
+ }
+ break;
+ case 16:
+ for (EntityLivingBase entity : getEntities(EntityLivingBase.class, genome, housing)) {
+ if ((entity instanceof EntityPlayer))
+ {
+ EntityPlayer player = (EntityPlayer)entity;
+ if (world.rand.nextInt(4) >= wearsItems(player)) {
+ player.addPotionEffect(new PotionEffect(Potion.confusion.id, 200));
+ }
+ }
+ }
+ break;
+ case 1:
+ case 2:
+ case 3:
+ if (world.rand.nextInt(this == FIREWORKS ? 8 : 12) < 1)
+ {
+ FireworkCreator.Firework firework = new FireworkCreator.Firework();
+ switch (1.$SwitchMap$binnie$extrabees$genetics$effect$ExtraBeesEffect[ordinal()])
+ {
+ case 1:
+ firework.setShape(FireworkCreator.Shape.Star);
+ firework.addColor(16768256);
+ for (Birthday birthday : birthdays) {
+ if (birthday.isToday())
+ {
+ firework.addColor(16711680);
+ firework.addColor(65280);
+ firework.addColor(255);
+ firework.setTrail();
+ break;
+ }
+ }
+ break;
+ case 2:
+ break;
+ case 3:
+ firework.setShape(FireworkCreator.Shape.Ball);
+ firework.addColor(genome.getPrimary().getIconColour(0));
+ firework.addColor(genome.getPrimary().getIconColour(0));
+ firework.addColor(genome.getPrimary().getIconColour(1));
+ firework.addColor(genome.getSecondary().getIconColour(0));
+ firework.addColor(genome.getSecondary().getIconColour(0));
+ firework.addColor(genome.getPrimary().getIconColour(1));
+ firework.setTrail();
+ break;
+ }
+ EntityFireworkRocket var11 = new EntityFireworkRocket(world, x1, y1, z1, firework.getFirework());
+ if (world.canBlockSeeTheSky(x1, y1, z1)) {
+ ((WorldServer)world).spawnEntityInWorld(var11);
+ }
+ }
+ break;
+ case 17:
+ List<Entity> entities2 = getEntities(Entity.class, genome, housing);
+ for (Entity entity : entities2)
+ {
+ float entityStrength = 1.0F;
+ if ((entity instanceof EntityPlayer)) {
+ entityStrength *= 100.0F;
+ }
+ double dx = x1 - entity.posX;
+ double dy = y1 - entity.posY;
+ double dz = z1 - entity.posZ;
+ if (dx * dx + dy * dy + dz * dz < 2.0D) {
+ return null;
+ }
+ double strength = 0.5D / (dx * dx + dy * dy + dz * dz) * entityStrength;
+ entity.addVelocity(dx * strength, dy * strength, dz * strength);
+ }
+ break;
+ case 18:
+ List<EntityPlayer> entities3 = getEntities(EntityPlayer.class, genome, housing);
+ for (EntityPlayer entity : entities3)
+ {
+ double dx = x1 - entity.posX;
+ double dy = y1 - entity.posY;
+ double dz = z1 - entity.posZ;
+ if (dx * dx + dy * dy + dz * dz < 2.0D) {
+ return null;
+ }
+ double strength = 0.5D / (dx * dx + dy * dy + dz * dz);
+ entity.addVelocity(-dx * strength, -dy * strength, -dz * strength);
+ }
+ break;
+ case 19:
+ if (world.rand.nextInt(80) > 1) {
+ return null;
+ }
+ List<Entity> entities = getEntities(Entity.class, genome, housing);
+ if (entities.size() == 0) {
+ return null;
+ }
+ Entity entity = (Entity)entities.get(world.rand.nextInt(entities.size()));
+ if (!(entity instanceof EntityLiving)) {
+ return null;
+ }
+ float jumpDist = 5.0F;
+ if (y1 < 4) {
+ y1 = 4;
+ }
+ if ((!world.isAirBlock(x1, y1, z1)) || (!world.isAirBlock(x1, y1 + 1, z1))) {
+ return null;
+ }
+ ((EntityLiving)entity).setPositionAndUpdate(x1, y1, z1);
+
+
+
+
+ ((EntityLiving)entity).addPotionEffect(new PotionEffect(Potion.confusion.id, 160, 10));
+
+
+ break;
+ case 20:
+ if (world.rand.nextInt(120) > 1) {
+ return null;
+ }
+ TileEntity tile = world.getTileEntity(x1, y1, z1);
+ if ((tile instanceof IFluidHandler)) {
+ ((IFluidHandler)tile).fill(ForgeDirection.UP, Binnie.Liquid.getLiquidStack("water", 100), true);
+ }
+ break;
+ case 21:
+ if (world.rand.nextInt(20) > 1) {
+ return null;
+ }
+ if (ExtraBeesFlowers.Sapling.isAcceptedFlower(world, null, x1, y1, z1)) {
+ ItemDye.applyBonemeal(new ItemStack(Blocks.dirt, 1), world, x1, y1, z1, null);
+ }
+ break;
+ case 22:
+ if (world.rand.nextInt(20) > 1) {
+ return null;
+ }
+ if (ExtraBeesFlowers.Fruit.isAcceptedFlower(world, null, x1, y1, z1)) {
+ ItemDye.applyBonemeal(new ItemStack(Blocks.dirt, 1), world, x1, y1, z1, null);
+ }
+ break;
+ case 23:
+ if (world.rand.nextInt(20) > 1) {
+ return null;
+ }
+ if ((world.getBlock(x1, y1, z1) == Blocks.brown_mushroom) || (world.getBlock(x1, y1, z1) == Blocks.red_mushroom)) {
+ ItemDye.applyBonemeal(new ItemStack(Blocks.dirt, 1), world, x1, y1, z1, null);
+ }
+ break;
+ case 24:
+ TileEntity tile2 = world.getTileEntity(x1, y1, z1);
+ if ((tile2 instanceof IEnergyReceiver)) {
+ ((IEnergyReceiver)tile2).receiveEnergy(ForgeDirection.getOrientation(0), 5, true);
+ }
+ break;
+ case 25:
+ break;
+ }
+ return null;
+ }
+
+ protected int[] getModifiedArea(IBeeGenome genome, IBeeHousing housing)
+ {
+ int[] area = genome.getTerritory(); int
+ tmp9_8 = 0; int[] tmp9_7 = area;tmp9_7[tmp9_8] = ((int)(tmp9_7[tmp9_8] * (housing.getTerritoryModifier(genome, 1.0F) * 3.0F))); int
+ tmp29_28 = 1; int[] tmp29_27 = area;tmp29_27[tmp29_28] = ((int)(tmp29_27[tmp29_28] * (housing.getTerritoryModifier(genome, 1.0F) * 3.0F))); int
+ tmp49_48 = 2; int[] tmp49_47 = area;tmp49_47[tmp49_48] = ((int)(tmp49_47[tmp49_48] * (housing.getTerritoryModifier(genome, 1.0F) * 3.0F)));
+ if (area[0] < 1) {
+ area[0] = 1;
+ }
+ if (area[1] < 1) {
+ area[1] = 1;
+ }
+ if (area[2] < 1) {
+ area[2] = 1;
+ }
+ return area;
+ }
+
+ public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing)
+ {
+ int[] area = genome.getTerritory(); int
+ tmp11_10 = 0; int[] tmp11_8 = area;tmp11_8[tmp11_10] = ((int)(tmp11_8[tmp11_10] * housing.getTerritoryModifier(genome, 1.0F))); int
+ tmp28_27 = 1; int[] tmp28_25 = area;tmp28_25[tmp28_27] = ((int)(tmp28_25[tmp28_27] * housing.getTerritoryModifier(genome, 1.0F))); int
+ tmp45_44 = 2; int[] tmp45_42 = area;tmp45_42[tmp45_44] = ((int)(tmp45_42[tmp45_44] * housing.getTerritoryModifier(genome, 1.0F)));
+ if (area[0] < 1) {
+ area[0] = 1;
+ }
+ if (area[1] < 1) {
+ area[1] = 1;
+ }
+ if (area[2] < 1) {
+ area[2] = 1;
+ }
+ PluginApiculture.proxy.addBeeHiveFX("particles/swarm_bee", housing.getWorld(), housing.getXCoord(), housing.getYCoord(), housing.getZCoord(), genome.getPrimary().getIconColour(0), area[0], area[1], area[2]);
+
+ return storedData;
+ }
+
+ public String getFX()
+ {
+ return this.fx;
+ }
+
+ public <T extends Entity> List<T> getEntities(Class<T> eClass, IBeeGenome genome, IBeeHousing housing)
+ {
+ int[] area = genome.getTerritory();
+ int[] offset = { -Math.round(area[0] / 2), -Math.round(area[1] / 2), -Math.round(area[2] / 2) };
+
+
+ int[] min = { housing.getXCoord() + offset[0], housing.getYCoord() + offset[1], housing.getZCoord() + offset[2] };
+ int[] max = { housing.getXCoord() + offset[0] + area[0], housing.getYCoord() + offset[1] + area[1], housing.getZCoord() + offset[2] + area[2] };
+
+ AxisAlignedBB box = AxisAlignedBB.getBoundingBox(min[0], min[1], min[2], max[0], max[1], max[2]);
+ return housing.getWorld().getEntitiesWithinAABB(eClass, box);
+ }
+
+ public static boolean wearsHelmet(EntityPlayer player)
+ {
+ ItemStack armorItem = player.inventory.armorInventory[3];
+ return (armorItem != null) && ((armorItem.getItem() instanceof IArmorApiarist));
+ }
+
+ public static boolean wearsChest(EntityPlayer player)
+ {
+ ItemStack armorItem = player.inventory.armorInventory[2];
+ return (armorItem != null) && ((armorItem.getItem() instanceof IArmorApiarist));
+ }
+
+ public static boolean wearsLegs(EntityPlayer player)
+ {
+ ItemStack armorItem = player.inventory.armorInventory[1];
+ return (armorItem != null) && ((armorItem.getItem() instanceof IArmorApiarist));
+ }
+
+ public static boolean wearsBoots(EntityPlayer player)
+ {
+ ItemStack armorItem = player.inventory.armorInventory[0];
+ return (armorItem != null) && ((armorItem.getItem() instanceof IArmorApiarist));
+ }
+
+ public static int wearsItems(EntityPlayer player)
+ {
+ int count = 0;
+ if (wearsHelmet(player)) {
+ count++;
+ }
+ if (wearsChest(player)) {
+ count++;
+ }
+ if (wearsLegs(player)) {
+ count++;
+ }
+ if (wearsBoots(player)) {
+ count++;
+ }
+ return count;
+ }
+
+ public static class Birthday
+ {
+ int day;
+ int month;
+ String name;
+
+ public boolean isToday()
+ {
+ return (Calendar.getInstance().get(5) == this.month) && (Calendar.getInstance().get(2) == this.day);
+ }
+
+ public String getName()
+ {
+ return this.name;
+ }
+
+ private Birthday(int day, int month, String name)
+ {
+ this.day = day;
+ this.month = (month + 1);
+ this.name = name;
+ }
+ }
+
+ static
+ {
+ birthdays = new ArrayList();
+
+
+ birthdays.add(new Birthday(3, 10, "Binnie", null));
+ }
+
+ public String getUnlocalizedName()
+ {
+ return getUID();
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/effect/FireworkCreator.java b/src/Java/binnie/extrabees/genetics/effect/FireworkCreator.java
new file mode 100644
index 0000000000..29e5e42ada
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/effect/FireworkCreator.java
@@ -0,0 +1,83 @@
+package binnie.extrabees.genetics.effect;
+
+import java.util.ArrayList;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+
+public class FireworkCreator
+{
+ public static enum Shape
+ {
+ Ball, LargeBall, Star, Creeper, Burst;
+
+ private Shape() {}
+ }
+
+ public static class Firework
+ {
+ boolean flicker = false;
+ boolean trail = false;
+ ArrayList<Integer> colors = new ArrayList();
+ byte shape = 0;
+
+ public void setFlicker()
+ {
+ this.flicker = true;
+ }
+
+ public void setTrail()
+ {
+ this.trail = true;
+ }
+
+ public void setShape(FireworkCreator.Shape shape)
+ {
+ this.shape = ((byte)shape.ordinal());
+ }
+
+ public void addColor(int color)
+ {
+ this.colors.add(Integer.valueOf(color));
+ }
+
+ NBTTagCompound getNBT()
+ {
+ NBTTagCompound nbt = new NBTTagCompound();
+ if (this.flicker) {
+ nbt.setBoolean("Flicker", true);
+ }
+ if (this.trail) {
+ nbt.setBoolean("Trail", true);
+ }
+ if (this.colors.size() == 0) {
+ addColor(16777215);
+ }
+ int[] array = new int[this.colors.size()];
+ for (int i = 0; i < this.colors.size(); i++) {
+ array[i] = ((Integer)this.colors.get(i)).intValue();
+ }
+ nbt.setIntArray("Colors", array);
+ nbt.setByte("Type", this.shape);
+ return nbt;
+ }
+
+ public ItemStack getFirework()
+ {
+ NBTTagCompound var15 = new NBTTagCompound();
+
+ NBTTagCompound var18 = new NBTTagCompound();
+ NBTTagList var25 = new NBTTagList();
+ var25.appendTag(getNBT());
+
+ var18.setTag("Explosions", var25);
+ var18.setByte("Flight", (byte)0);
+ var15.setTag("Fireworks", var18);
+
+ ItemStack item = new ItemStack(Items.fireworks);
+ item.setTagCompound(var15);
+ return item;
+ }
+ }
+}