aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/extrabees
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2016-01-20 14:24:34 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2016-01-20 14:24:34 +1000
commit869c206c4fcc8001bd2e1d66f704290331813835 (patch)
tree96735ce8fe4665e2759c3374221d6f06f4527df2 /src/Java/binnie/extrabees
parentec2c72827f01dd4bb2174137f1ab162f9ddaab62 (diff)
downloadGT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.tar.gz
GT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.tar.bz2
GT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.zip
Initial Commit
Diffstat (limited to 'src/Java/binnie/extrabees')
-rw-r--r--src/Java/binnie/extrabees/ExtraBees.java123
-rw-r--r--src/Java/binnie/extrabees/apiary/ComponentBeeModifier.java88
-rw-r--r--src/Java/binnie/extrabees/apiary/ComponentExtraBeeGUI.java28
-rw-r--r--src/Java/binnie/extrabees/apiary/EnumHiveFrame.java140
-rw-r--r--src/Java/binnie/extrabees/apiary/IndustrialFrame.java141
-rw-r--r--src/Java/binnie/extrabees/apiary/ItemHiveFrame.java100
-rw-r--r--src/Java/binnie/extrabees/apiary/ItemIndustrialFrame.java66
-rw-r--r--src/Java/binnie/extrabees/apiary/ModuleApiary.java96
-rw-r--r--src/Java/binnie/extrabees/apiary/TileExtraBeeAlveary.java355
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyFrame.java125
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyHatchery.java106
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyLighting.java41
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyMachine.java66
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyMutator.java125
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyRainShield.java41
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyStimulator.java430
-rw-r--r--src/Java/binnie/extrabees/apiary/machine/AlvearyTransmission.java81
-rw-r--r--src/Java/binnie/extrabees/config/ConfigurationMachines.java17
-rw-r--r--src/Java/binnie/extrabees/config/ConfigurationMain.java26
-rw-r--r--src/Java/binnie/extrabees/core/ExtraBeeGUID.java54
-rw-r--r--src/Java/binnie/extrabees/core/ExtraBeeItems.java172
-rw-r--r--src/Java/binnie/extrabees/core/ExtraBeeTexture.java28
-rw-r--r--src/Java/binnie/extrabees/core/ModuleCore.java19
-rw-r--r--src/Java/binnie/extrabees/genetics/ExtraBeeMutation.java478
-rw-r--r--src/Java/binnie/extrabees/genetics/ExtraBeesBranch.java313
-rw-r--r--src/Java/binnie/extrabees/genetics/ExtraBeesFlowers.java202
-rw-r--r--src/Java/binnie/extrabees/genetics/ExtraBeesSpecies.java1139
-rw-r--r--src/Java/binnie/extrabees/genetics/ModuleGenetics.java88
-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
-rw-r--r--src/Java/binnie/extrabees/genetics/items/ItemDictionary.java73
-rw-r--r--src/Java/binnie/extrabees/genetics/items/ItemPunnettSquare.java41
-rw-r--r--src/Java/binnie/extrabees/gui/WindowAlvearyFrame.java53
-rw-r--r--src/Java/binnie/extrabees/gui/WindowAlvearyHatchery.java54
-rw-r--r--src/Java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java53
-rw-r--r--src/Java/binnie/extrabees/gui/WindowAlvearyMutator.java78
-rw-r--r--src/Java/binnie/extrabees/gui/WindowAlvearyStimulator.java56
-rw-r--r--src/Java/binnie/extrabees/gui/database/ControlBiomes.java75
-rw-r--r--src/Java/binnie/extrabees/gui/database/ControlClimateBar.java153
-rw-r--r--src/Java/binnie/extrabees/gui/database/ControlProductsBox.java92
-rw-r--r--src/Java/binnie/extrabees/gui/database/ControlProductsItem.java44
-rw-r--r--src/Java/binnie/extrabees/gui/database/PageSpeciesClimate.java36
-rw-r--r--src/Java/binnie/extrabees/gui/database/PageSpeciesGenome.java206
-rw-r--r--src/Java/binnie/extrabees/gui/database/PageSpeciesProducts.java38
-rw-r--r--src/Java/binnie/extrabees/gui/database/WindowApiaristDatabase.java83
-rw-r--r--src/Java/binnie/extrabees/gui/punnett/ControlChromosome.java49
-rw-r--r--src/Java/binnie/extrabees/gui/punnett/ControlPunnett.java86
-rw-r--r--src/Java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java8
-rw-r--r--src/Java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java67
-rw-r--r--src/Java/binnie/extrabees/liquids/ExtraBeeLiquid.java80
-rw-r--r--src/Java/binnie/extrabees/liquids/ModuleLiquids.java19
-rw-r--r--src/Java/binnie/extrabees/products/EnumHoneyComb.java109
-rw-r--r--src/Java/binnie/extrabees/products/EnumHoneyDrop.java72
-rw-r--r--src/Java/binnie/extrabees/products/EnumPropolis.java65
-rw-r--r--src/Java/binnie/extrabees/products/ItemHoneyComb.java335
-rw-r--r--src/Java/binnie/extrabees/products/ItemHoneyCrystal.java51
-rw-r--r--src/Java/binnie/extrabees/products/ItemHoneyCrystalEmpty.java30
-rw-r--r--src/Java/binnie/extrabees/products/ItemHoneyDrop.java55
-rw-r--r--src/Java/binnie/extrabees/products/ItemProduct.java44
-rw-r--r--src/Java/binnie/extrabees/products/ItemPropolis.java35
-rw-r--r--src/Java/binnie/extrabees/products/ModuleProducts.java43
-rw-r--r--src/Java/binnie/extrabees/proxy/ExtraBeesProxy.java13
-rw-r--r--src/Java/binnie/extrabees/proxy/ExtraBeesProxyClient.java5
-rw-r--r--src/Java/binnie/extrabees/proxy/ExtraBeesProxyServer.java5
-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
75 files changed, 8193 insertions, 0 deletions
diff --git a/src/Java/binnie/extrabees/ExtraBees.java b/src/Java/binnie/extrabees/ExtraBees.java
new file mode 100644
index 0000000000..ef93560cc0
--- /dev/null
+++ b/src/Java/binnie/extrabees/ExtraBees.java
@@ -0,0 +1,123 @@
+package binnie.extrabees;
+
+import binnie.core.AbstractMod;
+import binnie.core.BinnieCore;
+import binnie.core.gui.IBinnieGUID;
+import binnie.core.network.BinniePacketHandler;
+import binnie.core.proxy.IProxyCore;
+import binnie.extrabees.apiary.ModuleApiary;
+import binnie.extrabees.config.ConfigurationMachines;
+import binnie.extrabees.config.ConfigurationMain;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.core.ModuleCore;
+import binnie.extrabees.genetics.ModuleGenetics;
+import binnie.extrabees.liquids.ModuleLiquids;
+import binnie.extrabees.products.ModuleProducts;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import binnie.extrabees.worldgen.ModuleGeneration;
+import cpw.mods.fml.common.Mod;
+import cpw.mods.fml.common.Mod.EventHandler;
+import cpw.mods.fml.common.Mod.Instance;
+import cpw.mods.fml.common.SidedProxy;
+import cpw.mods.fml.common.event.FMLInitializationEvent;
+import cpw.mods.fml.common.event.FMLPostInitializationEvent;
+import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.item.Item;
+
+@Mod(modid="ExtraBees", name="Extra Bees", useMetadata=true, dependencies="after:BinnieCore")
+public class ExtraBees
+ extends AbstractMod
+{
+ @Mod.Instance("ExtraBees")
+ public static ExtraBees instance;
+ @SidedProxy(clientSide="binnie.extrabees.proxy.ExtraBeesProxyClient", serverSide="binnie.extrabees.proxy.ExtraBeesProxyServer")
+ public static ExtraBeesProxy proxy;
+ public static Block hive;
+ public static Material materialBeehive;
+ public static Block ectoplasm;
+ public static Block apiaristMachine;
+ public static Block geneticMachine;
+ public static Block advGeneticMachine;
+ public static Item comb;
+ public static Item propolis;
+ public static Item honeyDrop;
+ public static Item honeyCrystal;
+ public static Item honeyCrystalEmpty;
+ public static Item dictionary;
+ public static Item itemMisc;
+
+ @Mod.EventHandler
+ public void preInit(FMLPreInitializationEvent evt)
+ {
+ addModule(new ModuleCore());
+ addModule(new ModuleProducts());
+ addModule(new ModuleGenetics());
+ addModule(new ModuleGeneration());
+ addModule(new ModuleLiquids());
+ addModule(new ModuleApiary());
+ preInit();
+ }
+
+ @Mod.EventHandler
+ public void init(FMLInitializationEvent evt)
+ {
+ init();
+ }
+
+ @Mod.EventHandler
+ public void postInit(FMLPostInitializationEvent evt)
+ {
+ postInit();
+ }
+
+ public ExtraBees()
+ {
+ instance = this;
+ }
+
+ public IBinnieGUID[] getGUIDs()
+ {
+ return ExtraBeeGUID.values();
+ }
+
+ public Class<?>[] getConfigs()
+ {
+ return new Class[] { ConfigurationMain.class, ConfigurationMachines.class };
+ }
+
+ public IProxyCore getProxy()
+ {
+ return proxy;
+ }
+
+ public String getChannel()
+ {
+ return "EB";
+ }
+
+ public String getModID()
+ {
+ return "extrabees";
+ }
+
+ protected Class<? extends BinniePacketHandler> getPacketHandler()
+ {
+ return PacketHandler.class;
+ }
+
+ public static class PacketHandler
+ extends BinniePacketHandler
+ {
+ public PacketHandler()
+ {
+ super();
+ }
+ }
+
+ public boolean isActive()
+ {
+ return BinnieCore.isExtraBeesActive();
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/ComponentBeeModifier.java b/src/Java/binnie/extrabees/apiary/ComponentBeeModifier.java
new file mode 100644
index 0000000000..32cb7dcd48
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/ComponentBeeModifier.java
@@ -0,0 +1,88 @@
+package binnie.extrabees.apiary;
+
+import binnie.core.machines.Machine;
+import binnie.core.machines.MachineComponent;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.genetics.IIndividual;
+import net.minecraft.item.ItemStack;
+
+public class ComponentBeeModifier
+ extends MachineComponent
+ implements IBeeModifier, IBeeListener
+{
+ public ComponentBeeModifier(Machine machine)
+ {
+ super(machine);
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return 1.0F;
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return 1.0F;
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+
+ public boolean isSealed()
+ {
+ return false;
+ }
+
+ public boolean isSelfLighted()
+ {
+ return false;
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ return false;
+ }
+
+ public boolean isHellish()
+ {
+ return false;
+ }
+
+ public void onQueenChange(ItemStack queen) {}
+
+ public void wearOutEquipment(int amount) {}
+
+ public void onQueenDeath(IBee queen) {}
+
+ public void onPostQueenDeath(IBee queen) {}
+
+ public boolean onPollenRetrieved(IBee queen, IIndividual pollen, boolean isHandled)
+ {
+ return false;
+ }
+
+ public boolean onEggLaid(IBee queen)
+ {
+ return false;
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/ComponentExtraBeeGUI.java b/src/Java/binnie/extrabees/apiary/ComponentExtraBeeGUI.java
new file mode 100644
index 0000000000..db2527e14c
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/ComponentExtraBeeGUI.java
@@ -0,0 +1,28 @@
+package binnie.extrabees.apiary;
+
+import binnie.core.machines.Machine;
+import binnie.core.machines.MachineComponent;
+import binnie.core.machines.component.IInteraction.RightClick;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.world.World;
+
+public class ComponentExtraBeeGUI
+ extends MachineComponent
+ implements IInteraction.RightClick
+{
+ ExtraBeeGUID id;
+
+ public ComponentExtraBeeGUI(Machine machine, ExtraBeeGUID id)
+ {
+ super(machine);
+ this.id = id;
+ }
+
+ public void onRightClick(World world, EntityPlayer player, int x, int y, int z)
+ {
+ ExtraBees.proxy.openGui(this.id, player, x, y, z);
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/EnumHiveFrame.java b/src/Java/binnie/extrabees/apiary/EnumHiveFrame.java
new file mode 100644
index 0000000000..6a135c2532
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/EnumHiveFrame.java
@@ -0,0 +1,140 @@
+package binnie.extrabees.apiary;
+
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.core.genetics.BeeModifierLogic;
+import binnie.core.genetics.EnumBeeBooleanModifier;
+import binnie.core.genetics.EnumBeeModifier;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.common.registry.GameRegistry;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IHiveFrame;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public enum EnumHiveFrame
+ implements IHiveFrame
+{
+ Cocoa, Cage, Soul, Clay, Debug;
+
+ Item item;
+
+ public static void init()
+ {
+ Cocoa.logic.setModifier(EnumBeeModifier.Lifespan, 0.75F, 0.25F);
+ Cocoa.logic.setModifier(EnumBeeModifier.Production, 1.5F, 5.0F);
+
+ Cage.logic.setModifier(EnumBeeModifier.Territory, 0.5F, 0.1F);
+ Cage.logic.setModifier(EnumBeeModifier.Lifespan, 0.75F, 0.5F);
+ Cage.logic.setModifier(EnumBeeModifier.Production, 0.75F, 0.5F);
+
+ Soul.logic.setModifier(EnumBeeModifier.Mutation, 1.5F, 5.0F);
+ Soul.logic.setModifier(EnumBeeModifier.Lifespan, 0.75F, 0.5F);
+ Soul.logic.setModifier(EnumBeeModifier.Production, 0.25F, 0.1F);
+ Soul.setMaxDamage(80);
+
+ Clay.logic.setModifier(EnumBeeModifier.Lifespan, 1.5F, 5.0F);
+ Clay.logic.setModifier(EnumBeeModifier.Mutation, 0.5F, 0.2F);
+ Clay.logic.setModifier(EnumBeeModifier.Production, 0.75F, 0.2F);
+
+ Debug.logic.setModifier(EnumBeeModifier.Lifespan, 1.0E-004F, 1.0E-004F);
+
+
+
+ GameRegistry.addRecipe(new ItemStack(Cocoa.item), new Object[] { " c ", "cFc", " c ", Character.valueOf('F'), Mods.Forestry.stack("frameImpregnated"), Character.valueOf('c'), new ItemStack(Items.dye, 1, 3) });
+
+
+
+ GameRegistry.addShapelessRecipe(new ItemStack(Cage.item), new Object[] { Mods.Forestry.stack("frameImpregnated"), Blocks.iron_bars });
+
+
+ GameRegistry.addShapelessRecipe(new ItemStack(Soul.item), new Object[] { Mods.Forestry.stack("frameImpregnated"), Blocks.soul_sand });
+
+
+ GameRegistry.addRecipe(new ItemStack(Clay.item), new Object[] { " c ", "cFc", " c ", Character.valueOf('F'), Mods.Forestry.stack("frameImpregnated"), Character.valueOf('c'), Items.clay_ball });
+ }
+
+ public int getIconIndex()
+ {
+ return 55 + ordinal();
+ }
+
+ public void setMaxDamage(int damage)
+ {
+ this.maxDamage = damage;
+ }
+
+ int maxDamage = 240;
+ BeeModifierLogic logic = new BeeModifierLogic();
+
+ private EnumHiveFrame() {}
+
+ public ItemStack frameUsed(IBeeHousing house, ItemStack frame, IBee queen, int wear)
+ {
+ frame.setItemDamage(frame.getItemDamage() + wear);
+ if (frame.getItemDamage() >= frame.getMaxDamage()) {
+ return null;
+ }
+ return frame;
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Territory, currentModifier);
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Mutation, currentModifier);
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Lifespan, currentModifier);
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Production, currentModifier);
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Flowering, currentModifier);
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.GeneticDecay, currentModifier);
+ }
+
+ public boolean isSealed()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.Sealed);
+ }
+
+ public boolean isSelfLighted()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.SelfLighted);
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.SunlightStimulated);
+ }
+
+ public boolean isHellish()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.Hellish);
+ }
+
+ public String getName()
+ {
+ return ExtraBees.proxy.localise("item.frame." + toString().toLowerCase());
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/IndustrialFrame.java b/src/Java/binnie/extrabees/apiary/IndustrialFrame.java
new file mode 100644
index 0000000000..f8d3e5ff7a
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/IndustrialFrame.java
@@ -0,0 +1,141 @@
+package binnie.extrabees.apiary;
+
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeModifier;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public enum IndustrialFrame
+ implements IBeeModifier
+{
+ Empty("Empty", 5, 0), Light("Glowstone Lighting", 2, 4), Rain("Rain Shielding", 2, 4), Sunlight("Sunlight Simulator", 4, 8), Soul("Low Grade Mutagen", 5, 15), Uranium("High Grade Mutagen", 10, 50), Cage("Meshed Restrainer", 3, 12), Freedom("Territory Extension", 3, 16), Honey("Honey Amplifier", 4, 12), Jelly("Gelatin Amplifier", 8, 36), Leaf("Pollinator MK I", 3, 15), Pollen("Pollinator MK II", 7, 25), Clay("Lifespan Extensor", 2, 10), Emerald("Eon Simulator", 7, 20), NetherStar("Immortality Gate", 12, 50), Poison("Mortality Inhibitor", 8, 18);
+
+ String name;
+
+ private IndustrialFrame(String name, int wear, int power)
+ {
+ this.name = name;
+ this.wearMod = wear;
+ this.power = power;
+ }
+
+ public static ItemStack getItemStack(Item item, IndustrialFrame frame)
+ {
+ ItemStack stack = new ItemStack(item);
+ NBTTagCompound nbt = new NBTTagCompound();
+ nbt.setInteger("frame", frame.ordinal());
+ stack.setTagCompound(nbt);
+ return stack;
+ }
+
+ static
+ {
+ Light.lighted = true;
+
+ Rain.rain = true;
+
+ Sunlight.lighted = true;
+ Sunlight.sunlight = true;
+
+ Soul.mutationMod = 1.3F;
+
+ Uranium.mutationMod = 2.0F;
+
+ Cage.territoryMod = 0.4F;
+
+ Freedom.territoryMod = 1.4F;
+
+ Honey.productionMod = 1.4F;
+
+ Jelly.productionMod = 1.8F;
+
+ Leaf.floweringMod = 1.4F;
+
+ Pollen.floweringMod = 2.0F;
+
+ Clay.lifespanMod = 1.4F;
+
+ Emerald.lifespanMod = 2.0F;
+
+ NetherStar.lifespanMod = 20.0F;
+
+ Poison.lifespanMod = 0.5F;
+ }
+
+ float territoryMod = 1.0F;
+ float mutationMod = 1.0F;
+ float lifespanMod = 1.0F;
+ float productionMod = 1.0F;
+ float floweringMod = 1.0F;
+ boolean lighted = false;
+ boolean sunlight = false;
+ boolean rain = false;
+ int wearMod;
+ int power;
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.territoryMod;
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.mutationMod;
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.lifespanMod;
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.productionMod;
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.floweringMod;
+ }
+
+ public boolean isSealed()
+ {
+ return this.rain;
+ }
+
+ public boolean isSelfLighted()
+ {
+ return this.lighted;
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ return this.sunlight;
+ }
+
+ public boolean isHellish()
+ {
+ return false;
+ }
+
+ public Object getName()
+ {
+ return this.name;
+ }
+
+ public int getWearModifier()
+ {
+ return this.wearMod;
+ }
+
+ public int getPowerUsage()
+ {
+ return this.power;
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/ItemHiveFrame.java b/src/Java/binnie/extrabees/apiary/ItemHiveFrame.java
new file mode 100644
index 0000000000..c2e8c27fbc
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/ItemHiveFrame.java
@@ -0,0 +1,100 @@
+package binnie.extrabees.apiary;
+
+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.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IHiveFrame;
+import forestry.api.core.Tabs;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class ItemHiveFrame
+ extends Item
+ implements IHiveFrame
+{
+ EnumHiveFrame frame;
+
+ public String getItemStackDisplayName(ItemStack par1ItemStack)
+ {
+ return this.frame.getName();
+ }
+
+ public ItemHiveFrame(EnumHiveFrame frame)
+ {
+ this.frame = frame;
+ setMaxDamage(frame.maxDamage);
+ setCreativeTab(Tabs.tabApiculture);
+ setMaxStackSize(1);
+ setUnlocalizedName("hiveFrame");
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.frame.getTerritoryModifier(genome, currentModifier);
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.frame.getMutationModifier(genome, mate, currentModifier);
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.frame.getLifespanModifier(genome, mate, currentModifier);
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.frame.getProductionModifier(genome, currentModifier);
+ }
+
+ public ItemStack frameUsed(IBeeHousing housing, ItemStack frame, IBee queen, int wear)
+ {
+ frame.setItemDamage(frame.getItemDamage() + wear);
+ if (frame.getItemDamage() >= frame.getMaxDamage()) {
+ return null;
+ }
+ return frame;
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+
+ public boolean isSealed()
+ {
+ return false;
+ }
+
+ public boolean isSelfLighted()
+ {
+ return false;
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ return false;
+ }
+
+ public boolean isHellish()
+ {
+ return false;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.itemIcon = ExtraBees.proxy.getIcon(register, "frame" + this.frame.toString());
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/ItemIndustrialFrame.java b/src/Java/binnie/extrabees/apiary/ItemIndustrialFrame.java
new file mode 100644
index 0000000000..0450798b52
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/ItemIndustrialFrame.java
@@ -0,0 +1,66 @@
+package binnie.extrabees.apiary;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import java.util.List;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class ItemIndustrialFrame
+ extends Item
+{
+ @SideOnly(Side.CLIENT)
+ public boolean requiresMultipleRenderPasses()
+ {
+ return true;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List)
+ {
+ for (IndustrialFrame frame : )
+ {
+ ItemStack stack = new ItemStack(this);
+ NBTTagCompound nbt = new NBTTagCompound();
+ nbt.setInteger("frame", frame.ordinal());
+ stack.setTagCompound(nbt);
+ par3List.add(stack);
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
+ {
+ super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4);
+ IndustrialFrame frame = getFrame(par1ItemStack);
+ if (frame == null) {
+ par3List.add("Invalid Contents");
+ } else {
+ par3List.add(frame.getName());
+ }
+ }
+
+ public String getItemStackDisplayName(ItemStack par1ItemStack)
+ {
+ return "Industrial Frame";
+ }
+
+ public ItemIndustrialFrame()
+ {
+ setCreativeTab(CreativeTabs.tabMisc);
+ setMaxDamage(400);
+ setMaxStackSize(1);
+ setUnlocalizedName("industrialFrame");
+ }
+
+ public static IndustrialFrame getFrame(ItemStack stack)
+ {
+ if ((stack == null) || (!stack.hasTagCompound()) || (!stack.getTagCompound().hasKey("frame"))) {
+ return null;
+ }
+ return IndustrialFrame.values()[stack.getTagCompound().getInteger("frame")];
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/ModuleApiary.java b/src/Java/binnie/extrabees/apiary/ModuleApiary.java
new file mode 100644
index 0000000000..bcf9da626b
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/ModuleApiary.java
@@ -0,0 +1,96 @@
+package binnie.extrabees.apiary;
+
+import binnie.core.BinnieCore;
+import binnie.core.IInitializable;
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.core.circuits.BinnieCircuitLayout;
+import binnie.core.machines.MachineGroup;
+import binnie.core.proxy.BinnieProxy;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.apiary.machine.AlvearyMachine;
+import binnie.extrabees.apiary.machine.AlvearyMutator;
+import binnie.extrabees.apiary.machine.AlvearyStimulator.CircuitType;
+import cpw.mods.fml.common.registry.GameRegistry;
+import forestry.api.core.Tabs;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.ShapedOreRecipe;
+
+public class ModuleApiary
+ implements IInitializable
+{
+ public static Block blockComponent;
+ BinnieCircuitLayout stimulatorLayout;
+
+ public void preInit()
+ {
+ MachineGroup machineGroup = new MachineGroup(ExtraBees.instance, "alveay", "alveary", AlvearyMachine.values());
+ machineGroup.setCreativeTab(Tabs.tabApiculture);
+
+ BinnieCore.proxy.registerTileEntity(TileExtraBeeAlveary.class, "extrabees.tile.alveary", BinnieCore.proxy.createObject("binnie.core.machines.RendererMachine"));
+
+
+
+
+
+ blockComponent = machineGroup.getBlock();
+
+ AlvearyMutator.addMutationItem(new ItemStack(Blocks.soul_sand), 1.5F);
+
+ AlvearyMutator.addMutationItem(Mods.IC2.stack("UranFuel"), 4.0F);
+ AlvearyMutator.addMutationItem(Mods.IC2.stack("MOXFuel"), 10.0F);
+ AlvearyMutator.addMutationItem(Mods.IC2.stack("Plutonium"), 8.0F);
+ AlvearyMutator.addMutationItem(Mods.IC2.stack("smallPlutonium"), 5.0F);
+ AlvearyMutator.addMutationItem(Mods.IC2.stack("Uran235"), 4.0F);
+ AlvearyMutator.addMutationItem(Mods.IC2.stack("smallUran235"), 2.5F);
+ AlvearyMutator.addMutationItem(Mods.IC2.stack("Uran238"), 2.0F);
+
+ AlvearyMutator.addMutationItem(new ItemStack(Items.ender_pearl), 2.0F);
+ AlvearyMutator.addMutationItem(new ItemStack(Items.ender_eye), 4.0F);
+ for (EnumHiveFrame frame : EnumHiveFrame.values())
+ {
+ frame.item = new ItemHiveFrame(frame);
+ GameRegistry.registerItem(frame.item, "hiveFrame." + frame.name().toLowerCase());
+ }
+ }
+
+ public void postInit()
+ {
+ EnumHiveFrame.init();
+
+ GameRegistry.addRecipe(AlvearyMachine.Mutator.get(1), new Object[] { "g g", " a ", "t t", Character.valueOf('g'), Items.gold_ingot, Character.valueOf('a'), Mods.Forestry.block("alveary"), Character.valueOf('t'), new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 5) });
+
+
+
+ GameRegistry.addRecipe(AlvearyMachine.Frame.get(1), new Object[] { "iii", "tat", " t ", Character.valueOf('i'), Items.iron_ingot, Character.valueOf('a'), Mods.Forestry.block("alveary"), Character.valueOf('t'), new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4) });
+
+
+
+ GameRegistry.addRecipe(AlvearyMachine.RainShield.get(1), new Object[] { " b ", "bab", "t t", Character.valueOf('b'), Items.brick, Character.valueOf('a'), Mods.Forestry.block("alveary"), Character.valueOf('t'), new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4) });
+
+
+
+
+ GameRegistry.addRecipe(AlvearyMachine.Lighting.get(1), new Object[] { "iii", "iai", " t ", Character.valueOf('i'), Items.glowstone_dust, Character.valueOf('a'), Mods.Forestry.block("alveary"), Character.valueOf('t'), new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4) });
+
+
+ GameRegistry.addRecipe(AlvearyMachine.Stimulator.get(1), new Object[] { "kik", "iai", " t ", Character.valueOf('i'), Items.gold_nugget, Character.valueOf('a'), Mods.Forestry.block("alveary"), Character.valueOf('t'), new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 4), Character.valueOf('k'), new ItemStack(Mods.Forestry.item("chipsets"), 1, 2) });
+
+
+ GameRegistry.addRecipe(AlvearyMachine.Hatchery.get(1), new Object[] { "i i", " a ", "iti", Character.valueOf('i'), Blocks.glass_pane, Character.valueOf('a'), Mods.Forestry.block("alveary"), Character.valueOf('t'), new ItemStack(Mods.Forestry.item("thermionicTubes"), 1, 5) });
+
+
+ GameRegistry.addRecipe(new ShapedOreRecipe(AlvearyMachine.Transmission.get(1), new Object[] { " t ", "tat", " t ", Character.valueOf('a'), Mods.Forestry.block("alveary"), Character.valueOf('t'), "gearTin" }));
+ for (AlvearyStimulator.CircuitType type : AlvearyStimulator.CircuitType.values()) {
+ type.createCircuit(this.stimulatorLayout);
+ }
+ }
+
+ public void init()
+ {
+ this.stimulatorLayout = new BinnieCircuitLayout(ExtraBees.instance, "Stimulator");
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/TileExtraBeeAlveary.java b/src/Java/binnie/extrabees/apiary/TileExtraBeeAlveary.java
new file mode 100644
index 0000000000..3edf7e4a9c
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/TileExtraBeeAlveary.java
@@ -0,0 +1,355 @@
+package binnie.extrabees.apiary;
+
+import binnie.Binnie;
+import binnie.core.BinnieCore;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.machines.Machine;
+import binnie.core.machines.TileEntityMachine;
+import binnie.core.proxy.BinnieProxy;
+import binnie.extrabees.apiary.machine.AlvearyMachine.AlvearyPackage;
+import forestry.api.apiculture.IAlvearyComponent;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.core.IStructureLogic;
+import forestry.api.core.ITileStructure;
+import forestry.api.genetics.IIndividual;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.inventory.ISidedInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class TileExtraBeeAlveary
+ extends TileEntityMachine
+ implements IAlvearyComponent, IBeeModifier, IBeeListener
+{
+ boolean init = false;
+ IStructureLogic structureLogic;
+ private boolean isMaster;
+ protected int masterX;
+ protected int masterZ;
+
+ public void updateEntity()
+ {
+ super.updateEntity();
+ if (!BinnieCore.proxy.isSimulating(this.worldObj)) {
+ return;
+ }
+ if (this.worldObj.getWorldTime() % 200L == 0L)
+ {
+ if ((!isIntegratedIntoStructure()) || (isMaster())) {
+ validateStructure();
+ }
+ ITileStructure master = getCentralTE();
+ if (master == null) {
+ return;
+ }
+ if (getBeeListener() != null) {
+ ((IAlvearyComponent)master).registerBeeListener(getBeeListener());
+ }
+ if (getBeeModifier() != null) {
+ ((IAlvearyComponent)master).registerBeeModifier(getBeeModifier());
+ }
+ this.init = true;
+ }
+ }
+
+ public void readFromNBT(NBTTagCompound nbttagcompound)
+ {
+ super.readFromNBT(nbttagcompound);
+
+ this.isMaster = nbttagcompound.getBoolean("IsMaster");
+ this.masterX = nbttagcompound.getInteger("MasterX");
+ this.masterY = nbttagcompound.getInteger("MasterY");
+ this.masterZ = nbttagcompound.getInteger("MasterZ");
+ if (this.isMaster) {
+ makeMaster();
+ }
+ this.structureLogic.readFromNBT(nbttagcompound);
+
+ updateAlvearyBlocks();
+
+ this.init = false;
+ }
+
+ public void writeToNBT(NBTTagCompound nbttagcompound)
+ {
+ super.writeToNBT(nbttagcompound);
+
+ nbttagcompound.setBoolean("IsMaster", this.isMaster);
+ nbttagcompound.setInteger("MasterX", this.masterX);
+ nbttagcompound.setInteger("MasterY", this.masterY);
+ nbttagcompound.setInteger("MasterZ", this.masterZ);
+
+
+ this.structureLogic.writeToNBT(nbttagcompound);
+ }
+
+ AlvearyMachine.AlvearyPackage getAlvearyPackage()
+ {
+ return (AlvearyMachine.AlvearyPackage)getMachine().getPackage();
+ }
+
+ public TileExtraBeeAlveary()
+ {
+ this.structureLogic = Binnie.Genetics.getBeeRoot().createAlvearyStructureLogic(this);
+ }
+
+ public TileExtraBeeAlveary(AlvearyMachine.AlvearyPackage alvearyPackage)
+ {
+ super(alvearyPackage);
+ this.structureLogic = Binnie.Genetics.getBeeRoot().createAlvearyStructureLogic(this);
+ }
+
+ public String getTypeUID()
+ {
+ return this.structureLogic.getTypeUID();
+ }
+
+ protected int masterY = -99;
+
+ public void makeMaster() {}
+
+ public void onStructureReset()
+ {
+ setCentralTE(null);
+ this.isMaster = false;
+ this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
+ updateAlvearyBlocks();
+ }
+
+ public ITileStructure getCentralTE()
+ {
+ if ((this.worldObj == null) || (!isIntegratedIntoStructure())) {
+ return null;
+ }
+ if (!isMaster())
+ {
+ TileEntity tile = this.worldObj.getTileEntity(this.masterX, this.masterY, this.masterZ);
+ if ((tile instanceof ITileStructure))
+ {
+ ITileStructure master = (ITileStructure)this.worldObj.getTileEntity(this.masterX, this.masterY, this.masterZ);
+ if (master.isMaster()) {
+ return master;
+ }
+ return null;
+ }
+ return null;
+ }
+ return this;
+ }
+
+ public void validateStructure()
+ {
+ this.structureLogic.validateStructure();
+ updateAlvearyBlocks();
+ }
+
+ private boolean isSameTile(TileEntity tile)
+ {
+ return (tile.xCoord == this.xCoord) && (tile.yCoord == this.yCoord) && (tile.zCoord == this.zCoord);
+ }
+
+ public void setCentralTE(TileEntity tile)
+ {
+ if ((tile == null) || (tile == this) || (isSameTile(tile)))
+ {
+ this.masterX = (this.masterZ = 0);
+ this.masterY = -99;
+ updateAlvearyBlocks();
+ return;
+ }
+ this.isMaster = false;
+ this.masterX = tile.xCoord;
+ this.masterY = tile.yCoord;
+ this.masterZ = tile.zCoord;
+
+
+ markDirty();
+ if (getBeeListener() != null) {
+ ((IAlvearyComponent)tile).registerBeeListener(getBeeListener());
+ }
+ if (getBeeModifier() != null) {
+ ((IAlvearyComponent)tile).registerBeeModifier(getBeeModifier());
+ }
+ updateAlvearyBlocks();
+ }
+
+ public boolean isMaster()
+ {
+ return this.isMaster;
+ }
+
+ protected boolean hasMaster()
+ {
+ return this.masterY >= 0;
+ }
+
+ public boolean isIntegratedIntoStructure()
+ {
+ return (this.isMaster) || (this.masterY >= 0);
+ }
+
+ public void registerBeeModifier(IBeeModifier modifier) {}
+
+ public void removeBeeModifier(IBeeModifier modifier) {}
+
+ public void addTemperatureChange(float change, float boundaryDown, float boundaryUp) {}
+
+ public void addHumidityChange(float change, float boundaryDown, float boundaryUp) {}
+
+ public boolean hasFunction()
+ {
+ return true;
+ }
+
+ public IBeeModifier getBeeModifier()
+ {
+ return (IBeeModifier)getMachine().getInterface(IBeeModifier.class);
+ }
+
+ public IBeeListener getBeeListener()
+ {
+ return (IBeeListener)getMachine().getInterface(IBeeListener.class);
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return getBeeModifier() == null ? 1.0F : getBeeModifier().getTerritoryModifier(genome, currentModifier);
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return getBeeModifier() == null ? 1.0F : getBeeModifier().getMutationModifier(genome, mate, currentModifier);
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return getBeeModifier() == null ? 1.0F : getBeeModifier().getLifespanModifier(genome, mate, currentModifier);
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return getBeeModifier() == null ? 1.0F : getBeeModifier().getProductionModifier(genome, currentModifier);
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return getBeeModifier() == null ? 1.0F : getBeeModifier().getFloweringModifier(genome, currentModifier);
+ }
+
+ public boolean isSealed()
+ {
+ return getBeeModifier() == null ? false : getBeeModifier().isSealed();
+ }
+
+ public boolean isSelfLighted()
+ {
+ return getBeeModifier() == null ? false : getBeeModifier().isSelfLighted();
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ return getBeeModifier() == null ? false : getBeeModifier().isSunlightSimulated();
+ }
+
+ public boolean isHellish()
+ {
+ return getBeeModifier() == null ? false : getBeeModifier().isHellish();
+ }
+
+ public void registerBeeListener(IBeeListener event) {}
+
+ public void removeBeeListener(IBeeListener event) {}
+
+ public void onQueenChange(ItemStack queen)
+ {
+ if (getBeeListener() != null) {
+ getBeeListener().onQueenChange(queen);
+ }
+ }
+
+ public void wearOutEquipment(int amount)
+ {
+ if (getBeeListener() != null) {
+ getBeeListener().wearOutEquipment(amount);
+ }
+ }
+
+ public void onQueenDeath(IBee queen)
+ {
+ if (getBeeListener() != null) {
+ getBeeListener().onQueenDeath(queen);
+ }
+ }
+
+ public void onPostQueenDeath(IBee queen)
+ {
+ if (getBeeListener() != null) {
+ getBeeListener().onPostQueenDeath(queen);
+ }
+ }
+
+ public boolean onPollenRetrieved(IBee queen, IIndividual pollen, boolean isHandled)
+ {
+ return false;
+ }
+
+ public boolean onEggLaid(IBee queen)
+ {
+ return false;
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ return 1.0F;
+ }
+
+ public IBeeHousing getBeeHousing()
+ {
+ return getCentralTE() == null ? null : (IBeeHousing)getCentralTE();
+ }
+
+ List<TileEntity> tiles = new ArrayList();
+
+ public List<TileEntity> getAlvearyBlocks()
+ {
+ updateAlvearyBlocks();
+ return this.tiles;
+ }
+
+ private void updateAlvearyBlocks()
+ {
+ this.tiles.clear();
+ if (getCentralTE() != null)
+ {
+ ITileStructure struct = getCentralTE();
+ if (!struct.isIntegratedIntoStructure()) {
+ return;
+ }
+ TileEntity central = (TileEntity)struct;
+ for (int x = -2; x <= 2; x++) {
+ for (int z = -2; z <= 2; z++) {
+ for (int y = -2; y <= 2; y++)
+ {
+ TileEntity tile = getWorldObj().getTileEntity(this.xCoord + x, this.yCoord + y, this.zCoord + z);
+ if ((tile != null) && ((tile instanceof ITileStructure)) && (((ITileStructure)tile).getCentralTE() == struct)) {
+ this.tiles.add(tile);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public ISidedInventory getStructureInventory()
+ {
+ return (ISidedInventory)getMachine().getInterface(ISidedInventory.class);
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyFrame.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyFrame.java
new file mode 100644
index 0000000000..a910e101f9
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyFrame.java
@@ -0,0 +1,125 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.Binnie;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.machines.IMachine;
+import binnie.core.machines.Machine;
+import binnie.core.machines.inventory.ComponentInventorySlots;
+import binnie.core.machines.inventory.InventorySlot;
+import binnie.core.machines.inventory.SlotValidator;
+import binnie.craftgui.minecraft.IMachineInformation;
+import binnie.extrabees.apiary.ComponentBeeModifier;
+import binnie.extrabees.apiary.ComponentExtraBeeGUI;
+import binnie.extrabees.apiary.TileExtraBeeAlveary;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.core.ExtraBeeTexture;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.apiculture.IBeekeepingMode;
+import forestry.api.apiculture.IHiveFrame;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class AlvearyFrame
+{
+ public static int slotFrame = 0;
+
+ public static class PackageAlvearyFrame
+ extends AlvearyMachine.AlvearyPackage
+ implements IMachineInformation
+ {
+ public PackageAlvearyFrame()
+ {
+ super(ExtraBeeTexture.AlvearyFrame.getTexture(), false);
+ }
+
+ public void createMachine(Machine machine)
+ {
+ new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyFrame);
+
+ ComponentInventorySlots inventory = new ComponentInventorySlots(machine);
+
+ inventory.addSlot(AlvearyFrame.slotFrame, "frame");
+ inventory.getSlot(AlvearyFrame.slotFrame).setValidator(new AlvearyFrame.SlotValidatorFrame());
+
+ new AlvearyFrame.ComponentFrameModifier(machine);
+ }
+ }
+
+ public static class SlotValidatorFrame
+ extends SlotValidator
+ {
+ public SlotValidatorFrame()
+ {
+ super();
+ }
+
+ public boolean isValid(ItemStack itemStack)
+ {
+ return (itemStack != null) && ((itemStack.getItem() instanceof IHiveFrame));
+ }
+
+ public String getTooltip()
+ {
+ return "Hive Frames";
+ }
+ }
+
+ public static class ComponentFrameModifier
+ extends ComponentBeeModifier
+ implements IBeeModifier, IBeeListener
+ {
+ public ComponentFrameModifier(Machine machine)
+ {
+ super();
+ }
+
+ public void wearOutEquipment(int amount)
+ {
+ if (getHiveFrame() == null) {
+ return;
+ }
+ World world = getMachine().getTileEntity().getWorldObj();
+ int wear = Math.round(amount * 5 * Binnie.Genetics.getBeeRoot().getBeekeepingMode(world).getWearModifier());
+ getInventory().setInventorySlotContents(AlvearyFrame.slotFrame, getHiveFrame().frameUsed((IBeeHousing)((TileExtraBeeAlveary)getMachine().getTileEntity()).getCentralTE(), getInventory().getStackInSlot(AlvearyFrame.slotFrame), null, wear));
+ }
+
+ public IHiveFrame getHiveFrame()
+ {
+ if (getInventory().getStackInSlot(AlvearyFrame.slotFrame) != null) {
+ return (IHiveFrame)getInventory().getStackInSlot(AlvearyFrame.slotFrame).getItem();
+ }
+ return null;
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return getHiveFrame() == null ? 1.0F : getHiveFrame().getTerritoryModifier(genome, currentModifier);
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return getHiveFrame() == null ? 1.0F : getHiveFrame().getMutationModifier(genome, mate, currentModifier);
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return getHiveFrame() == null ? 1.0F : getHiveFrame().getLifespanModifier(genome, mate, currentModifier);
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return getHiveFrame() == null ? 1.0F : getHiveFrame().getProductionModifier(genome, currentModifier);
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return getHiveFrame() == null ? 1.0F : getHiveFrame().getFloweringModifier(genome, currentModifier);
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyHatchery.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyHatchery.java
new file mode 100644
index 0000000000..276683b860
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyHatchery.java
@@ -0,0 +1,106 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.Binnie;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.machines.IMachine;
+import binnie.core.machines.Machine;
+import binnie.core.machines.inventory.ComponentInventorySlots;
+import binnie.core.machines.inventory.InventorySlot;
+import binnie.core.machines.inventory.SlotValidator;
+import binnie.core.machines.transfer.TransferRequest;
+import binnie.craftgui.minecraft.IMachineInformation;
+import binnie.extrabees.apiary.ComponentBeeModifier;
+import binnie.extrabees.apiary.ComponentExtraBeeGUI;
+import binnie.extrabees.apiary.TileExtraBeeAlveary;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.core.ExtraBeeTexture;
+import forestry.api.apiculture.EnumBeeType;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.core.EnumErrorCode;
+import java.util.Random;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+
+public class AlvearyHatchery
+{
+ public static int[] slotLarvae = { 0, 1, 2, 3, 4 };
+
+ public static class PackageAlvearyHatchery
+ extends AlvearyMachine.AlvearyPackage
+ implements IMachineInformation
+ {
+ public PackageAlvearyHatchery()
+ {
+ super(ExtraBeeTexture.AlvearyHatchery.getTexture(), false);
+ }
+
+ public void createMachine(Machine machine)
+ {
+ new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyHatchery);
+
+ ComponentInventorySlots inventory = new ComponentInventorySlots(machine);
+ for (InventorySlot slot : inventory.addSlotArray(AlvearyHatchery.slotLarvae, "hatchery")) {
+ slot.setValidator(new AlvearyHatchery.SlotValidatorLarvae());
+ }
+ new AlvearyHatchery.ComponentFrameModifier(machine);
+ }
+ }
+
+ public static class SlotValidatorLarvae
+ extends SlotValidator
+ {
+ public SlotValidatorLarvae()
+ {
+ super();
+ }
+
+ public boolean isValid(ItemStack itemStack)
+ {
+ return (Binnie.Genetics.getBeeRoot().isMember(itemStack)) && (Binnie.Genetics.getBeeRoot().getType(itemStack) == EnumBeeType.LARVAE);
+ }
+
+ public String getTooltip()
+ {
+ return "Larvae";
+ }
+ }
+
+ public static class ComponentFrameModifier
+ extends ComponentBeeModifier
+ implements IBeeModifier, IBeeListener
+ {
+ public ComponentFrameModifier(Machine machine)
+ {
+ super();
+ }
+
+ public void onUpdate()
+ {
+ if (new Random().nextInt(2400) == 0)
+ {
+ TileEntity tile = getMachine().getTileEntity();
+ if ((tile instanceof TileExtraBeeAlveary))
+ {
+ IBeeHousing house = ((TileExtraBeeAlveary)tile).getBeeHousing();
+ if ((house != null) && (house.getErrorState() == EnumErrorCode.OK))
+ {
+ ItemStack queenStack = house.getQueen();
+ IBee queen = queenStack == null ? null : Binnie.Genetics.getBeeRoot().getMember(queenStack);
+ if (queen != null)
+ {
+ ItemStack larvae = Binnie.Genetics.getBeeRoot().getMemberStack(Binnie.Genetics.getBeeRoot().getBee(getMachine().getWorld(), queen.getGenome()), EnumBeeType.LARVAE.ordinal());
+
+
+
+ new TransferRequest(larvae, getInventory()).transfer(true);
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyLighting.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyLighting.java
new file mode 100644
index 0000000000..fad796c889
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyLighting.java
@@ -0,0 +1,41 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.core.machines.Machine;
+import binnie.craftgui.minecraft.IMachineInformation;
+import binnie.extrabees.apiary.ComponentBeeModifier;
+import binnie.extrabees.core.ExtraBeeTexture;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+
+public class AlvearyLighting
+{
+ public static class PackageAlvearyLighting
+ extends AlvearyMachine.AlvearyPackage
+ implements IMachineInformation
+ {
+ public PackageAlvearyLighting()
+ {
+ super(ExtraBeeTexture.AlvearyLighting.getTexture(), false);
+ }
+
+ public void createMachine(Machine machine)
+ {
+ new AlvearyLighting.ComponentLighting(machine);
+ }
+ }
+
+ public static class ComponentLighting
+ extends ComponentBeeModifier
+ implements IBeeModifier, IBeeListener
+ {
+ public ComponentLighting(Machine machine)
+ {
+ super();
+ }
+
+ public boolean isSelfLighted()
+ {
+ return true;
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyMachine.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyMachine.java
new file mode 100644
index 0000000000..2dc0410770
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyMachine.java
@@ -0,0 +1,66 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.core.machines.IMachineType;
+import binnie.core.machines.Machine;
+import binnie.core.machines.MachinePackage;
+import binnie.core.machines.MachineRendererBlock;
+import binnie.core.resource.BinnieResource;
+import binnie.extrabees.apiary.ModuleApiary;
+import binnie.extrabees.apiary.TileExtraBeeAlveary;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+
+public enum AlvearyMachine
+ implements IMachineType
+{
+ Mutator(AlvearyMutator.PackageAlvearyMutator.class), Frame(AlvearyFrame.PackageAlvearyFrame.class), RainShield(AlvearyRainShield.PackageAlvearyRainShield.class), Lighting(AlvearyLighting.PackageAlvearyLighting.class), Stimulator(AlvearyStimulator.PackageAlvearyStimulator.class), Hatchery(AlvearyHatchery.PackageAlvearyHatchery.class), Transmission(AlvearyTransmission.PackageAlvearyTransmission.class);
+
+ Class<? extends MachinePackage> clss;
+
+ private AlvearyMachine(Class<? extends MachinePackage> clss)
+ {
+ this.clss = clss;
+ }
+
+ public Class<? extends MachinePackage> getPackageClass()
+ {
+ return this.clss;
+ }
+
+ public ItemStack get(int size)
+ {
+ return new ItemStack(ModuleApiary.blockComponent, size, ordinal());
+ }
+
+ public static abstract class AlvearyPackage
+ extends MachinePackage
+ {
+ BinnieResource machineTexture;
+
+ public AlvearyPackage(String id, BinnieResource machineTexture, boolean powered)
+ {
+ super(powered);
+ this.machineTexture = machineTexture;
+ }
+
+ public void createMachine(Machine machine) {}
+
+ public TileEntity createTileEntity()
+ {
+ return new TileExtraBeeAlveary(this);
+ }
+
+ public void register() {}
+
+ public void renderMachine(Machine machine, double x, double y, double z, float var8, RenderBlocks renderer)
+ {
+ MachineRendererBlock.instance.renderMachine(this.machineTexture, x, y, z, var8);
+ }
+ }
+
+ public boolean isActive()
+ {
+ return true;
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyMutator.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyMutator.java
new file mode 100644
index 0000000000..9c9fafc15a
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyMutator.java
@@ -0,0 +1,125 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.core.machines.Machine;
+import binnie.core.machines.MachineUtil;
+import binnie.core.machines.inventory.ComponentInventorySlots;
+import binnie.core.machines.inventory.InventorySlot;
+import binnie.core.machines.inventory.SlotValidator;
+import binnie.core.machines.inventory.ValidatorIcon;
+import binnie.craftgui.minecraft.IMachineInformation;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.apiary.ComponentBeeModifier;
+import binnie.extrabees.apiary.ComponentExtraBeeGUI;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.core.ExtraBeeTexture;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import net.minecraft.item.ItemStack;
+
+public class AlvearyMutator
+{
+ public static int slotMutator = 0;
+
+ public static class PackageAlvearyMutator
+ extends AlvearyMachine.AlvearyPackage
+ implements IMachineInformation
+ {
+ public PackageAlvearyMutator()
+ {
+ super(ExtraBeeTexture.AlvearyMutator.getTexture(), false);
+ }
+
+ public void createMachine(Machine machine)
+ {
+ new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyMutator);
+
+ ComponentInventorySlots inventory = new ComponentInventorySlots(machine);
+
+ inventory.addSlot(AlvearyMutator.slotMutator, "mutator");
+ inventory.getSlot(AlvearyMutator.slotMutator).setValidator(new AlvearyMutator.SlotValidatorMutator());
+
+ new AlvearyMutator.ComponentMutatorModifier(machine);
+ }
+ }
+
+ public static class SlotValidatorMutator
+ extends SlotValidator
+ {
+ public SlotValidatorMutator()
+ {
+ super();
+ }
+
+ public boolean isValid(ItemStack itemStack)
+ {
+ return AlvearyMutator.isMutationItem(itemStack);
+ }
+
+ public String getTooltip()
+ {
+ return "Mutagenic Agents";
+ }
+ }
+
+ public static class ComponentMutatorModifier
+ extends ComponentBeeModifier
+ implements IBeeModifier, IBeeListener
+ {
+ public ComponentMutatorModifier(Machine machine)
+ {
+ super();
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ if (getUtil().isSlotEmpty(AlvearyMutator.slotMutator)) {
+ return 1.0F;
+ }
+ float mult = AlvearyMutator.getMutationMult(getUtil().getStack(AlvearyMutator.slotMutator));
+ return Math.min(mult, 15.0F / currentModifier);
+ }
+
+ public void onPostQueenDeath(IBee queen)
+ {
+ getUtil().decreaseStack(AlvearyMutator.slotMutator, 1);
+ }
+ }
+
+ static Map<ItemStack, Float> mutations = new HashMap();
+
+ public static boolean isMutationItem(ItemStack item)
+ {
+ return getMutationMult(item) > 0.0F;
+ }
+
+ public static float getMutationMult(ItemStack item)
+ {
+ if (item == null) {
+ return 1.0F;
+ }
+ for (ItemStack comp : mutations.keySet()) {
+ if ((ItemStack.areItemStackTagsEqual(item, comp)) && (item.isItemEqual(comp))) {
+ return ((Float)mutations.get(comp)).floatValue();
+ }
+ }
+ return 1.0F;
+ }
+
+ public static void addMutationItem(ItemStack item, float chance)
+ {
+ if (item == null) {
+ return;
+ }
+ mutations.put(item, Float.valueOf(chance));
+ }
+
+ public static Collection<ItemStack> getMutagens()
+ {
+ return mutations.keySet();
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyRainShield.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyRainShield.java
new file mode 100644
index 0000000000..18b5dcee34
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyRainShield.java
@@ -0,0 +1,41 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.core.machines.Machine;
+import binnie.craftgui.minecraft.IMachineInformation;
+import binnie.extrabees.apiary.ComponentBeeModifier;
+import binnie.extrabees.core.ExtraBeeTexture;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+
+public class AlvearyRainShield
+{
+ public static class PackageAlvearyRainShield
+ extends AlvearyMachine.AlvearyPackage
+ implements IMachineInformation
+ {
+ public PackageAlvearyRainShield()
+ {
+ super(ExtraBeeTexture.AlvearyRainShield.getTexture(), false);
+ }
+
+ public void createMachine(Machine machine)
+ {
+ new AlvearyRainShield.ComponentRainShield(machine);
+ }
+ }
+
+ public static class ComponentRainShield
+ extends ComponentBeeModifier
+ implements IBeeModifier, IBeeListener
+ {
+ public ComponentRainShield(Machine machine)
+ {
+ super();
+ }
+
+ public boolean isSealed()
+ {
+ return true;
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyStimulator.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyStimulator.java
new file mode 100644
index 0000000000..47b6dab48b
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyStimulator.java
@@ -0,0 +1,430 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.core.circuits.BinnieCircuit;
+import binnie.core.genetics.BeeModifierLogic;
+import binnie.core.genetics.EnumBeeBooleanModifier;
+import binnie.core.genetics.EnumBeeModifier;
+import binnie.core.machines.Machine;
+import binnie.core.machines.MachineUtil;
+import binnie.core.machines.inventory.ComponentInventorySlots;
+import binnie.core.machines.inventory.InventorySlot;
+import binnie.core.machines.inventory.SlotValidator;
+import binnie.core.machines.power.ComponentPowerReceptor;
+import binnie.craftgui.minecraft.IMachineInformation;
+import binnie.extrabees.apiary.ComponentBeeModifier;
+import binnie.extrabees.apiary.ComponentExtraBeeGUI;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.core.ExtraBeeTexture;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.circuits.ChipsetManager;
+import forestry.api.circuits.ICircuit;
+import forestry.api.circuits.ICircuitBoard;
+import forestry.api.circuits.ICircuitLayout;
+import forestry.api.circuits.ICircuitRegistry;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.item.ItemStack;
+
+public class AlvearyStimulator
+{
+ public static int slotCircuit = 0;
+
+ public static class PackageAlvearyStimulator
+ extends AlvearyMachine.AlvearyPackage
+ implements IMachineInformation
+ {
+ public PackageAlvearyStimulator()
+ {
+ super(ExtraBeeTexture.AlvearyStimulator.getTexture(), true);
+ }
+
+ public void createMachine(Machine machine)
+ {
+ new ComponentExtraBeeGUI(machine, ExtraBeeGUID.AlvearyStimulator);
+
+ ComponentInventorySlots inventory = new ComponentInventorySlots(machine);
+
+ inventory.addSlot(AlvearyStimulator.slotCircuit, "circuit");
+ inventory.getSlot(AlvearyStimulator.slotCircuit).setValidator(new AlvearyStimulator.SlotValidatorCircuit());
+
+ ComponentPowerReceptor power = new ComponentPowerReceptor(machine);
+
+
+ new AlvearyStimulator.ComponentStimulatorModifier(machine);
+ }
+ }
+
+ public static class SlotValidatorCircuit
+ extends SlotValidator
+ {
+ public SlotValidatorCircuit()
+ {
+ super();
+ }
+
+ public boolean isValid(ItemStack itemStack)
+ {
+ return (itemStack != null) && (ChipsetManager.circuitRegistry.isChipset(itemStack));
+ }
+
+ public String getTooltip()
+ {
+ return "Forestry Circuits";
+ }
+ }
+
+ public static class ComponentStimulatorModifier
+ extends ComponentBeeModifier
+ implements IBeeModifier, IBeeListener
+ {
+ public ComponentStimulatorModifier(Machine machine)
+ {
+ super();
+ }
+
+ float powerUsage = 0.0F;
+ boolean powered = false;
+
+ public void onUpdate()
+ {
+ super.onUpdate();
+ this.modifiers = getCircuits();
+ this.powerUsage = 0.0F;
+ for (AlvearyStimulator.StimulatorCircuit beeMod : this.modifiers) {
+ this.powerUsage += beeMod.getPowerUsage();
+ }
+ this.powered = getUtil().hasEnergyMJ(this.powerUsage);
+ }
+
+ AlvearyStimulator.StimulatorCircuit[] modifiers = new AlvearyStimulator.StimulatorCircuit[0];
+
+ public ICircuitBoard getHiveFrame()
+ {
+ if (!getUtil().isSlotEmpty(AlvearyStimulator.slotCircuit)) {
+ return ChipsetManager.circuitRegistry.getCircuitboard(getUtil().getStack(AlvearyStimulator.slotCircuit));
+ }
+ return null;
+ }
+
+ public AlvearyStimulator.StimulatorCircuit[] getCircuits()
+ {
+ ICircuitBoard board = getHiveFrame();
+ if (board == null) {
+ return new AlvearyStimulator.StimulatorCircuit[0];
+ }
+ ICircuit[] circuits = board.getCircuits();
+ List<IBeeModifier> mod = new ArrayList();
+ for (ICircuit circuit : circuits) {
+ if ((circuit instanceof AlvearyStimulator.StimulatorCircuit)) {
+ mod.add((AlvearyStimulator.StimulatorCircuit)circuit);
+ }
+ }
+ return (AlvearyStimulator.StimulatorCircuit[])mod.toArray(new AlvearyStimulator.StimulatorCircuit[0]);
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ float mod = 1.0F;
+ if (!this.powered) {
+ return mod;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ mod *= beeMod.getTerritoryModifier(genome, mod);
+ }
+ return mod;
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ float mod = 1.0F;
+ if (!this.powered) {
+ return mod;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ mod *= beeMod.getMutationModifier(genome, mate, mod);
+ }
+ return mod;
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ float mod = 1.0F;
+ if (!this.powered) {
+ return mod;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ mod *= beeMod.getLifespanModifier(genome, mate, mod);
+ }
+ return mod;
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ float mod = 1.0F;
+ if (!this.powered) {
+ return mod;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ mod *= beeMod.getProductionModifier(genome, mod);
+ }
+ return mod;
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ float mod = 1.0F;
+ if (!this.powered) {
+ return mod;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ mod *= beeMod.getFloweringModifier(genome, mod);
+ }
+ return mod;
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ float mod = 1.0F;
+ if (!this.powered) {
+ return mod;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ mod *= beeMod.getGeneticDecay(genome, mod);
+ }
+ return mod;
+ }
+
+ public boolean isSealed()
+ {
+ if (!this.powered) {
+ return false;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ if (beeMod.isSealed()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isSelfLighted()
+ {
+ if (!this.powered) {
+ return false;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ if (beeMod.isSelfLighted()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ if (!this.powered) {
+ return false;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ if (beeMod.isSunlightSimulated()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isHellish()
+ {
+ if (!this.powered) {
+ return false;
+ }
+ for (IBeeModifier beeMod : this.modifiers) {
+ if (beeMod.isHellish()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void wearOutEquipment(int amount)
+ {
+ getUtil().useEnergyMJ(this.powerUsage);
+ }
+ }
+
+ public static class StimulatorCircuit
+ extends BinnieCircuit
+ implements IBeeModifier
+ {
+ AlvearyStimulator.CircuitType type;
+
+ public StimulatorCircuit(AlvearyStimulator.CircuitType type, ICircuitLayout layout)
+ {
+ super(4, layout, Mods.Forestry.item("thermionicTubes"), type.recipe);
+ this.type = type;
+ }
+
+ public int getPowerUsage()
+ {
+ return this.type.power;
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.type.getTerritoryModifier(genome, currentModifier);
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.type.getMutationModifier(genome, mate, currentModifier);
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.type.getLifespanModifier(genome, mate, currentModifier);
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.type.getProductionModifier(genome, currentModifier);
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.type.getFloweringModifier(genome, currentModifier);
+ }
+
+ public boolean isSealed()
+ {
+ return this.type.isSealed();
+ }
+
+ public boolean isSelfLighted()
+ {
+ return this.type.isSelfLighted();
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ return this.type.isSunlightSimulated();
+ }
+
+ public boolean isHellish()
+ {
+ return this.type.isHellish();
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ return this.type.getGeneticDecay(genome, currentModifier);
+ }
+ }
+
+ public static enum CircuitType
+ implements IBeeModifier
+ {
+ LowVoltage(3, 10), HighVoltage(5, 20), Plant(10, 10), Death(6, 10), Life(11, 10), Nether(7, 15), Mutation(4, 15), Inhibitor(1, 10), Territory(2, 10);
+
+ public int recipe;
+ public int power;
+ BeeModifierLogic logic = new BeeModifierLogic();
+
+ static
+ {
+ LowVoltage.logic.setModifier(EnumBeeModifier.Production, 1.5F, 5.0F);
+ HighVoltage.logic.setModifier(EnumBeeModifier.Production, 2.5F, 10.0F);
+ Plant.logic.setModifier(EnumBeeModifier.Flowering, 1.5F, 5.0F);
+ Death.logic.setModifier(EnumBeeModifier.Lifespan, 0.8F, 0.2F);
+ Life.logic.setModifier(EnumBeeModifier.Lifespan, 1.5F, 5.0F);
+ Nether.logic.setModifier(EnumBeeBooleanModifier.Hellish);
+ Mutation.logic.setModifier(EnumBeeModifier.Mutation, 1.5F, 5.0F);
+ Inhibitor.logic.setModifier(EnumBeeModifier.Territory, 0.4F, 0.1F);
+ Inhibitor.logic.setModifier(EnumBeeModifier.Production, 0.9F, 0.5F);
+ Territory.logic.setModifier(EnumBeeModifier.Territory, 1.5F, 5.0F);
+ for (CircuitType type : values()) {
+ type.logic.setModifier(EnumBeeModifier.GeneticDecay, 1.5F, 10.0F);
+ }
+ }
+
+ private CircuitType(int recipe, int power)
+ {
+ this.recipe = recipe;
+ this.power = power;
+ }
+
+ public void createCircuit(ICircuitLayout layout)
+ {
+ AlvearyStimulator.StimulatorCircuit circuit = new AlvearyStimulator.StimulatorCircuit(this, layout);
+ for (EnumBeeModifier modifier : EnumBeeModifier.values())
+ {
+ float mod = this.logic.getModifier(modifier, 1.0F);
+ if (mod != 1.0F) {
+ if (mod > 1.0F)
+ {
+ int increase = (int)((mod - 1.0F) * 100.0F);
+ circuit.addTooltipString("Increases " + modifier.getName() + " by " + increase + "%");
+ }
+ else
+ {
+ int decrease = (int)((1.0F - mod) * 100.0F);
+ circuit.addTooltipString("Decreases " + modifier.getName() + " by " + decrease + "%");
+ }
+ }
+ }
+ }
+
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Territory, currentModifier);
+ }
+
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Mutation, currentModifier);
+ }
+
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Lifespan, currentModifier);
+ }
+
+ public float getProductionModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Production, currentModifier);
+ }
+
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.Flowering, currentModifier);
+ }
+
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier)
+ {
+ return this.logic.getModifier(EnumBeeModifier.GeneticDecay, currentModifier);
+ }
+
+ public boolean isSealed()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.Sealed);
+ }
+
+ public boolean isSelfLighted()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.SelfLighted);
+ }
+
+ public boolean isSunlightSimulated()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.SunlightStimulated);
+ }
+
+ public boolean isHellish()
+ {
+ return this.logic.getModifier(EnumBeeBooleanModifier.Hellish);
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/apiary/machine/AlvearyTransmission.java b/src/Java/binnie/extrabees/apiary/machine/AlvearyTransmission.java
new file mode 100644
index 0000000000..b041bf1c37
--- /dev/null
+++ b/src/Java/binnie/extrabees/apiary/machine/AlvearyTransmission.java
@@ -0,0 +1,81 @@
+package binnie.extrabees.apiary.machine;
+
+import binnie.core.machines.IMachine;
+import binnie.core.machines.Machine;
+import binnie.core.machines.MachineComponent;
+import binnie.core.machines.MachineUtil;
+import binnie.core.machines.power.ComponentPowerReceptor;
+import binnie.core.machines.power.IPoweredMachine;
+import binnie.craftgui.minecraft.IMachineInformation;
+import binnie.extrabees.apiary.TileExtraBeeAlveary;
+import binnie.extrabees.core.ExtraBeeTexture;
+import cofh.api.energy.IEnergyHandler;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class AlvearyTransmission
+{
+ public static class PackageAlvearyTransmission
+ extends AlvearyMachine.AlvearyPackage
+ implements IMachineInformation
+ {
+ public PackageAlvearyTransmission()
+ {
+ super(ExtraBeeTexture.AlvearyTransmission.getTexture(), false);
+ }
+
+ public void createMachine(Machine machine)
+ {
+ new ComponentPowerReceptor(machine, 1000);
+ new AlvearyTransmission.ComponentTransmission(machine);
+ }
+ }
+
+ public static class ComponentTransmission
+ extends MachineComponent
+ {
+ public ComponentTransmission(Machine machine)
+ {
+ super();
+ }
+
+ public void onUpdate()
+ {
+ super.onUpdate();
+ int energy = getUtil().getPoweredMachine().getEnergyStored(ForgeDirection.NORTH);
+ if (energy == 0) {
+ return;
+ }
+ TileExtraBeeAlveary tile = (TileExtraBeeAlveary)getMachine().getTileEntity();
+
+ List<IEnergyHandler> handlers = new ArrayList();
+ for (TileEntity alvearyTile : tile.getAlvearyBlocks()) {
+ if (((alvearyTile instanceof IEnergyHandler)) && (alvearyTile != tile)) {
+ handlers.add((IEnergyHandler)alvearyTile);
+ }
+ }
+ if (handlers.isEmpty()) {
+ return;
+ }
+ int maxOutput = 500;
+ int output = energy / handlers.size();
+ if (output > maxOutput) {
+ output = maxOutput;
+ }
+ if (output < 1) {
+ output = 1;
+ }
+ for (IEnergyHandler handler : handlers)
+ {
+ int recieved = handler.receiveEnergy(ForgeDirection.NORTH, output, false);
+ getUtil().getPoweredMachine().extractEnergy(ForgeDirection.NORTH, recieved, false);
+ energy = getUtil().getPoweredMachine().getEnergyStored(ForgeDirection.NORTH);
+ if (energy == 0) {
+ return;
+ }
+ }
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/config/ConfigurationMachines.java b/src/Java/binnie/extrabees/config/ConfigurationMachines.java
new file mode 100644
index 0000000000..7d08d216f2
--- /dev/null
+++ b/src/Java/binnie/extrabees/config/ConfigurationMachines.java
@@ -0,0 +1,17 @@
+package binnie.extrabees.config;
+
+import binnie.core.mod.config.ConfigFile;
+import binnie.core.mod.config.ConfigProperty;
+import binnie.core.mod.config.PropDouble;
+import binnie.core.mod.config.PropPercentage;
+
+@ConfigFile(filename="/config/forestry/extrabees/machines.conf")
+public class ConfigurationMachines
+{
+ @ConfigProperty(key="isolatorConsumptionChance", comment={"Percentage chance of Isolator consuming bee, in x%."})
+ @PropPercentage
+ public static int isolatorConsumptionChance = 30;
+ @ConfigProperty(key="geneticErrorModifier", comment={"Modifier that changes how severe splicer/inoculator erros are.", "0 would result in no errors, even for awful serums.", "2.0 would result in twice as severe errors"})
+ @PropDouble
+ public static double geneticErrorModifier = 1.0D;
+}
diff --git a/src/Java/binnie/extrabees/config/ConfigurationMain.java b/src/Java/binnie/extrabees/config/ConfigurationMain.java
new file mode 100644
index 0000000000..e6ee442a14
--- /dev/null
+++ b/src/Java/binnie/extrabees/config/ConfigurationMain.java
@@ -0,0 +1,26 @@
+package binnie.extrabees.config;
+
+import binnie.core.mod.config.ConfigFile;
+import binnie.core.mod.config.ConfigProperty;
+import binnie.core.mod.config.PropBoolean;
+import binnie.core.mod.config.PropInteger;
+
+@ConfigFile(filename="/config/forestry/extrabees/main.conf")
+public class ConfigurationMain
+{
+ @ConfigProperty(key="canQuarryMineHives")
+ @PropBoolean
+ public static boolean canQuarryMineHives = true;
+ @ConfigProperty(key="waterHiveRate")
+ @PropInteger
+ public static int waterHiveRate = 1;
+ @ConfigProperty(key="rockHiveRate")
+ @PropInteger
+ public static int rockHiveRate = 2;
+ @ConfigProperty(key="netherHiveRate")
+ @PropInteger
+ public static int netherHiveRate = 2;
+ @ConfigProperty(key="marbleHiveRate")
+ @PropInteger
+ public static int marbleHiveRate = 2;
+}
diff --git a/src/Java/binnie/extrabees/core/ExtraBeeGUID.java b/src/Java/binnie/extrabees/core/ExtraBeeGUID.java
new file mode 100644
index 0000000000..4d9667460c
--- /dev/null
+++ b/src/Java/binnie/extrabees/core/ExtraBeeGUID.java
@@ -0,0 +1,54 @@
+package binnie.extrabees.core;
+
+import binnie.core.gui.IBinnieGUID;
+import binnie.craftgui.minecraft.Window;
+import binnie.extrabees.gui.WindowAlvearyFrame;
+import binnie.extrabees.gui.WindowAlvearyHatchery;
+import binnie.extrabees.gui.WindowAlvearyMutator;
+import binnie.extrabees.gui.WindowAlvearyStimulator;
+import binnie.extrabees.gui.database.WindowApiaristDatabase;
+import cpw.mods.fml.relauncher.Side;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public enum ExtraBeeGUID
+ implements IBinnieGUID
+{
+ Database, DatabaseNEI, AlvearyMutator, AlvearyFrame, AlvearyStimulator, PunnettSquare, AlvearyHatchery;
+
+ private ExtraBeeGUID() {}
+
+ public Window getWindow(EntityPlayer player, World world, int x, int y, int z, Side side)
+ {
+ Window window = null;
+
+ TileEntity tileEntity = world.getTileEntity(x, y, z);
+
+ IInventory object = null;
+ if ((tileEntity instanceof IInventory)) {
+ object = (IInventory)tileEntity;
+ }
+ switch (1.$SwitchMap$binnie$extrabees$core$ExtraBeeGUID[ordinal()])
+ {
+ case 1:
+ case 2:
+ window = WindowApiaristDatabase.create(player, side, this != Database);
+ break;
+ case 3:
+ window = WindowAlvearyMutator.create(player, object, side);
+ break;
+ case 4:
+ window = WindowAlvearyFrame.create(player, object, side);
+ break;
+ case 5:
+ window = WindowAlvearyStimulator.create(player, object, side);
+ break;
+ case 6:
+ window = WindowAlvearyHatchery.create(player, object, side);
+ break;
+ }
+ return window;
+ }
+}
diff --git a/src/Java/binnie/extrabees/core/ExtraBeeItems.java b/src/Java/binnie/extrabees/core/ExtraBeeItems.java
new file mode 100644
index 0000000000..3bcea19f08
--- /dev/null
+++ b/src/Java/binnie/extrabees/core/ExtraBeeItems.java
@@ -0,0 +1,172 @@
+package binnie.extrabees.core;
+
+import binnie.Binnie;
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.core.item.IItemMisc;
+import binnie.core.liquid.ManagerLiquid;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.recipes.ICarpenterManager;
+import forestry.api.recipes.RecipeManagers;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.oredict.OreDictionary;
+
+public enum ExtraBeeItems
+ implements IItemMisc
+{
+ ScentedGear("Scented Gear", "scentedGear"), DiamondShard("Diamond Fragment", "diamondShard"), EmeraldShard("Emerald Fragment", "emeraldShard"), RubyShard("Ruby Fragment", "rubyShard"), SapphireShard("Sapphire Fragment", "sapphireShard"), LapisShard("Lapis Fragment", "lapisShard"), IronDust("Iron Grains", "ironDust"), GoldDust("Gold Grains", "goldDust"), SilverDust("Silver Grains", "silverDust"), PlatinumDust("Platinum Grains", "platinumDust"), CopperDust("Copper Grains", "copperDust"), TinDust("Tin Grains", "tinDust"), NickelDust("Nickel Grains", "nickelDust"), LeadDust("Lead Grains", "leadDust"), ZincDust("Zinc Grains", "zincDust"), TitaniumDust("Titanium Grains", "titaniumDust"), TungstenDust("Tungsten Grains", "tungstenDust"), UraniumDust("Radioactive Fragments", "radioactiveDust"), CoalDust("Coal Grains", "coalDust"), RedDye("Red Dye", "dyeRed"), YellowDye("Yellow Dye", "dyeYellow"), BlueDye("Blue Dye", "dyeBlue"), GreenDye("Green Dye", "dyeGreen"), WhiteDye("White Dye", "dyeWhite"), BlackDye("Black Dye", "dyeBlack"), BrownDye("Brown Dye", "dyeBrown"), ClayDust("Clay Dust", "clayDust"), YelloriumDust("Yellorium Grains", "yelloriumDust"), BlutoniumDust("Blutonium Grains", "blutoniumDust"), CyaniteDust("Cyanite Grains", "cyaniteDust");
+
+ String name;
+ String iconPath;
+ IIcon icon;
+
+ static
+ {
+ TinDust.setMetal("Tin");
+ ZincDust.setMetal("Zinc");
+ CopperDust.setMetal("Copper");
+ IronDust.setMetal("Iron");
+ NickelDust.setMetal("Nickel");
+ LeadDust.setMetal("Lead");
+ SilverDust.setMetal("Silver");
+ GoldDust.setMetal("Gold");
+ PlatinumDust.setMetal("Platinum");
+ TungstenDust.setMetal("Tungsten");
+ TitaniumDust.setMetal("Titanium");
+ CoalDust.setMetal("Coal");
+
+ YelloriumDust.setMetal("Yellorium");
+ BlutoniumDust.setMetal("Blutonium");
+ CyaniteDust.setMetal("Cyanite");
+
+ DiamondShard.setGem("Diamond");
+ EmeraldShard.setGem("Emerald");
+ RubyShard.setGem("Ruby");
+ SapphireShard.setGem("Sapphire");
+ }
+
+ public static void init()
+ {
+ OreDictionary.registerOre("dyeRed", RedDye.get(1));
+ OreDictionary.registerOre("dyeYellow", YellowDye.get(1));
+ OreDictionary.registerOre("dyeBlue", BlueDye.get(1));
+ OreDictionary.registerOre("dyeGreen", GreenDye.get(1));
+ OreDictionary.registerOre("dyeBlack", BlackDye.get(1));
+ OreDictionary.registerOre("dyeWhite", WhiteDye.get(1));
+ OreDictionary.registerOre("dyeBrown", BrownDye.get(1));
+ }
+
+ public static void postInit()
+ {
+ ItemStack lapisShard = LapisShard.get(1);
+ GameRegistry.addShapelessRecipe(new ItemStack(Items.dye, 1, 4), new Object[] { lapisShard, lapisShard, lapisShard, lapisShard });
+ for (ExtraBeeItems item : values()) {
+ if (item.metalString != null)
+ {
+ ItemStack dust = null;
+ ItemStack ingot = null;
+ if (!OreDictionary.getOres("ingot" + item.metalString).isEmpty()) {
+ ingot = ((ItemStack)OreDictionary.getOres("ingot" + item.metalString).get(0)).copy();
+ }
+ if (!OreDictionary.getOres("dust" + item.metalString).isEmpty()) {
+ dust = ((ItemStack)OreDictionary.getOres("dust" + item.metalString).get(0)).copy();
+ }
+ ItemStack input = item.get(1);
+ if (dust != null) {
+ GameRegistry.addShapelessRecipe(dust, new Object[] { input, input, input, input });
+ } else if (ingot != null) {
+ GameRegistry.addShapelessRecipe(ingot, new Object[] { input, input, input, input, input, input, input, input, input });
+ } else if (item == CoalDust) {
+ GameRegistry.addShapelessRecipe(new ItemStack(Items.coal), new Object[] { input, input, input, input });
+ }
+ }
+ else if (item.gemString != null)
+ {
+ ItemStack gem = null;
+ if (!OreDictionary.getOres("gem" + item.gemString).isEmpty()) {
+ gem = (ItemStack)OreDictionary.getOres("gem" + item.gemString).get(0);
+ }
+ ItemStack input = item.get(1);
+ if (gem != null) {
+ GameRegistry.addShapelessRecipe(gem.copy(), new Object[] { input, input, input, input, input, input, input, input, input });
+ }
+ }
+ }
+ Item woodGear = null;
+ try
+ {
+ woodGear = (Item)Class.forName("buildcraft.BuildCraftCore").getField("woodenGearItem").get(null);
+ }
+ catch (Exception e) {}
+ ItemStack gear = new ItemStack(Blocks.planks, 1);
+ if (woodGear != null) {
+ gear = new ItemStack(woodGear, 1);
+ }
+ RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("for.honey", 500), null, ScentedGear.get(1), new Object[] { " j ", "bgb", " p ", Character.valueOf('j'), Mods.Forestry.item("royalJelly"), Character.valueOf('b'), Mods.Forestry.item("beeswax"), Character.valueOf('p'), Mods.Forestry.item("pollen"), Character.valueOf('g'), gear });
+ }
+
+ String metalString = null;
+ String gemString = null;
+
+ private ExtraBeeItems(String name, String iconPath)
+ {
+ this.name = name;
+ this.iconPath = iconPath;
+ }
+
+ private void setGem(String string)
+ {
+ this.gemString = string;
+ }
+
+ private void setMetal(String string)
+ {
+ this.metalString = string;
+ }
+
+ public boolean isActive()
+ {
+ if (this.metalString != null) {
+ return (!OreDictionary.getOres("ingot" + this.metalString).isEmpty()) || (!OreDictionary.getOres("dust" + this.metalString).isEmpty()) || (this == CoalDust);
+ }
+ if (this.gemString != null) {
+ return !OreDictionary.getOres("gem" + this.gemString).isEmpty();
+ }
+ return true;
+ }
+
+ public IIcon getIcon(ItemStack stack)
+ {
+ return this.icon;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.icon = ExtraBees.proxy.getIcon(register, "misc/" + this.iconPath);
+ }
+
+ public String getName(ItemStack stack)
+ {
+ return this.name;
+ }
+
+ public ItemStack get(int i)
+ {
+ return new ItemStack(ExtraBees.itemMisc, i, ordinal());
+ }
+
+ public void addInformation(List par3List) {}
+}
diff --git a/src/Java/binnie/extrabees/core/ExtraBeeTexture.java b/src/Java/binnie/extrabees/core/ExtraBeeTexture.java
new file mode 100644
index 0000000000..6827b81144
--- /dev/null
+++ b/src/Java/binnie/extrabees/core/ExtraBeeTexture.java
@@ -0,0 +1,28 @@
+package binnie.extrabees.core;
+
+import binnie.Binnie;
+import binnie.core.resource.BinnieResource;
+import binnie.core.resource.IBinnieTexture;
+import binnie.core.resource.ManagerResource;
+import binnie.core.resource.ResourceType;
+import binnie.extrabees.ExtraBees;
+
+public enum ExtraBeeTexture
+ implements IBinnieTexture
+{
+ AlvearyMutator(ResourceType.Tile, "alveary/AlvearyMutator"), AlvearyNovaBlock(ResourceType.Tile, "alveary/AlvearyNovaBlock"), AlvearyFrame(ResourceType.Tile, "alveary/AlvearyFrame"), AlvearyLighting(ResourceType.Tile, "alveary/AlvearyLighting"), AlvearyRainShield(ResourceType.Tile, "alveary/AlvearyRainShield"), AlvearyStimulator(ResourceType.Tile, "alveary/AlvearyStimulator"), AlvearyHatchery(ResourceType.Tile, "alveary/AlvearyHatchery"), FX(ResourceType.FX, "fx"), GUIPunnett(ResourceType.GUI, "punnett"), GUIProgress(ResourceType.GUI, "processes"), GUIProgress2(ResourceType.GUI, "processes2"), AlvearyTransmission(ResourceType.Tile, "alveary/AlvearyTransmission");
+
+ String texture;
+ ResourceType type;
+
+ private ExtraBeeTexture(ResourceType base, String texture)
+ {
+ this.texture = texture;
+ this.type = base;
+ }
+
+ public BinnieResource getTexture()
+ {
+ return Binnie.Resource.getPNG(ExtraBees.instance, this.type, this.texture);
+ }
+}
diff --git a/src/Java/binnie/extrabees/core/ModuleCore.java b/src/Java/binnie/extrabees/core/ModuleCore.java
new file mode 100644
index 0000000000..14786ddc77
--- /dev/null
+++ b/src/Java/binnie/extrabees/core/ModuleCore.java
@@ -0,0 +1,19 @@
+package binnie.extrabees.core;
+
+import binnie.Binnie;
+import binnie.core.IInitializable;
+import binnie.core.item.ManagerItem;
+import forestry.api.core.Tabs;
+
+public class ModuleCore
+ implements IInitializable
+{
+ public void preInit()
+ {
+ binnie.extrabees.ExtraBees.itemMisc = Binnie.Item.registerMiscItems(ExtraBeeItems.values(), Tabs.tabApiculture);
+ }
+
+ public void init() {}
+
+ public void postInit() {}
+}
diff --git a/src/Java/binnie/extrabees/genetics/ExtraBeeMutation.java b/src/Java/binnie/extrabees/genetics/ExtraBeeMutation.java
new file mode 100644
index 0000000000..c3a849c9e5
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/ExtraBeeMutation.java
@@ -0,0 +1,478 @@
+package binnie.extrabees.genetics;
+
+import binnie.Binnie;
+import binnie.core.genetics.ForestryAllele.BeeSpecies;
+import binnie.core.genetics.ManagerGenetics;
+import com.mojang.authlib.GameProfile;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeMutation;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.apiculture.IBeekeepingMode;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IGenome;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.common.BiomeDictionary.Type;
+
+public class ExtraBeeMutation
+ implements IBeeMutation
+{
+ public static void doInit()
+ {
+ IAlleleBeeSpecies[] vanilla = new IAlleleBeeSpecies[0];
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.ARID, 10);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.ARID, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.ARID, ForestryAllele.BeeSpecies.Common.getAllele(), ExtraBeesSpecies.BARREN, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.ARID, ExtraBeesSpecies.BARREN, ExtraBeesSpecies.DESOLATE, 8);
+
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.BARREN, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.GNAWING, 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.DESOLATE, ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.ROTTEN, 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.DESOLATE, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.BONE, 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.DESOLATE, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.CREEPER, 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.BARREN, ForestryAllele.BeeSpecies.Marshy.getAllele(), ExtraBeesSpecies.DECOMPOSING, 15);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.STONE, 12);
+ new ExtraBeeMutation(ExtraBeesSpecies.STONE, ForestryAllele.BeeSpecies.Unweary.getAllele(), ExtraBeesSpecies.GRANITE, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.GRANITE, ForestryAllele.BeeSpecies.Industrious.getAllele(), ExtraBeesSpecies.MINERAL, 6);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.IRON, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.IRON, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Wintry.getAllele(), ExtraBeesSpecies.COPPER, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.COPPER, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Marshy.getAllele(), ExtraBeesSpecies.TIN, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.TIN, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.LEAD, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.LEAD, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Wintry.getAllele(), ExtraBeesSpecies.ZINC, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.ZINC, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.NICKEL, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Marshy.getAllele(), ExtraBeesSpecies.NICKEL, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Cultivated.getAllele(), ExtraBeesSpecies.TITANIUM, 3);
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Common.getAllele(), ExtraBeesSpecies.TUNGSTATE, 3);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.ZINC, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 2);
+ new ExtraBeeMutation(ExtraBeesSpecies.TIN, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 2);
+ new ExtraBeeMutation(ExtraBeesSpecies.LEAD, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 2);
+ new ExtraBeeMutation(ExtraBeesSpecies.TITANIUM, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.SILVER, 3);
+
+ new ExtraBeeMutation(ExtraBeesSpecies.IRON, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 2);
+ new ExtraBeeMutation(ExtraBeesSpecies.COPPER, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 2);
+ new ExtraBeeMutation(ExtraBeesSpecies.NICKEL, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 2);
+ new ExtraBeeMutation(ExtraBeesSpecies.TUNGSTATE, ForestryAllele.BeeSpecies.Majestic.getAllele(), ExtraBeesSpecies.GOLD, 3);
+
+ new ExtraBeeMutation(ExtraBeesSpecies.GOLD, ExtraBeesSpecies.SILVER, ExtraBeesSpecies.PLATINUM, 2);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.MINERAL, ForestryAllele.BeeSpecies.Imperial.getAllele(), ExtraBeesSpecies.LAPIS, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ForestryAllele.BeeSpecies.Forest.getAllele(), ExtraBeesSpecies.EMERALD, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ForestryAllele.BeeSpecies.Modest.getAllele(), ExtraBeesSpecies.RUBY, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ExtraBeesSpecies.WATER, ExtraBeesSpecies.SAPPHIRE, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.LAPIS, ForestryAllele.BeeSpecies.Cultivated.getAllele(), ExtraBeesSpecies.DIAMOND, 5);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.PREHISTORIC, ExtraBeesSpecies.MINERAL, ExtraBeesSpecies.UNSTABLE, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.IRON, ExtraBeesSpecies.NUCLEAR, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.COPPER, ExtraBeesSpecies.NUCLEAR, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.TIN, ExtraBeesSpecies.NUCLEAR, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.ZINC, ExtraBeesSpecies.NUCLEAR, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.NICKEL, ExtraBeesSpecies.NUCLEAR, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.UNSTABLE, ExtraBeesSpecies.LEAD, ExtraBeesSpecies.NUCLEAR, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ExtraBeesSpecies.GOLD, ExtraBeesSpecies.RADIOACTIVE, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ExtraBeesSpecies.SILVER, ExtraBeesSpecies.RADIOACTIVE, 5);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.YELLORIUM, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.NUCLEAR, ExtraBeesSpecies.YELLORIUM, ExtraBeesSpecies.CYANITE, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.YELLORIUM, ExtraBeesSpecies.CYANITE, ExtraBeesSpecies.BLUTONIUM, 5);
+
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Noble.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.ANCIENT, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.ANCIENT, ForestryAllele.BeeSpecies.Secluded.getAllele(), ExtraBeesSpecies.PRIMEVAL, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ExtraBeesSpecies.ANCIENT, ExtraBeesSpecies.PREHISTORIC, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.PREHISTORIC, ForestryAllele.BeeSpecies.Imperial.getAllele(), ExtraBeesSpecies.RELIC, 8);
+
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ExtraBeesSpecies.GROWING, ExtraBeesSpecies.COAL, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ForestryAllele.BeeSpecies.Rural.getAllele(), ExtraBeesSpecies.COAL, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ForestryAllele.BeeSpecies.Miry.getAllele(), ExtraBeesSpecies.RESIN, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ExtraBeesSpecies.OCEAN, ExtraBeesSpecies.OIL, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.PRIMEVAL, ForestryAllele.BeeSpecies.Frugal.getAllele(), ExtraBeesSpecies.OIL, 8);
+
+
+
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.OIL, ForestryAllele.BeeSpecies.Industrious.getAllele(), ExtraBeesSpecies.DISTILLED, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.DISTILLED, ExtraBeesSpecies.OIL, ExtraBeesSpecies.FUEL, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.DISTILLED, ExtraBeesSpecies.COAL, ExtraBeesSpecies.CREOSOTE, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.DISTILLED, ExtraBeesSpecies.RESIN, ExtraBeesSpecies.LATEX, 8);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.RIVER, 10, new RequirementBiomeType(BiomeDictionary.Type.RIVER));
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.OCEAN, 10, new RequirementBiomeType(BiomeDictionary.Type.OCEAN));
+ new ExtraBeeMutation(ExtraBeesSpecies.BLACK, ExtraBeesSpecies.OCEAN, ExtraBeesSpecies.INK, 8);
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.GROWING, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.GROWING, ForestryAllele.BeeSpecies.Unweary.getAllele(), ExtraBeesSpecies.THRIVING, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.THRIVING, ForestryAllele.BeeSpecies.Industrious.getAllele(), ExtraBeesSpecies.BLOOMING, 8);
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Valiant.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.SWEET, 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.SWEET, ForestryAllele.BeeSpecies.Rural.getAllele(), ExtraBeesSpecies.SUGAR, 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.SWEET, ExtraBeesSpecies.GROWING, ExtraBeesSpecies.RIPENING, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.SWEET, ExtraBeesSpecies.THRIVING, ExtraBeesSpecies.FRUIT, 5);
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.ALCOHOL, 10);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ForestryAllele.BeeSpecies.Meadows.getAllele(), ExtraBeesSpecies.FARM, 10);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ExtraBeesSpecies.WATER, ExtraBeesSpecies.MILK, 10);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Farmerly.getAllele(), ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.COFFEE, 10);
+
+
+
+
+
+
+
+
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Miry.getAllele(), ExtraBeesSpecies.SWAMP, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.SWAMP, ForestryAllele.BeeSpecies.Boggy.getAllele(), ExtraBeesSpecies.BOGGY, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.BOGGY, ExtraBeesSpecies.SWAMP, ExtraBeesSpecies.FUNGAL, 8);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Boggy.getAllele(), ForestryAllele.BeeSpecies.Miry.getAllele(), ExtraBeesSpecies.FUNGAL, 8);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Modest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Modest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Modest.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Common.getTemplate(), 15);
+
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Common.getAllele(), ForestryAllele.BeeSpecies.Cultivated.getTemplate(), 12);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Common.getAllele(), ForestryAllele.BeeSpecies.Cultivated.getTemplate(), 12);
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Common.getAllele(), ForestryAllele.BeeSpecies.Cultivated.getTemplate(), 12);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Fiendish.getAllele(), ExtraBeesSpecies.TEMPERED, 30, new RequirementBiomeType(BiomeDictionary.Type.NETHER));
+ new ExtraBeeMutation(ExtraBeesSpecies.TEMPERED, ForestryAllele.BeeSpecies.Demonic.getAllele(), ExtraBeesSpecies.VOLCANIC, 20, new RequirementBiomeType(BiomeDictionary.Type.NETHER));
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Cultivated.getAllele(), ForestryAllele.BeeSpecies.Sinister.getTemplate(), 60, new RequirementBiomeType(BiomeDictionary.Type.NETHER));
+
+ new ExtraBeeMutation(ExtraBeesSpecies.BASALT, ForestryAllele.BeeSpecies.Sinister.getAllele(), ForestryAllele.BeeSpecies.Fiendish.getTemplate(), 40, new RequirementBiomeType(BiomeDictionary.Type.NETHER));
+
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Sinister.getAllele(), ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.MALICIOUS, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.MALICIOUS, ForestryAllele.BeeSpecies.Tropical.getAllele(), ExtraBeesSpecies.INFECTIOUS, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.MALICIOUS, ExtraBeesSpecies.INFECTIOUS, ExtraBeesSpecies.VIRULENT, 8);
+
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Exotic.getAllele(), ExtraBeesSpecies.VISCOUS, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.VISCOUS, ForestryAllele.BeeSpecies.Exotic.getAllele(), ExtraBeesSpecies.GLUTINOUS, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.VISCOUS, ExtraBeesSpecies.GLUTINOUS, ExtraBeesSpecies.STICKY, 8);
+
+ new ExtraBeeMutation(ExtraBeesSpecies.MALICIOUS, ExtraBeesSpecies.VISCOUS, ExtraBeesSpecies.CORROSIVE, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.CORROSIVE, ForestryAllele.BeeSpecies.Fiendish.getAllele(), ExtraBeesSpecies.CAUSTIC, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.CORROSIVE, ExtraBeesSpecies.CAUSTIC, ExtraBeesSpecies.ACIDIC, 4);
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Cultivated.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.EXCITED, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.EXCITED, ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.ENERGETIC, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.EXCITED, ExtraBeesSpecies.ENERGETIC, ExtraBeesSpecies.ECSTATIC, 8);
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Diligent.getAllele(), ExtraBeesSpecies.ARTIC, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.OCEAN, ExtraBeesSpecies.ARTIC, ExtraBeesSpecies.FREEZING, 10);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Sinister.getAllele(), ExtraBeesSpecies.SHADOW, 10);
+ new ExtraBeeMutation(ExtraBeesSpecies.SHADOW, ExtraBeesSpecies.ROCK, ExtraBeesSpecies.DARKENED, 8);
+ new ExtraBeeMutation(ExtraBeesSpecies.SHADOW, ExtraBeesSpecies.DARKENED, ExtraBeesSpecies.ABYSS, 8);
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Forest.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.RED, 5);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Meadows.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.YELLOW, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.WATER, ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.BLUE, 5);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Tropical.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.GREEN, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.ROCK, ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.BLACK, 5);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Wintry.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.WHITE, 5);
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Marshy.getAllele(), ForestryAllele.BeeSpecies.Valiant.getAllele(), ExtraBeesSpecies.BROWN, 5);
+
+ new ExtraBeeMutation(ExtraBeesSpecies.RED, ExtraBeesSpecies.YELLOW, ExtraBeesSpecies.ORANGE, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.GREEN, ExtraBeesSpecies.BLUE, ExtraBeesSpecies.CYAN, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.RED, ExtraBeesSpecies.BLUE, ExtraBeesSpecies.PURPLE, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.BLACK, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.GRAY, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.BLUE, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.LIGHTBLUE, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.RED, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.PINK, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.GREEN, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.LIMEGREEN, 5);
+
+ new ExtraBeeMutation(ExtraBeesSpecies.PURPLE, ExtraBeesSpecies.PINK, ExtraBeesSpecies.MAGENTA, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.GRAY, ExtraBeesSpecies.WHITE, ExtraBeesSpecies.LIGHTGRAY, 5);
+
+
+
+
+ new ExtraBeeMutation(ExtraBeesSpecies.TEMPERED, ExtraBeesSpecies.EXCITED, ExtraBeesSpecies.GLOWSTONE, 5);
+
+
+
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Austere.getAllele(), ExtraBeesSpecies.DESOLATE, ExtraBeesSpecies.HAZARDOUS, 5);
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Ended.getAllele(), ExtraBeesSpecies.RELIC, ExtraBeesSpecies.JADED, 2, new RequirementPerson("jadedcat"));
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Austere.getAllele(), ExtraBeesSpecies.EXCITED, ExtraBeesSpecies.CELEBRATORY, 5);
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Secluded.getAllele(), ForestryAllele.BeeSpecies.Ended.getAllele(), ExtraBeesSpecies.UNUSUAL, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.UNUSUAL, ForestryAllele.BeeSpecies.Hermitic.getAllele(), ExtraBeesSpecies.SPATIAL, 5);
+ new ExtraBeeMutation(ExtraBeesSpecies.SPATIAL, ForestryAllele.BeeSpecies.Spectral.getAllele(), ExtraBeesSpecies.QUANTUM, 5);
+
+ new ExtraBeeMutation(ForestryAllele.BeeSpecies.Noble.getAllele(), ForestryAllele.BeeSpecies.Monastic.getAllele(), ExtraBeesSpecies.MYSTICAL, 5);
+ for (IBeeMutation mutation : mutations) {
+ Binnie.Genetics.getBeeRoot().registerMutation(mutation);
+ }
+ }
+
+ public static List<IBeeMutation> mutations = new ArrayList();
+ MutationRequirement req;
+
+ public ExtraBeeMutation(IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, ExtraBeesSpecies mutation, int chance)
+ {
+ this(allele0, allele1, mutation.getTemplate(), chance, null);
+ }
+
+ public ExtraBeeMutation(IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, ExtraBeesSpecies mutation, int chance, MutationRequirement req)
+ {
+ this(allele0, allele1, mutation.getTemplate(), chance, req);
+ }
+
+ public ExtraBeeMutation(IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, IAllele[] mutation, int chance)
+ {
+ this(allele0, allele1, mutation, chance, null);
+ }
+
+ public ExtraBeeMutation(IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, IAllele[] mutation, int chance, MutationRequirement req)
+ {
+ this.chance = chance;
+ this.req = req;
+ this.species0 = allele0;
+ this.species1 = allele1;
+ this.template = mutation;
+ if ((this.species0 != null) && (this.species1 != null) && (this.template != null)) {
+ mutations.add(this);
+ }
+ }
+
+ IAlleleBeeSpecies species0 = null;
+ IAlleleBeeSpecies species1 = null;
+ IAllele[] template = new IAllele[0];
+ int chance = 80;
+
+ public IAllele getAllele0()
+ {
+ return this.species0;
+ }
+
+ public IAllele getAllele1()
+ {
+ return this.species1;
+ }
+
+ public IAllele[] getTemplate()
+ {
+ return this.template;
+ }
+
+ public float getBaseChance()
+ {
+ return this.chance;
+ }
+
+ public boolean isPartner(IAllele allele)
+ {
+ return (allele.getUID().equals(this.species0.getUID())) || (allele.getUID().equals(this.species1.getUID()));
+ }
+
+ public IAllele getPartner(IAllele allele)
+ {
+ return allele.getUID().equals(this.species0.getUID()) ? this.species1 : this.species0;
+ }
+
+ public boolean isSecret()
+ {
+ return false;
+ }
+
+ public float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, IBeeGenome genome0, IBeeGenome genome1)
+ {
+ return getChance(housing, allele0, allele1, genome0, genome1);
+ }
+
+ public float getChance(IBeeHousing housing, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1)
+ {
+ if ((this.species0 == null) || (this.species1 == null) || (allele0 == null) || (allele1 == null)) {
+ return 0.0F;
+ }
+ World world = housing.getWorld();
+ int x = housing.getXCoord();
+ int y = housing.getYCoord();
+ int z = housing.getZCoord();
+ BiomeGenBase biome = housing.getBiome();
+ if ((this.req != null) && (!this.req.fufilled(housing, allele0, allele1, genome0, genome1))) {
+ return 0.0F;
+ }
+ int processedChance = Math.round(this.chance * housing.getMutationModifier((IBeeGenome)genome0, (IBeeGenome)genome1, 1.0F) * Binnie.Genetics.getBeeRoot().getBeekeepingMode(world).getMutationModifier((IBeeGenome)genome0, (IBeeGenome)genome1, 1.0F));
+ if ((this.species0.getUID().equals(allele0.getUID())) && (this.species1.getUID().equals(allele1.getUID()))) {
+ return processedChance;
+ }
+ if ((this.species1.getUID().equals(allele0.getUID())) && (this.species0.getUID().equals(allele1.getUID()))) {
+ return processedChance;
+ }
+ return 0.0F;
+ }
+
+ public Collection<String> getSpecialConditions()
+ {
+ List<String> conditions = new ArrayList();
+ if (this.req != null) {
+ for (String s : this.req.tooltip()) {
+ conditions.add(s);
+ }
+ }
+ return conditions;
+ }
+
+ public IBeeRoot getRoot()
+ {
+ return Binnie.Genetics.getBeeRoot();
+ }
+
+ static abstract class MutationRequirement
+ {
+ public abstract String[] tooltip();
+
+ public abstract boolean fufilled(IBeeHousing paramIBeeHousing, IAllele paramIAllele1, IAllele paramIAllele2, IGenome paramIGenome1, IGenome paramIGenome2);
+ }
+
+ static class RequirementBiomeType
+ extends ExtraBeeMutation.MutationRequirement
+ {
+ BiomeDictionary.Type type;
+
+ public RequirementBiomeType(BiomeDictionary.Type type)
+ {
+ this.type = type;
+ }
+
+ public String[] tooltip()
+ {
+ return new String[] { "Is restricted to " + this.type + "-like biomes." };
+ }
+
+ public boolean fufilled(IBeeHousing housing, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1)
+ {
+ return BiomeDictionary.isBiomeOfType(housing.getBiome(), this.type);
+ }
+ }
+
+ static class RequirementPerson
+ extends ExtraBeeMutation.MutationRequirement
+ {
+ String name;
+
+ public RequirementPerson(String name)
+ {
+ this.name = name;
+ }
+
+ public String[] tooltip()
+ {
+ return new String[] { "Can only be bred by " + this.name };
+ }
+
+ public boolean fufilled(IBeeHousing housing, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1)
+ {
+ return (housing.getOwnerName() != null) && (housing.getOwnerName().equals(this.name));
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/ExtraBeesBranch.java b/src/Java/binnie/extrabees/genetics/ExtraBeesBranch.java
new file mode 100644
index 0000000000..de978231c6
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/ExtraBeesBranch.java
@@ -0,0 +1,313 @@
+package binnie.extrabees.genetics;
+
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAlleleRegistry;
+import forestry.api.genetics.IAlleleSpecies;
+import forestry.api.genetics.IClassification;
+import forestry.api.genetics.IClassification.EnumClassLevel;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+public enum ExtraBeesBranch
+ implements IClassification
+{
+ BARREN("Vacapis"), HOSTILE("Infenapis"), ROCKY("Monapis"), METALLIC("Lamminapis"), METALLIC2("Metalapis"), ALLOY("Allapis"), PRECIOUS("Pluriapis"), MINERAL("Niphapis"), GEMSTONE("Gemmapis"), NUCLEAR("Levapis"), HISTORIC("Priscapis"), FOSSILIZED("Fosiapis"), REFINED("Petrapis"), AQUATIC("Aquapis"), SACCHARINE("Sacchapis"), CLASSICAL("Grecapis"), VOLCANIC("Irrapis"), VIRULENT("Virapis"), VISCOUS("Viscapis"), CAUSTIC("Morbapis"), ENERGETIC("Incitapis"), FARMING("Agriapis"), SHADOW("Pullapis"), PRIMARY("Primapis"), SECONDARY("Secapis"), TERTIARY("Tertiapis"), FTB("Eftebeapis"), QUANTUM("Quantapis"), BOTANIA("Botaniapis");
+
+ private String uid = "";
+ private String scientific = "";
+ private Set<IAlleleBeeSpecies> speciesSet = new LinkedHashSet();
+ IClassification parent;
+
+ public String getUID()
+ {
+ return "extrabees.genus." + this.uid;
+ }
+
+ public String getName()
+ {
+ return ExtraBees.proxy.localise("branch." + toString().toLowerCase() + ".name");
+ }
+
+ public String getScientific()
+ {
+ return this.scientific;
+ }
+
+ public String getDescription()
+ {
+ return ExtraBees.proxy.localiseOrBlank("branch." + toString().toLowerCase() + ".desc");
+ }
+
+ private ExtraBeesBranch(String scientific)
+ {
+ this.scientific = scientific;
+ this.uid = toString().toLowerCase();
+ }
+
+ public void register()
+ {
+ if (!this.speciesSet.isEmpty())
+ {
+ AlleleManager.alleleRegistry.registerClassification(this);
+ IClassification parent = AlleleManager.alleleRegistry.getClassification("family.apidae");
+ if (parent != null)
+ {
+ parent.addMemberGroup(this);
+ setParent(parent);
+ }
+ }
+ }
+
+ public static void doInit()
+ {
+ IClassification frozenBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.frozen");
+ if (frozenBranch != null)
+ {
+ frozenBranch.addMemberSpecies(ExtraBeesSpecies.ARTIC);
+ ExtraBeesSpecies.ARTIC.setBranch(frozenBranch);
+ frozenBranch.addMemberSpecies(ExtraBeesSpecies.FREEZING);
+ ExtraBeesSpecies.FREEZING.setBranch(frozenBranch);
+ }
+ IClassification agrarianBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.agrarian");
+ if (agrarianBranch != null)
+ {
+ agrarianBranch.addMemberSpecies(ExtraBeesSpecies.FARM);
+ ExtraBeesSpecies.FARM.setBranch(agrarianBranch);
+ ExtraBeesSpecies.GROWING.setBranch(agrarianBranch);
+ ExtraBeesSpecies.THRIVING.setBranch(agrarianBranch);
+ ExtraBeesSpecies.BLOOMING.setBranch(agrarianBranch);
+ }
+ IClassification boggyBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.boggy");
+ if (boggyBranch != null)
+ {
+ boggyBranch.addMemberSpecies(ExtraBeesSpecies.SWAMP);
+ boggyBranch.addMemberSpecies(ExtraBeesSpecies.BOGGY);
+ boggyBranch.addMemberSpecies(ExtraBeesSpecies.FUNGAL);
+ ExtraBeesSpecies.SWAMP.setBranch(boggyBranch);
+ ExtraBeesSpecies.BOGGY.setBranch(boggyBranch);
+ ExtraBeesSpecies.FUNGAL.setBranch(boggyBranch);
+ }
+ IClassification festiveBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.festive");
+ if (festiveBranch != null)
+ {
+ festiveBranch.addMemberSpecies(ExtraBeesSpecies.CELEBRATORY);
+ ExtraBeesSpecies.CELEBRATORY.setBranch(festiveBranch);
+ }
+ IClassification austereBranch = AlleleManager.alleleRegistry.getClassification("genus.bees.austere");
+ if (austereBranch != null)
+ {
+ austereBranch.addMemberSpecies(ExtraBeesSpecies.HAZARDOUS);
+ ExtraBeesSpecies.HAZARDOUS.setBranch(austereBranch);
+ }
+ FARMING.addMemberSpecies(ExtraBeesSpecies.ALCOHOL);
+ FARMING.addMemberSpecies(ExtraBeesSpecies.MILK);
+ FARMING.addMemberSpecies(ExtraBeesSpecies.COFFEE);
+ FARMING.addMemberSpecies(ExtraBeesSpecies.CITRUS);
+ FARMING.addMemberSpecies(ExtraBeesSpecies.MINT);
+ FARMING.register();
+
+ BARREN.addMemberSpecies(ExtraBeesSpecies.ARID);
+ BARREN.addMemberSpecies(ExtraBeesSpecies.BARREN);
+ BARREN.addMemberSpecies(ExtraBeesSpecies.DESOLATE);
+ BARREN.addMemberSpecies(ExtraBeesSpecies.DECOMPOSING);
+ BARREN.addMemberSpecies(ExtraBeesSpecies.GNAWING);
+ BARREN.register();
+
+ HOSTILE.addMemberSpecies(ExtraBeesSpecies.ROTTEN);
+ HOSTILE.addMemberSpecies(ExtraBeesSpecies.BONE);
+ HOSTILE.addMemberSpecies(ExtraBeesSpecies.CREEPER);
+ HOSTILE.register();
+
+ ROCKY.addMemberSpecies(ExtraBeesSpecies.ROCK);
+ ROCKY.addMemberSpecies(ExtraBeesSpecies.STONE);
+ ROCKY.addMemberSpecies(ExtraBeesSpecies.GRANITE);
+ ROCKY.addMemberSpecies(ExtraBeesSpecies.MINERAL);
+ ROCKY.register();
+
+ METALLIC.addMemberSpecies(ExtraBeesSpecies.IRON);
+ METALLIC.addMemberSpecies(ExtraBeesSpecies.COPPER);
+ METALLIC.addMemberSpecies(ExtraBeesSpecies.TIN);
+ METALLIC.addMemberSpecies(ExtraBeesSpecies.LEAD);
+ METALLIC.register();
+
+ METALLIC2.addMemberSpecies(ExtraBeesSpecies.NICKEL);
+ METALLIC2.addMemberSpecies(ExtraBeesSpecies.ZINC);
+ METALLIC2.addMemberSpecies(ExtraBeesSpecies.TUNGSTATE);
+ METALLIC2.addMemberSpecies(ExtraBeesSpecies.TITANIUM);
+ METALLIC2.register();
+
+ ALLOY.addMemberSpecies(ExtraBeesSpecies.BRONZE);
+ ALLOY.addMemberSpecies(ExtraBeesSpecies.BRASS);
+ ALLOY.addMemberSpecies(ExtraBeesSpecies.STEEL);
+ ALLOY.addMemberSpecies(ExtraBeesSpecies.INVAR);
+ ALLOY.register();
+
+ PRECIOUS.addMemberSpecies(ExtraBeesSpecies.SILVER);
+ PRECIOUS.addMemberSpecies(ExtraBeesSpecies.GOLD);
+ PRECIOUS.addMemberSpecies(ExtraBeesSpecies.ELECTRUM);
+ PRECIOUS.addMemberSpecies(ExtraBeesSpecies.PLATINUM);
+ PRECIOUS.register();
+
+ MINERAL.addMemberSpecies(ExtraBeesSpecies.LAPIS);
+ MINERAL.addMemberSpecies(ExtraBeesSpecies.SODALITE);
+ MINERAL.addMemberSpecies(ExtraBeesSpecies.PYRITE);
+ MINERAL.addMemberSpecies(ExtraBeesSpecies.BAUXITE);
+ MINERAL.addMemberSpecies(ExtraBeesSpecies.CINNABAR);
+ MINERAL.addMemberSpecies(ExtraBeesSpecies.SPHALERITE);
+ MINERAL.register();
+
+ GEMSTONE.addMemberSpecies(ExtraBeesSpecies.EMERALD);
+ GEMSTONE.addMemberSpecies(ExtraBeesSpecies.RUBY);
+ GEMSTONE.addMemberSpecies(ExtraBeesSpecies.SAPPHIRE);
+ GEMSTONE.addMemberSpecies(ExtraBeesSpecies.OLIVINE);
+ GEMSTONE.addMemberSpecies(ExtraBeesSpecies.DIAMOND);
+ GEMSTONE.register();
+
+ NUCLEAR.addMemberSpecies(ExtraBeesSpecies.UNSTABLE);
+ NUCLEAR.addMemberSpecies(ExtraBeesSpecies.NUCLEAR);
+ NUCLEAR.addMemberSpecies(ExtraBeesSpecies.RADIOACTIVE);
+ NUCLEAR.addMemberSpecies(ExtraBeesSpecies.YELLORIUM);
+ NUCLEAR.addMemberSpecies(ExtraBeesSpecies.CYANITE);
+ NUCLEAR.addMemberSpecies(ExtraBeesSpecies.BLUTONIUM);
+ NUCLEAR.register();
+
+ HISTORIC.addMemberSpecies(ExtraBeesSpecies.ANCIENT);
+ HISTORIC.addMemberSpecies(ExtraBeesSpecies.PRIMEVAL);
+ HISTORIC.addMemberSpecies(ExtraBeesSpecies.PREHISTORIC);
+ HISTORIC.addMemberSpecies(ExtraBeesSpecies.RELIC);
+ HISTORIC.register();
+
+ FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.COAL);
+ FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.RESIN);
+ FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.OIL);
+ FOSSILIZED.addMemberSpecies(ExtraBeesSpecies.PEAT);
+ FOSSILIZED.register();
+
+ REFINED.addMemberSpecies(ExtraBeesSpecies.DISTILLED);
+ REFINED.addMemberSpecies(ExtraBeesSpecies.FUEL);
+ REFINED.addMemberSpecies(ExtraBeesSpecies.CREOSOTE);
+ REFINED.addMemberSpecies(ExtraBeesSpecies.LATEX);
+ REFINED.register();
+
+ AQUATIC.addMemberSpecies(ExtraBeesSpecies.WATER);
+ AQUATIC.addMemberSpecies(ExtraBeesSpecies.RIVER);
+ AQUATIC.addMemberSpecies(ExtraBeesSpecies.OCEAN);
+ AQUATIC.addMemberSpecies(ExtraBeesSpecies.INK);
+ AQUATIC.register();
+
+ SACCHARINE.addMemberSpecies(ExtraBeesSpecies.SWEET);
+ SACCHARINE.addMemberSpecies(ExtraBeesSpecies.SUGAR);
+ SACCHARINE.addMemberSpecies(ExtraBeesSpecies.FRUIT);
+ SACCHARINE.addMemberSpecies(ExtraBeesSpecies.RIPENING);
+ SACCHARINE.register();
+
+ CLASSICAL.addMemberSpecies(ExtraBeesSpecies.MARBLE);
+ CLASSICAL.addMemberSpecies(ExtraBeesSpecies.ROMAN);
+ CLASSICAL.addMemberSpecies(ExtraBeesSpecies.GREEK);
+ CLASSICAL.addMemberSpecies(ExtraBeesSpecies.CLASSICAL);
+ CLASSICAL.register();
+
+ VOLCANIC.addMemberSpecies(ExtraBeesSpecies.BASALT);
+ VOLCANIC.addMemberSpecies(ExtraBeesSpecies.TEMPERED);
+ VOLCANIC.addMemberSpecies(ExtraBeesSpecies.ANGRY);
+ VOLCANIC.addMemberSpecies(ExtraBeesSpecies.VOLCANIC);
+ VOLCANIC.addMemberSpecies(ExtraBeesSpecies.GLOWSTONE);
+ VOLCANIC.register();
+
+ VISCOUS.addMemberSpecies(ExtraBeesSpecies.VISCOUS);
+ VISCOUS.addMemberSpecies(ExtraBeesSpecies.GLUTINOUS);
+ VISCOUS.addMemberSpecies(ExtraBeesSpecies.STICKY);
+ VISCOUS.register();
+
+ VIRULENT.addMemberSpecies(ExtraBeesSpecies.MALICIOUS);
+ VIRULENT.addMemberSpecies(ExtraBeesSpecies.INFECTIOUS);
+ VIRULENT.addMemberSpecies(ExtraBeesSpecies.VIRULENT);
+ VIRULENT.register();
+
+ CAUSTIC.addMemberSpecies(ExtraBeesSpecies.CORROSIVE);
+ CAUSTIC.addMemberSpecies(ExtraBeesSpecies.CAUSTIC);
+ CAUSTIC.addMemberSpecies(ExtraBeesSpecies.ACIDIC);
+ CAUSTIC.register();
+
+ ENERGETIC.addMemberSpecies(ExtraBeesSpecies.EXCITED);
+ ENERGETIC.addMemberSpecies(ExtraBeesSpecies.ENERGETIC);
+ ENERGETIC.addMemberSpecies(ExtraBeesSpecies.ECSTATIC);
+ ENERGETIC.register();
+
+ SHADOW.addMemberSpecies(ExtraBeesSpecies.SHADOW);
+ SHADOW.addMemberSpecies(ExtraBeesSpecies.DARKENED);
+ SHADOW.addMemberSpecies(ExtraBeesSpecies.ABYSS);
+ SHADOW.register();
+
+ PRIMARY.addMemberSpecies(ExtraBeesSpecies.RED);
+ PRIMARY.addMemberSpecies(ExtraBeesSpecies.YELLOW);
+ PRIMARY.addMemberSpecies(ExtraBeesSpecies.BLUE);
+ PRIMARY.addMemberSpecies(ExtraBeesSpecies.GREEN);
+ PRIMARY.addMemberSpecies(ExtraBeesSpecies.BLACK);
+ PRIMARY.addMemberSpecies(ExtraBeesSpecies.WHITE);
+ PRIMARY.addMemberSpecies(ExtraBeesSpecies.BROWN);
+ PRIMARY.register();
+
+ SECONDARY.addMemberSpecies(ExtraBeesSpecies.ORANGE);
+ SECONDARY.addMemberSpecies(ExtraBeesSpecies.CYAN);
+ SECONDARY.addMemberSpecies(ExtraBeesSpecies.PURPLE);
+ SECONDARY.addMemberSpecies(ExtraBeesSpecies.GRAY);
+ SECONDARY.addMemberSpecies(ExtraBeesSpecies.LIGHTBLUE);
+ SECONDARY.addMemberSpecies(ExtraBeesSpecies.PINK);
+ SECONDARY.addMemberSpecies(ExtraBeesSpecies.LIMEGREEN);
+ SECONDARY.register();
+
+ TERTIARY.addMemberSpecies(ExtraBeesSpecies.MAGENTA);
+ TERTIARY.addMemberSpecies(ExtraBeesSpecies.LIGHTGRAY);
+ TERTIARY.register();
+
+ FTB.addMemberSpecies(ExtraBeesSpecies.JADED);
+ FTB.register();
+
+ QUANTUM.addMemberSpecies(ExtraBeesSpecies.UNUSUAL);
+ QUANTUM.addMemberSpecies(ExtraBeesSpecies.SPATIAL);
+ QUANTUM.addMemberSpecies(ExtraBeesSpecies.QUANTUM);
+ QUANTUM.register();
+
+ BOTANIA.addMemberSpecies(ExtraBeesSpecies.MYSTICAL);
+ BOTANIA.register();
+ }
+
+ public IClassification.EnumClassLevel getLevel()
+ {
+ return IClassification.EnumClassLevel.GENUS;
+ }
+
+ public IClassification[] getMemberGroups()
+ {
+ return null;
+ }
+
+ public void addMemberGroup(IClassification group) {}
+
+ public IAlleleSpecies[] getMemberSpecies()
+ {
+ return (IAlleleSpecies[])this.speciesSet.toArray(new IAlleleSpecies[0]);
+ }
+
+ public void addMemberSpecies(IAlleleSpecies species)
+ {
+ this.speciesSet.add((IAlleleBeeSpecies)species);
+ if ((species instanceof ExtraBeesSpecies)) {
+ ((ExtraBeesSpecies)species).setBranch(this);
+ }
+ }
+
+ public IClassification getParent()
+ {
+ return this.parent;
+ }
+
+ public void setParent(IClassification parent)
+ {
+ this.parent = parent;
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/ExtraBeesFlowers.java b/src/Java/binnie/extrabees/genetics/ExtraBeesFlowers.java
new file mode 100644
index 0000000000..743c7a55a8
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/ExtraBeesFlowers.java
@@ -0,0 +1,202 @@
+package binnie.extrabees.genetics;
+
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAlleleFlowers;
+import forestry.api.genetics.IAlleleRegistry;
+import forestry.api.genetics.IFlower;
+import forestry.api.genetics.IFlowerProvider;
+import forestry.api.genetics.IFruitBearer;
+import forestry.api.genetics.IIndividual;
+import forestry.api.genetics.IPollinatable;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Random;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.common.EnumPlantType;
+
+public enum ExtraBeesFlowers
+ implements IFlowerProvider, IAlleleFlowers
+{
+ WATER, SUGAR, ROCK, BOOK, DEAD, REDSTONE, WOOD, LEAVES, Sapling, Fruit, Mystical;
+
+ boolean dominant = true;
+
+ private ExtraBeesFlowers() {}
+
+ public String getUID()
+ {
+ return "extrabees.flower." + toString().toLowerCase();
+ }
+
+ public boolean isDominant()
+ {
+ return this.dominant;
+ }
+
+ public IFlowerProvider getProvider()
+ {
+ return this;
+ }
+
+ public String getDescription()
+ {
+ return ExtraBees.proxy.localise("flowers." + name().toString().toLowerCase() + ".name");
+ }
+
+ public void register()
+ {
+ AlleleManager.alleleRegistry.registerAllele(this);
+ }
+
+ public static void doInit()
+ {
+ for (ExtraBeesFlowers effect : ) {
+ effect.register();
+ }
+ }
+
+ public ItemStack[] getItemStacks()
+ {
+ switch (1.$SwitchMap$binnie$extrabees$genetics$ExtraBeesFlowers[ordinal()])
+ {
+ case 1:
+ return new ItemStack[] { new ItemStack(Blocks.waterlily) };
+ case 2:
+ return new ItemStack[] { new ItemStack(Blocks.reeds) };
+ case 3:
+ return new ItemStack[] { new ItemStack(Blocks.cobblestone) };
+ case 4:
+ return new ItemStack[] { new ItemStack(Blocks.bookshelf) };
+ case 5:
+ return new ItemStack[] { new ItemStack(Blocks.redstone_torch) };
+ case 6:
+ return new ItemStack[] { new ItemStack(Blocks.deadbush) };
+ case 7:
+ return new ItemStack[] { new ItemStack(Items.apple) };
+ case 8:
+ return new ItemStack[] { new ItemStack(Blocks.leaves) };
+ case 9:
+ return new ItemStack[] { new ItemStack(Blocks.sapling) };
+ case 10:
+ return new ItemStack[] { new ItemStack(Blocks.log) };
+ }
+ return new ItemStack[0];
+ }
+
+ public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable)
+ {
+ EnumSet<EnumPlantType> types = pollinatable.getPlantType();
+ return (types.size() > 1) || (!types.contains(EnumPlantType.Nether));
+ }
+
+ public boolean isAcceptedFlower(World world, IIndividual individual, int x, int y, int z)
+ {
+ Block block = world.getBlock(x, y, z);
+ if (block == null) {
+ return false;
+ }
+ switch (1.$SwitchMap$binnie$extrabees$genetics$ExtraBeesFlowers[ordinal()])
+ {
+ case 1:
+ return block == Blocks.waterlily;
+ case 3:
+ return block.getMaterial() == Material.rock;
+ case 2:
+ return block == Blocks.reeds;
+ case 4:
+ return block == Blocks.bookshelf;
+ case 5:
+ return block == Blocks.redstone_torch;
+ case 6:
+ return block == Blocks.deadbush;
+ case 10:
+ return block.isWood(world, x, y, z);
+ case 7:
+ return world.getTileEntity(x, y, z) instanceof IFruitBearer;
+ case 8:
+ return block.isLeaves(world, x, y, z);
+ case 9:
+ return block.getClass().getName().toLowerCase().contains("sapling");
+ case 11:
+ return block == Mods.Botania.block("flower");
+ }
+ return false;
+ }
+
+ public boolean growFlower(World world, IIndividual individual, int x, int y, int z)
+ {
+ switch (1.$SwitchMap$binnie$extrabees$genetics$ExtraBeesFlowers[ordinal()])
+ {
+ case 1:
+ if ((world.isAirBlock(x, y, z)) && (world.getBlock(x, y - 1, z) == Blocks.water)) {
+ return world.setBlock(x, y, z, Blocks.waterlily, 0, 2);
+ }
+ return false;
+ case 2:
+ if ((world.getBlock(x, y - 1, z) == Blocks.reeds) && (world.isAirBlock(x, y, z))) {
+ return world.setBlock(x, y, z, Blocks.reeds, 0, 0);
+ }
+ return false;
+ }
+ return false;
+ }
+
+ public ItemStack[] affectProducts(World world, IIndividual individual, int x, int y, int z, ItemStack[] products)
+ {
+ if (this == Mystical)
+ {
+ List<ItemStack> prods = new ArrayList();
+ for (ItemStack stack : products) {
+ prods.add(stack);
+ }
+ for (int k = 0; k < 50; k++)
+ {
+ int tX = 7;
+ int tY = 7;
+ int tZ = 3;
+ int x2 = x - tX + world.rand.nextInt(1 + 2 * tX);
+ int y2 = y - tY + world.rand.nextInt(1 + 2 * tY);
+ int z2 = z - tZ + world.rand.nextInt(1 + 2 * tZ);
+ Block block = world.getBlock(x2, y2, z2);
+ if (block != null) {
+ if (block == Mods.Botania.block("flower"))
+ {
+ int meta = world.getBlockMetadata(x2, y2, z2);
+ Item item = Mods.Botania.item("petal");
+ if (item != null) {
+ prods.add(new ItemStack(item, 1, meta));
+ }
+ }
+ }
+ }
+ return (ItemStack[])prods.toArray(new ItemStack[0]);
+ }
+ return products;
+ }
+
+ public String getName()
+ {
+ return getDescription();
+ }
+
+ public String getUnlocalizedName()
+ {
+ return getUID();
+ }
+
+ public List<IFlower> getFlowers()
+ {
+ return new ArrayList();
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/ExtraBeesSpecies.java b/src/Java/binnie/extrabees/genetics/ExtraBeesSpecies.java
new file mode 100644
index 0000000000..cc166a3644
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/ExtraBeesSpecies.java
@@ -0,0 +1,1139 @@
+package binnie.extrabees.genetics;
+
+import binnie.Binnie;
+import binnie.core.BinnieCore;
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.core.genetics.ForestryAllele.BeeSpecies;
+import binnie.core.genetics.ForestryAllele.Fertility;
+import binnie.core.genetics.ForestryAllele.Flowering;
+import binnie.core.genetics.ForestryAllele.Lifespan;
+import binnie.core.genetics.ForestryAllele.Speed;
+import binnie.core.genetics.ForestryAllele.Territory;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.genetics.Tolerance;
+import binnie.core.item.IItemEnum;
+import binnie.core.proxy.BinnieProxy;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.genetics.effect.ExtraBeesEffect;
+import binnie.extrabees.products.EnumHoneyComb;
+import binnie.extrabees.products.ItemHoneyComb.VanillaComb;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import com.mojang.authlib.GameProfile;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.apiculture.EnumBeeChromosome;
+import forestry.api.apiculture.EnumBeeType;
+import forestry.api.apiculture.IAlleleBeeEffect;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.core.EnumHumidity;
+import forestry.api.core.EnumTemperature;
+import forestry.api.core.IIconProvider;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IAlleleFlowers;
+import forestry.api.genetics.IAlleleRegistry;
+import forestry.api.genetics.IAlleleSpecies;
+import forestry.api.genetics.IClassification;
+import forestry.api.genetics.IIndividual;
+import forestry.api.genetics.IMutation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Random;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.Achievement;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+public enum ExtraBeesSpecies
+ implements IAlleleBeeSpecies, IIconProvider
+{
+ ARID("aridus", 12511316), BARREN("infelix", 14733923), DESOLATE("desolo", 13744272), GNAWING("apica", 15234224), ROTTEN("caries", 12574902), BONE("os", 15330792), CREEPER("erepo", 2942485), DECOMPOSING("aegrus", 5388049), ROCK("saxum", 11053224), STONE("lapis", 7697781), GRANITE("granum", 6903125), MINERAL("minerale", 7239037), COPPER("cuprous", 13722376), TIN("stannus", 12431805), IRON("ferrous", 11038808), LEAD("plumbous", 11373483), ZINC("spelta", 15592447), TITANIUM("titania", 11578083), BRONZE, BRASS, STEEL, TUNGSTATE("wolfram", 1249812), GOLD("aureus", 15125515), SILVER("argentus", 14408667), ELECTRUM, PLATINUM("platina", 14408667), LAPIS("lazuli", 4009179), SODALITE, PYRITE, BAUXITE, CINNABAR, SPHALERITE, EMERALD("emerala", 1900291), RUBY("ruba", 14024704), SAPPHIRE("saphhira", 673791), OLIVINE, DIAMOND("diama", 8371706), UNSTABLE("levis", 4099124), NUCLEAR("nucleus", 4312111), RADIOACTIVE("fervens", 2031360), ANCIENT("antiquus", 15915919), PRIMEVAL("priscus", 11773563), PREHISTORIC("pristinus", 7232064), RELIC("sapiens", 5062166), COAL("carbo", 8025672), RESIN("lacrima", 10908443), OIL("lubricus", 5719920), PEAT, DISTILLED("distilli", 3498838), FUEL("refina", 16760835), CREOSOTE("creosota", 9936403), LATEX("latex", 4803134), WATER("aqua", 9741055), RIVER("flumen", 8631252), OCEAN("mare", 1912493), INK("atramentum", 922695), GROWING("tyrelli", 6024152), THRIVING("thriva", 3466109), BLOOMING("blooma", 704308), SWEET("mellitus", 16536049), SUGAR("dulcis", 15127520), RIPENING("ripa", 11716445), FRUIT("pomum", 14375030), ALCOHOL("vinum", 15239777), FARM("ager", 7723872), MILK("lacteus", 14936296), COFFEE("arabica", 9199152), CITRUS, MINT, SWAMP("paludis", 3500339), BOGGY("lama", 7887913), FUNGAL("boletus", 13722112), MARBLE, ROMAN, GREEK, CLASSICAL, BASALT("aceri", 9202025), TEMPERED("iratus", 9062472), ANGRY, VOLCANIC("volcano", 5049356), MALICIOUS("acerbus", 7875191), INFECTIOUS("contagio", 12070581), VIRULENT("morbus", 15733740), VISCOUS("liquidus", 608014), GLUTINOUS("glutina", 1936423), STICKY("lentesco", 1565480), CORROSIVE("corrumpo", 4873227), CAUSTIC("torrens", 8691997), ACIDIC("acidus", 12644374), EXCITED("excita", 16729413), ENERGETIC("energia", 15218119), ECSTATIC("ecstatica", 11482600), ARTIC("artica", 11395296), FREEZING("glacia", 8119267), SHADOW("shadowa", 5855577), DARKENED("darka", 3354163), ABYSS("abyssba", 2164769), RED("rubra", 16711680), YELLOW("fulvus", 16768256), BLUE("caeruleus", 8959), GREEN("prasinus", 39168), BLACK("niger", 5723991), WHITE("albus", 16777215), BROWN("fuscus", 6042895), ORANGE("flammeus", 16751872), CYAN("cyana", 65509), PURPLE("purpureus", 11403519), GRAY("ravus", 12237498), LIGHTBLUE("aqua", 40447), PINK("rosaceus", 16744671), LIMEGREEN("lima", 65288), MAGENTA("fuchsia", 16711884), LIGHTGRAY("canus", 13224393), CELEBRATORY("celeba", 16386666), JADED("jadeca", 16386666), GLOWSTONE("glowia", 14730779), HAZARDOUS("infensus", 11562024), NICKEL("claro", 16768764), INVAR, QUANTUM("quanta", 3655131), SPATIAL("spatia", 4987872), UNUSUAL("daniella", 5874874), YELLORIUM("yellori", 14019840), CYANITE("cyanita", 34541), BLUTONIUM("caruthus", 1769702), MYSTICAL("mystica", 4630306);
+
+ private ExtraBeesSpecies(String binomial, int colour)
+ {
+ this.uid = toString().toLowerCase();
+ this.binomial = binomial;
+ this.primaryColor = colour;
+ }
+
+ private ExtraBeesSpecies()
+ {
+ this.state = State.Deprecated;
+ }
+
+ private int primaryColor = 16777215;
+ private int secondaryColor = 16768022;
+ private EnumTemperature temperature = EnumTemperature.NORMAL;
+ private EnumHumidity humidity = EnumHumidity.NORMAL;
+ private boolean hasEffect = false;
+ private boolean isSecret = true;
+ private boolean isCounted = true;
+ private String binomial = "";
+ private IClassification branch = null;
+ private String uid = "";
+ private Achievement achievement = null;
+ private boolean dominant = true;
+ private HashMap<ItemStack, Integer> products = new LinkedHashMap();
+ private HashMap<ItemStack, Integer> specialties = new LinkedHashMap();
+ public HashMap<ItemStack, Integer> allProducts = new LinkedHashMap();
+ public HashMap<ItemStack, Integer> allSpecialties = new LinkedHashMap();
+ private IAllele[] template;
+
+ public static enum State
+ {
+ Active, Inactive, Deprecated;
+
+ private State() {}
+ }
+
+ public State state = State.Active;
+ @SideOnly(Side.CLIENT)
+ private IIcon[][] icons;
+
+ public String getName()
+ {
+ return ExtraBees.proxy.localise("species." + name().toLowerCase() + ".name");
+ }
+
+ public String getDescription()
+ {
+ return ExtraBees.proxy.localiseOrBlank("species." + name().toLowerCase() + ".desc");
+ }
+
+ public EnumTemperature getTemperature()
+ {
+ return this.temperature;
+ }
+
+ public EnumHumidity getHumidity()
+ {
+ return this.humidity;
+ }
+
+ public boolean hasEffect()
+ {
+ return this.hasEffect;
+ }
+
+ public boolean isSecret()
+ {
+ return this.isSecret;
+ }
+
+ public boolean isCounted()
+ {
+ return this.isCounted;
+ }
+
+ public String getBinomial()
+ {
+ return this.binomial;
+ }
+
+ public String getAuthority()
+ {
+ return "Binnie";
+ }
+
+ public IClassification getBranch()
+ {
+ return this.branch;
+ }
+
+ public String getUID()
+ {
+ return "extrabees.species." + this.uid;
+ }
+
+ public boolean isDominant()
+ {
+ return this.dominant;
+ }
+
+ public HashMap<ItemStack, Integer> getProducts()
+ {
+ return this.products;
+ }
+
+ public HashMap<ItemStack, Integer> getSpecialty()
+ {
+ return this.specialties;
+ }
+
+ private void setState(State state)
+ {
+ this.state = state;
+ }
+
+ public void registerTemplate()
+ {
+ Binnie.Genetics.getBeeRoot().registerTemplate(getTemplate());
+ if (this.state != State.Active) {
+ AlleleManager.alleleRegistry.blacklistAllele(getUID());
+ }
+ }
+
+ public void addProduct(ItemStack product, int chance)
+ {
+ if (product == null)
+ {
+ setState(State.Inactive);
+ }
+ else
+ {
+ this.products.put(product, Integer.valueOf(chance));
+ this.allProducts.put(product, Integer.valueOf(chance));
+ }
+ }
+
+ public void addProduct(IItemEnum product, int chance)
+ {
+ if (product.isActive())
+ {
+ addProduct(product.get(1), chance);
+ }
+ else
+ {
+ this.allProducts.put(product.get(1), Integer.valueOf(chance));
+ setState(State.Inactive);
+ }
+ }
+
+ public void addSpecialty(ItemStack product, int chance)
+ {
+ if (product == null)
+ {
+ setState(State.Inactive);
+ }
+ else
+ {
+ this.specialties.put(product, Integer.valueOf(chance));
+ this.allSpecialties.put(product, Integer.valueOf(chance));
+ }
+ }
+
+ private void addSpecialty(IItemEnum product, int chance)
+ {
+ if (product.isActive())
+ {
+ addSpecialty(product.get(1), chance);
+ }
+ else
+ {
+ setState(State.Inactive);
+ this.allSpecialties.put(product.get(1), Integer.valueOf(chance));
+ }
+ }
+
+ private void setHumidity(EnumHumidity humidity)
+ {
+ this.humidity = humidity;
+ }
+
+ private void setTemperature(EnumTemperature temperature)
+ {
+ this.temperature = temperature;
+ }
+
+ public static IAllele[] getDefaultTemplate()
+ {
+ return Binnie.Genetics.getBeeRoot().getDefaultTemplate();
+ }
+
+ public IAllele[] getTemplate()
+ {
+ this.template[EnumBeeChromosome.SPECIES.ordinal()] = this;
+ return this.template;
+ }
+
+ public void importTemplate(ForestryAllele.BeeSpecies species)
+ {
+ importTemplate(species.getTemplate());
+ }
+
+ public void importTemplate(ExtraBeesSpecies species)
+ {
+ importTemplate(species.getTemplate());
+ }
+
+ public void importTemplate(IAllele[] template)
+ {
+ this.template = ((IAllele[])template.clone());
+ setHumidity(((IAlleleSpecies)template[0]).getHumidity());
+ setTemperature(((IAlleleSpecies)template[0]).getTemperature());
+ setSecondaryColor(((IAlleleSpecies)template[0]).getIconColour(1));
+ this.template[EnumBeeChromosome.SPECIES.ordinal()] = this;
+ }
+
+ public void recessive()
+ {
+ this.dominant = false;
+ }
+
+ public void setIsSecret(boolean secret)
+ {
+ this.isSecret = secret;
+ }
+
+ public void setHasEffect(boolean effect)
+ {
+ this.hasEffect = effect;
+ }
+
+ public void setSecondaryColor(int colour)
+ {
+ this.secondaryColor = colour;
+ }
+
+ public static void doInit()
+ {
+ for (ExtraBeesSpecies species : ) {
+ species.template = getDefaultTemplate();
+ }
+ int aridBody = 13362036;
+ int rockBody = 10066329;
+ int endBody = 14278302;
+
+ ARID.importTemplate(ForestryAllele.BeeSpecies.Modest);
+ ARID.addProduct(EnumHoneyComb.BARREN, 30);
+ ARID.setHumidity(EnumHumidity.ARID);
+ ARID.setFlowerProvider(ExtraBeesFlowers.DEAD.getUID());
+ ARID.setTemperatureTolerance(Tolerance.Up1);
+ ARID.setSecondaryColor(aridBody);
+
+ BARREN.importTemplate(ARID);
+ BARREN.setFertility(ForestryAllele.Fertility.Low);
+ BARREN.addProduct(EnumHoneyComb.BARREN, 30);
+
+ DESOLATE.addProduct(EnumHoneyComb.BARREN, 30);
+ DESOLATE.importTemplate(BARREN);
+ DESOLATE.setEffect(ExtraBeesEffect.HUNGER.getUID());
+ DESOLATE.recessive();
+ DESOLATE.setNocturnal();
+ DESOLATE.setHasEffect(true);
+
+ GNAWING.importTemplate(BARREN);
+ GNAWING.setFlowerProvider(ExtraBeesFlowers.WOOD.getUID());
+ GNAWING.addProduct(EnumHoneyComb.BARREN, 25);
+ GNAWING.addSpecialty(EnumHoneyComb.SAWDUST, 25);
+
+ ROTTEN.importTemplate(DESOLATE);
+ ROTTEN.setNocturnal();
+ ROTTEN.setCaveDwelling();
+ ROTTEN.setTolerantFlyer();
+ ROTTEN.setEffect(ExtraBeesEffect.SPAWN_ZOMBIE.getUID());
+ ROTTEN.addProduct(EnumHoneyComb.BARREN, 30);
+ ROTTEN.addSpecialty(EnumHoneyComb.ROTTEN, 10);
+
+ BONE.importTemplate(ROTTEN);
+ BONE.addProduct(EnumHoneyComb.BARREN, 30);
+ BONE.addSpecialty(EnumHoneyComb.BONE, 10);
+ BONE.setEffect(ExtraBeesEffect.SPAWN_SKELETON.getUID());
+
+ CREEPER.importTemplate(ROTTEN);
+ CREEPER.setAllDay();
+ CREEPER.addProduct(EnumHoneyComb.BARREN, 30);
+ CREEPER.addSpecialty(ItemHoneyComb.VanillaComb.POWDERY.get(), 8);
+ CREEPER.setEffect(ExtraBeesEffect.SPAWN_CREEPER.getUID());
+
+ DECOMPOSING.importTemplate(BARREN);
+ DECOMPOSING.addProduct(EnumHoneyComb.BARREN, 30);
+ DECOMPOSING.addSpecialty(EnumHoneyComb.COMPOST, 8);
+
+ ROCK.addProduct(EnumHoneyComb.STONE, 30);
+ ROCK.setIsSecret(false);
+ ROCK.setAllDay();
+ ROCK.setCaveDwelling();
+ ROCK.setTolerantFlyer();
+ ROCK.setTemperatureTolerance(Tolerance.Both1);
+ ROCK.setHumidityTolerance(Tolerance.Both1);
+ ROCK.setFlowerProvider(ExtraBeesFlowers.ROCK.getUID());
+ ROCK.setFertility(ForestryAllele.Fertility.Low);
+ ROCK.setLifespan(ForestryAllele.Lifespan.Short);
+ ROCK.setSecondaryColor(rockBody);
+
+ STONE.addProduct(EnumHoneyComb.STONE, 30);
+ STONE.importTemplate(ROCK);
+ STONE.recessive();
+ STONE.setSecondaryColor(rockBody);
+
+ GRANITE.addProduct(EnumHoneyComb.STONE, 30);
+ GRANITE.importTemplate(STONE);
+ GRANITE.setTemperatureTolerance(Tolerance.Both2);
+ GRANITE.setHumidityTolerance(Tolerance.Both2);
+ GRANITE.setSecondaryColor(rockBody);
+
+ MINERAL.addProduct(EnumHoneyComb.STONE, 30);
+ MINERAL.importTemplate(GRANITE);
+ MINERAL.setSecondaryColor(rockBody);
+
+
+
+ COPPER.addProduct(EnumHoneyComb.STONE, 20);
+ COPPER.addSpecialty(EnumHoneyComb.COPPER, 6);
+ COPPER.importTemplate(MINERAL);
+ COPPER.setSecondaryColor(rockBody);
+
+ TIN.addProduct(EnumHoneyComb.STONE, 20);
+ TIN.addSpecialty(EnumHoneyComb.TIN, 6);
+ TIN.importTemplate(MINERAL);
+ TIN.setSecondaryColor(rockBody);
+
+ IRON.addProduct(EnumHoneyComb.STONE, 20);
+ IRON.addSpecialty(EnumHoneyComb.IRON, 5);
+ IRON.importTemplate(MINERAL);
+ IRON.recessive();
+ IRON.setSecondaryColor(rockBody);
+
+ LEAD.addProduct(EnumHoneyComb.STONE, 20);
+ LEAD.addSpecialty(EnumHoneyComb.LEAD, 5);
+ LEAD.importTemplate(MINERAL);
+ LEAD.setSecondaryColor(rockBody);
+
+ NICKEL.addProduct(EnumHoneyComb.STONE, 20);
+ NICKEL.addSpecialty(EnumHoneyComb.NICKEL, 5);
+ NICKEL.importTemplate(MINERAL);
+ NICKEL.setSecondaryColor(rockBody);
+
+
+
+ ZINC.addProduct(EnumHoneyComb.STONE, 20);
+ ZINC.addSpecialty(EnumHoneyComb.ZINC, 5);
+ ZINC.importTemplate(MINERAL);
+ ZINC.setSecondaryColor(rockBody);
+
+ TITANIUM.addProduct(EnumHoneyComb.STONE, 20);
+ TITANIUM.addSpecialty(EnumHoneyComb.TITANIUM, 2);
+ TITANIUM.importTemplate(MINERAL);
+ TITANIUM.setSecondaryColor(rockBody);
+
+ TUNGSTATE.addProduct(EnumHoneyComb.STONE, 20);
+ TUNGSTATE.addSpecialty(EnumHoneyComb.TUNGSTEN, 1);
+ TUNGSTATE.importTemplate(MINERAL);
+ TUNGSTATE.setSecondaryColor(rockBody);
+
+
+
+
+ GOLD.addProduct(EnumHoneyComb.STONE, 20);
+ GOLD.addSpecialty(EnumHoneyComb.GOLD, 2);
+ GOLD.importTemplate(MINERAL);
+ GOLD.setSecondaryColor(rockBody);
+
+ SILVER.addProduct(EnumHoneyComb.STONE, 20);
+ SILVER.addSpecialty(EnumHoneyComb.SILVER, 2);
+ SILVER.importTemplate(MINERAL);
+ SILVER.recessive();
+ SILVER.recessive();
+ SILVER.setSecondaryColor(rockBody);
+
+ PLATINUM.addProduct(EnumHoneyComb.STONE, 20);
+ PLATINUM.addSpecialty(EnumHoneyComb.PLATINUM, 1);
+ PLATINUM.importTemplate(MINERAL);
+ PLATINUM.recessive();
+ PLATINUM.setSecondaryColor(rockBody);
+
+
+ LAPIS.addProduct(EnumHoneyComb.STONE, 20);
+ LAPIS.addSpecialty(EnumHoneyComb.LAPIS, 5);
+ LAPIS.importTemplate(MINERAL);
+ LAPIS.setSecondaryColor(rockBody);
+
+ EMERALD.addProduct(EnumHoneyComb.STONE, 20);
+ EMERALD.addSpecialty(EnumHoneyComb.EMERALD, 4);
+ EMERALD.importTemplate(MINERAL);
+ EMERALD.setSecondaryColor(rockBody);
+
+ RUBY.addProduct(EnumHoneyComb.STONE, 20);
+ RUBY.addSpecialty(EnumHoneyComb.RUBY, 3);
+ RUBY.importTemplate(MINERAL);
+ RUBY.setSecondaryColor(rockBody);
+
+ SAPPHIRE.addProduct(EnumHoneyComb.STONE, 20);
+ SAPPHIRE.addSpecialty(EnumHoneyComb.SAPPHIRE, 3);
+ SAPPHIRE.importTemplate(MINERAL);
+ SAPPHIRE.setSecondaryColor(rockBody);
+
+ DIAMOND.addProduct(EnumHoneyComb.STONE, 20);
+ DIAMOND.addSpecialty(EnumHoneyComb.DIAMOND, 1);
+ DIAMOND.importTemplate(MINERAL);
+ DIAMOND.setSecondaryColor(rockBody);
+
+ UNSTABLE.importTemplate(MINERAL);
+ UNSTABLE.addProduct(EnumHoneyComb.BARREN, 20);
+ UNSTABLE.setEffect(ExtraBeesEffect.RADIOACTIVE.getUID());
+ UNSTABLE.setFertility(ForestryAllele.Fertility.Low);
+ UNSTABLE.setLifespan(ForestryAllele.Lifespan.Shortest);
+ UNSTABLE.recessive();
+
+ NUCLEAR.importTemplate(UNSTABLE);
+ NUCLEAR.addProduct(EnumHoneyComb.BARREN, 20);
+ NUCLEAR.recessive();
+
+ RADIOACTIVE.importTemplate(NUCLEAR);
+ RADIOACTIVE.addProduct(EnumHoneyComb.BARREN, 20);
+ RADIOACTIVE.addSpecialty(EnumHoneyComb.URANIUM, 2);
+ RADIOACTIVE.setHasEffect(true);
+ RADIOACTIVE.recessive();
+
+ ANCIENT.importTemplate(ForestryAllele.BeeSpecies.Noble);
+ ANCIENT.addProduct(EnumHoneyComb.OLD, 30);
+ ANCIENT.setLifespan(ForestryAllele.Lifespan.Elongated);
+
+ PRIMEVAL.importTemplate(ANCIENT);
+ PRIMEVAL.addProduct(EnumHoneyComb.OLD, 30);
+ PRIMEVAL.setLifespan(ForestryAllele.Lifespan.Long);
+
+ PREHISTORIC.importTemplate(ANCIENT);
+ PREHISTORIC.addProduct(EnumHoneyComb.OLD, 30);
+ PREHISTORIC.setLifespan(ForestryAllele.Lifespan.Longer);
+ PREHISTORIC.setFertility(ForestryAllele.Fertility.Low);
+ PREHISTORIC.recessive();
+
+ RELIC.importTemplate(ANCIENT);
+ RELIC.addProduct(EnumHoneyComb.OLD, 30);
+ RELIC.setHasEffect(true);
+ RELIC.setLifespan(ForestryAllele.Lifespan.Longest);
+
+ COAL.importTemplate(ANCIENT);
+ COAL.setLifespan(ForestryAllele.Lifespan.Normal);
+ COAL.addProduct(EnumHoneyComb.OLD, 20);
+ COAL.addSpecialty(EnumHoneyComb.COAL, 8);
+
+ RESIN.importTemplate(COAL);
+ RESIN.addProduct(EnumHoneyComb.OLD, 20);
+ RESIN.addSpecialty(EnumHoneyComb.RESIN, 5);
+ RESIN.recessive();
+
+ OIL.importTemplate(COAL);
+ OIL.addProduct(EnumHoneyComb.OLD, 20);
+ OIL.addSpecialty(EnumHoneyComb.OIL, 5);
+
+
+
+
+
+
+ DISTILLED.importTemplate(OIL);
+ DISTILLED.addProduct(EnumHoneyComb.OIL, 10);
+ DISTILLED.recessive();
+
+ FUEL.importTemplate(OIL);
+ FUEL.addProduct(EnumHoneyComb.OIL, 10);
+ FUEL.addSpecialty(EnumHoneyComb.FUEL, 4);
+ FUEL.setHasEffect(true);
+
+ CREOSOTE.importTemplate(COAL);
+ CREOSOTE.addProduct(EnumHoneyComb.COAL, 10);
+ CREOSOTE.addSpecialty(EnumHoneyComb.CREOSOTE, 7);
+ CREOSOTE.setHasEffect(true);
+
+ LATEX.importTemplate(RESIN);
+ LATEX.addProduct(EnumHoneyComb.RESIN, 10);
+ LATEX.addSpecialty(EnumHoneyComb.LATEX, 5);
+ LATEX.setHasEffect(true);
+
+ WATER.addProduct(EnumHoneyComb.WATER, 30);
+ WATER.setIsSecret(false);
+ WATER.setTolerantFlyer();
+ WATER.setHumidityTolerance(Tolerance.Both1);
+ WATER.setFlowerProvider(ExtraBeesFlowers.WATER.getUID());
+ WATER.setFlowering(ForestryAllele.Flowering.Slow);
+ WATER.setEffect(ExtraBeesEffect.WATER.getUID());
+ WATER.setHumidity(EnumHumidity.DAMP);
+
+ RIVER.importTemplate(WATER);
+ RIVER.addProduct(EnumHoneyComb.WATER, 30);
+ RIVER.addSpecialty(EnumHoneyComb.CLAY, 20);
+ RIVER.importTemplate(WATER);
+
+ OCEAN.importTemplate(WATER);
+ OCEAN.addProduct(EnumHoneyComb.WATER, 30);
+ OCEAN.importTemplate(WATER);
+ OCEAN.recessive();
+
+ INK.importTemplate(OCEAN);
+ INK.addProduct(EnumHoneyComb.WATER, 30);
+ INK.addSpecialty(new ItemStack(Items.dye, 1, 0), 10);
+
+ GROWING.importTemplate(ForestryAllele.BeeSpecies.Forest);
+ GROWING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 35);
+ GROWING.setFlowering(ForestryAllele.Flowering.Average);
+ GROWING.setFlowerProvider(ExtraBeesFlowers.LEAVES.getUID());
+
+ THRIVING.importTemplate(GROWING);
+ THRIVING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 35);
+ THRIVING.setFlowering(ForestryAllele.Flowering.Fast);
+
+ BLOOMING.importTemplate(THRIVING);
+ BLOOMING.setFlowering(ForestryAllele.Flowering.Fastest);
+ BLOOMING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 35);
+ BLOOMING.setFlowerProvider(ExtraBeesFlowers.Sapling.getUID());
+ BLOOMING.setEffect(ExtraBeesEffect.BonemealSapling.getUID());
+
+ SWEET.importTemplate(ForestryAllele.BeeSpecies.Rural);
+ SWEET.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 40);
+ SWEET.addProduct(new ItemStack(Items.sugar, 1, 0), 10);
+ SWEET.setFlowerProvider(ExtraBeesFlowers.SUGAR.getUID());
+
+ SUGAR.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 40);
+ SUGAR.addProduct(new ItemStack(Items.sugar, 1, 0), 20);
+ SUGAR.importTemplate(SWEET);
+
+ RIPENING.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 30);
+ RIPENING.addProduct(new ItemStack(Items.sugar, 1, 0), 10);
+ RIPENING.addSpecialty(EnumHoneyComb.FRUIT, 10);
+ RIPENING.setFlowerProvider(ExtraBeesFlowers.Fruit.getUID());
+ RIPENING.importTemplate(SUGAR);
+
+ FRUIT.importTemplate(RIPENING);
+ FRUIT.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 30);
+ FRUIT.addProduct(new ItemStack(Items.sugar, 1, 0), 15);
+ FRUIT.addSpecialty(EnumHoneyComb.FRUIT, 20);
+ FRUIT.setEffect(ExtraBeesEffect.BonemealFruit.getUID());
+ FRUIT.setHasEffect(true);
+
+ ALCOHOL.importTemplate(SWEET);
+ ALCOHOL.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 30);
+ ALCOHOL.addSpecialty(EnumHoneyComb.ALCOHOL, 10);
+ ALCOHOL.setEffect("forestry.effectDrunkard");
+ ALCOHOL.recessive();
+
+ FARM.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 30);
+ FARM.addSpecialty(EnumHoneyComb.SEED, 10);
+ FARM.importTemplate(ForestryAllele.BeeSpecies.Rural);
+
+ MILK.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 30);
+ MILK.addSpecialty(EnumHoneyComb.MILK, 10);
+ MILK.importTemplate(ForestryAllele.BeeSpecies.Rural);
+
+ COFFEE.addProduct(ItemHoneyComb.VanillaComb.WHEATEN.get(), 30);
+ COFFEE.addSpecialty(EnumHoneyComb.COFFEE, 8);
+ COFFEE.importTemplate(ForestryAllele.BeeSpecies.Rural);
+
+
+
+
+
+
+
+
+
+ SWAMP.addProduct(ItemHoneyComb.VanillaComb.MOSSY.get(), 30);
+ SWAMP.importTemplate(ForestryAllele.BeeSpecies.Marshy);
+ SWAMP.setHumidity(EnumHumidity.DAMP);
+ SWAMP.setEffect(ExtraBeesEffect.SLOW.getUID());
+
+ BOGGY.importTemplate(SWAMP);
+ BOGGY.addProduct(ItemHoneyComb.VanillaComb.MOSSY.get(), 30);
+ BOGGY.importTemplate(SWAMP);
+ BOGGY.recessive();
+
+ FUNGAL.importTemplate(BOGGY);
+ FUNGAL.addProduct(ItemHoneyComb.VanillaComb.MOSSY.get(), 30);
+ FUNGAL.addSpecialty(EnumHoneyComb.FUNGAL, 15);
+ FUNGAL.importTemplate(BOGGY);
+ FUNGAL.setEffect(ExtraBeesEffect.BonemealMushroom.getUID());
+ FUNGAL.setHasEffect(true);
+
+ BASALT.addProduct(ItemHoneyComb.VanillaComb.SIMMERING.get(), 25);
+ BASALT.importTemplate(ForestryAllele.BeeSpecies.Sinister);
+ BASALT.setEffect("forestry.effectAggressive");
+ BASALT.setSecondaryColor(10101539);
+ BASALT.setHumidity(EnumHumidity.ARID);
+ BASALT.setTemperature(EnumTemperature.HELLISH);
+
+ TEMPERED.addProduct(ItemHoneyComb.VanillaComb.SIMMERING.get(), 25);
+ TEMPERED.importTemplate(BASALT);
+ TEMPERED.setEffect(ExtraBeesEffect.METEOR.getUID());
+ TEMPERED.recessive();
+ TEMPERED.setSecondaryColor(10101539);
+
+ VOLCANIC.importTemplate(TEMPERED);
+ VOLCANIC.addProduct(ItemHoneyComb.VanillaComb.SIMMERING.get(), 25);
+ VOLCANIC.addSpecialty(EnumHoneyComb.BLAZE, 10);
+ VOLCANIC.setHasEffect(true);
+ VOLCANIC.setSecondaryColor(10101539);
+
+ MALICIOUS.importTemplate(ForestryAllele.BeeSpecies.Tropical);
+ MALICIOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 25);
+ MALICIOUS.setSecondaryColor(431972);
+ MALICIOUS.setHumidity(EnumHumidity.DAMP);
+ MALICIOUS.setTemperature(EnumTemperature.WARM);
+
+ INFECTIOUS.importTemplate(MALICIOUS);
+ INFECTIOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 25);
+ INFECTIOUS.setFlowering(ForestryAllele.Flowering.Slow);
+ INFECTIOUS.setSecondaryColor(431972);
+
+ VIRULENT.importTemplate(INFECTIOUS);
+ VIRULENT.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 25);
+ VIRULENT.addSpecialty(EnumHoneyComb.VENOMOUS, 12);
+ VIRULENT.setFlowering(ForestryAllele.Flowering.Average);
+ VIRULENT.recessive();
+ VIRULENT.setHasEffect(true);
+ VIRULENT.setSecondaryColor(431972);
+
+ VISCOUS.importTemplate(ForestryAllele.BeeSpecies.Tropical);
+ VISCOUS.setEffect(ExtraBeesEffect.ECTOPLASM.getUID());
+ VISCOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 25);
+ VISCOUS.setSecondaryColor(431972);
+ VISCOUS.setHumidity(EnumHumidity.DAMP);
+ VISCOUS.setSpeed(ForestryAllele.Speed.Slow);
+ VISCOUS.setTemperature(EnumTemperature.WARM);
+
+ GLUTINOUS.importTemplate(VISCOUS);
+ GLUTINOUS.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 25);
+ GLUTINOUS.setSpeed(ForestryAllele.Speed.Norm);
+ GLUTINOUS.setSecondaryColor(431972);
+
+ STICKY.importTemplate(GLUTINOUS);
+ STICKY.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 25);
+ STICKY.addSpecialty(EnumHoneyComb.SLIME, 12);
+ STICKY.setSpeed(ForestryAllele.Speed.Fast);
+ STICKY.setHasEffect(true);
+ STICKY.setSecondaryColor(431972);
+
+ CORROSIVE.importTemplate(STICKY);
+ CORROSIVE.setHumidity(EnumHumidity.DAMP);
+ CORROSIVE.setTemperature(EnumTemperature.WARM);
+ CORROSIVE.setEffect(ExtraBeesEffect.ACID.getUID());
+ CORROSIVE.setFlowering(ForestryAllele.Flowering.Average);
+ CORROSIVE.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 20);
+ CORROSIVE.recessive();
+ CORROSIVE.setSecondaryColor(431972);
+
+ CAUSTIC.importTemplate(CORROSIVE);
+ CAUSTIC.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 25);
+ CAUSTIC.addSpecialty(EnumHoneyComb.ACIDIC, 3);
+ CAUSTIC.setSecondaryColor(431972);
+
+ ACIDIC.importTemplate(CAUSTIC);
+ ACIDIC.addProduct(ItemHoneyComb.VanillaComb.SILKY.get(), 20);
+ ACIDIC.addSpecialty(EnumHoneyComb.ACIDIC, 16);
+ ACIDIC.setHasEffect(true);
+ ACIDIC.setSecondaryColor(431972);
+
+ EXCITED.setEffect(ExtraBeesEffect.LIGHTNING.getUID());
+ EXCITED.addProduct(EnumHoneyComb.REDSTONE, 10);
+ EXCITED.setCaveDwelling();
+ EXCITED.setFlowerProvider(ExtraBeesFlowers.REDSTONE.getUID());
+
+ ENERGETIC.importTemplate(EXCITED);
+ ENERGETIC.setEffect(ExtraBeesEffect.LIGHTNING.getUID());
+ ENERGETIC.addProduct(EnumHoneyComb.REDSTONE, 12);
+ ENERGETIC.recessive();
+
+ ECSTATIC.importTemplate(ENERGETIC);
+ ECSTATIC.setEffect(ExtraBeesEffect.Power.getUID());
+ ECSTATIC.addProduct(EnumHoneyComb.REDSTONE, 20);
+ ECSTATIC.addSpecialty(EnumHoneyComb.IC2ENERGY, 8);
+ ECSTATIC.setHasEffect(true);
+
+ ARTIC.importTemplate(ForestryAllele.BeeSpecies.Wintry);
+ ARTIC.addProduct(ItemHoneyComb.VanillaComb.FROZEN.get(), 25);
+ ARTIC.setTemperature(EnumTemperature.ICY);
+ ARTIC.setSecondaryColor(14349811);
+
+ FREEZING.importTemplate(ARTIC);
+ FREEZING.addProduct(ItemHoneyComb.VanillaComb.FROZEN.get(), 20);
+ FREEZING.addSpecialty(EnumHoneyComb.GLACIAL, 10);
+ FREEZING.setSecondaryColor(14349811);
+
+ SHADOW.importTemplate(BASALT);
+ SHADOW.setNocturnal();
+ SHADOW.addProduct(EnumHoneyComb.SHADOW, 5);
+ SHADOW.setEffect(ExtraBeesEffect.BLINDNESS.getUID());
+ SHADOW.setAllDay(false);
+ SHADOW.recessive();
+ SHADOW.setSecondaryColor(3355443);
+
+ DARKENED.addProduct(EnumHoneyComb.SHADOW, 10);
+ DARKENED.setNocturnal();
+ DARKENED.importTemplate(SHADOW);
+ DARKENED.setSecondaryColor(3355443);
+
+ ABYSS.importTemplate(DARKENED);
+ ABYSS.setNocturnal();
+ ABYSS.addProduct(EnumHoneyComb.SHADOW, 25);
+ ABYSS.setEffect(ExtraBeesEffect.WITHER.getUID());
+ ABYSS.setHasEffect(true);
+ ABYSS.setSecondaryColor(3355443);
+
+ CELEBRATORY.importTemplate(ForestryAllele.BeeSpecies.Merry);
+ CELEBRATORY.setEffect(ExtraBeesEffect.FIREWORKS.getUID());
+
+ GLOWSTONE.importTemplate(BASALT);
+ GLOWSTONE.addProduct(EnumHoneyComb.GLOWSTONE, 15);
+ GLOWSTONE.setSecondaryColor(10101539);
+
+ HAZARDOUS.importTemplate(ForestryAllele.BeeSpecies.Austere);
+ HAZARDOUS.addProduct(EnumHoneyComb.SALTPETER, 12);
+
+ JADED.importTemplate(ForestryAllele.BeeSpecies.Imperial);
+ JADED.setFertility(ForestryAllele.Fertility.Maximum);
+ JADED.setFlowering(ForestryAllele.Flowering.Maximum);
+ JADED.setTerritory(ForestryAllele.Territory.Largest);
+ JADED.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 30);
+ JADED.addSpecialty(Mods.Forestry.stack("pollen"), 20);
+ JADED.setHasEffect(true);
+ JADED.setSecondaryColor(14453483);
+
+ UNUSUAL.importTemplate(ForestryAllele.BeeSpecies.Ended);
+ UNUSUAL.setEffect(ExtraBeesEffect.GRAVITY.getUID());
+ UNUSUAL.setSecondaryColor(12231403);
+ UNUSUAL.addProduct(ItemHoneyComb.VanillaComb.QUARTZ.get(), 25);
+
+ SPATIAL.importTemplate(UNUSUAL);
+ SPATIAL.setEffect(ExtraBeesEffect.GRAVITY.getUID());
+ SPATIAL.setSecondaryColor(10768076);
+ SPATIAL.addProduct(ItemHoneyComb.VanillaComb.QUARTZ.get(), 25);
+ SPATIAL.addSpecialty(EnumHoneyComb.CERTUS, 5);
+
+ QUANTUM.importTemplate(QUANTUM);
+ QUANTUM.setEffect(ExtraBeesEffect.TELEPORT.getUID());
+ QUANTUM.setSecondaryColor(13963227);
+ QUANTUM.addProduct(ItemHoneyComb.VanillaComb.QUARTZ.get(), 25);
+ QUANTUM.addSpecialty(EnumHoneyComb.CERTUS, 15);
+ QUANTUM.addSpecialty(EnumHoneyComb.ENDERPEARL, 15);
+
+ JADED.addSpecialty(EnumHoneyComb.PURPLE, 15);
+ JADED.isCounted = false;
+
+ YELLORIUM.importTemplate(NUCLEAR);
+ YELLORIUM.addProduct(EnumHoneyComb.BARREN, 20);
+ YELLORIUM.addSpecialty(EnumHoneyComb.YELLORIUM, 2);
+ YELLORIUM.setEffect(ExtraBeesEffect.RADIOACTIVE.getUID());
+ YELLORIUM.setFertility(ForestryAllele.Fertility.Low);
+ YELLORIUM.setLifespan(ForestryAllele.Lifespan.Shortest);
+
+ CYANITE.importTemplate(YELLORIUM);
+ CYANITE.addProduct(EnumHoneyComb.BARREN, 20);
+ CYANITE.addSpecialty(EnumHoneyComb.CYANITE, 1);
+
+ BLUTONIUM.importTemplate(CYANITE);
+ BLUTONIUM.addProduct(EnumHoneyComb.BARREN, 20);
+ BLUTONIUM.addSpecialty(EnumHoneyComb.BLUTONIUM, 1);
+
+ MYSTICAL.importTemplate(ForestryAllele.BeeSpecies.Noble);
+ for (Map.Entry<ItemStack, Integer> entry : ForestryAllele.BeeSpecies.Noble.getAllele().getProducts().entrySet()) {
+ MYSTICAL.addProduct((ItemStack)entry.getKey(), ((Integer)entry.getValue()).intValue());
+ }
+ MYSTICAL.setFlowerProvider(ExtraBeesFlowers.Mystical.getUID());
+ for (ExtraBeesSpecies species : values())
+ {
+ if (species.state != State.Active) {
+ AlleleManager.alleleRegistry.blacklistAllele(species.getUID());
+ }
+ for (EnumBeeChromosome chromo : EnumBeeChromosome.values()) {
+ if (chromo != EnumBeeChromosome.HUMIDITY)
+ {
+ IAllele allele = species.template[chromo.ordinal()];
+ if ((allele == null) || (!chromo.getAlleleClass().isInstance(allele))) {
+ throw new RuntimeException(species.getName() + " has an invalid " + chromo.toString() + " chromosome!");
+ }
+ }
+ }
+ }
+ for (int i = 0; i < 16; i++)
+ {
+ ExtraBeesSpecies species = values()[(RED.ordinal() + i)];
+ EnumHoneyComb comb = EnumHoneyComb.values()[(EnumHoneyComb.RED.ordinal() + i)];
+ species.addProduct(ItemHoneyComb.VanillaComb.HONEY.get(), 75);
+ species.addSpecialty(comb, 25);
+ species.setSecondaryColor(9240320);
+ }
+ for (ExtraBeesSpecies species : values()) {
+ species.registerTemplate();
+ }
+ }
+
+ void setBranch(IClassification branch)
+ {
+ this.branch = branch;
+ }
+
+ public boolean isJubilant(World world, int biomeid, int x, int y, int z)
+ {
+ return true;
+ }
+
+ public boolean isJubilant(IBeeGenome genome, IBeeHousing housing)
+ {
+ return true;
+ }
+
+ public int getIconColour(int renderPass)
+ {
+ return renderPass == 1 ? this.secondaryColor : renderPass == 0 ? this.primaryColor : 16777215;
+ }
+
+ public IIconProvider getIconProvider()
+ {
+ return this;
+ }
+
+ public IIcon getIcon(short texUID)
+ {
+ return null;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ String iconType = "default";
+ String mod = "forestry";
+ if (this == JADED)
+ {
+ iconType = "jaded";
+ mod = "extrabees";
+ }
+ this.icons = new IIcon[EnumBeeType.values().length][3];
+
+ IIcon body1 = BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/body1");
+ for (int i = 0; i < EnumBeeType.values().length; i++) {
+ if (EnumBeeType.values()[i] != EnumBeeType.NONE)
+ {
+ this.icons[i][0] = BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/" + EnumBeeType.values()[i].toString().toLowerCase(Locale.ENGLISH) + ".outline");
+
+
+ this.icons[i][1] = (EnumBeeType.values()[i] != EnumBeeType.LARVAE ? body1 : BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/" + EnumBeeType.values()[i].toString().toLowerCase(Locale.ENGLISH) + ".body"));
+
+ this.icons[i][2] = BinnieCore.proxy.getIcon(register, mod, "bees/" + iconType + "/" + EnumBeeType.values()[i].toString().toLowerCase(Locale.ENGLISH) + ".body2");
+ }
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public IIcon getIcon(EnumBeeType type, int renderPass)
+ {
+ if (this.icons == null) {
+ return ARID.getIcon(type, renderPass);
+ }
+ return this.icons[type.ordinal()][renderPass];
+ }
+
+ public IBeeRoot getRoot()
+ {
+ return Binnie.Genetics.getBeeRoot();
+ }
+
+ boolean nocturnal = false;
+
+ public boolean isNocturnal()
+ {
+ return this.nocturnal;
+ }
+
+ public void setNocturnal()
+ {
+ this.nocturnal = true;
+ }
+
+ public void setAllDay()
+ {
+ setAllDay(true);
+ }
+
+ public void setAllDay(boolean allDay)
+ {
+ if (allDay) {
+ this.template[EnumBeeChromosome.NOCTURNAL.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolTrue");
+ } else {
+ this.template[EnumBeeChromosome.NOCTURNAL.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolFalse");
+ }
+ }
+
+ public void setCaveDwelling()
+ {
+ this.template[EnumBeeChromosome.CAVE_DWELLING.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolTrue");
+ }
+
+ public void setTolerantFlyer()
+ {
+ this.template[EnumBeeChromosome.TOLERANT_FLYER.ordinal()] = AlleleManager.alleleRegistry.getAllele("forestry.boolTrue");
+ }
+
+ public void setFlowerProvider(String uid)
+ {
+ IAllele allele = AlleleManager.alleleRegistry.getAllele(uid);
+ if ((allele instanceof IAlleleFlowers)) {
+ this.template[EnumBeeChromosome.FLOWER_PROVIDER.ordinal()] = allele;
+ }
+ }
+
+ public void setEffect(String uid)
+ {
+ IAllele allele = AlleleManager.alleleRegistry.getAllele(uid);
+ if ((allele instanceof IAlleleBeeEffect)) {
+ this.template[EnumBeeChromosome.EFFECT.ordinal()] = AlleleManager.alleleRegistry.getAllele(uid);
+ }
+ }
+
+ private void setFertility(ForestryAllele.Fertility fert)
+ {
+ this.template[EnumBeeChromosome.FERTILITY.ordinal()] = fert.getAllele();
+ }
+
+ private void setLifespan(ForestryAllele.Lifespan fert)
+ {
+ this.template[EnumBeeChromosome.LIFESPAN.ordinal()] = fert.getAllele();
+ }
+
+ private void setSpeed(ForestryAllele.Speed fert)
+ {
+ this.template[EnumBeeChromosome.SPEED.ordinal()] = fert.getAllele();
+ }
+
+ private void setTerritory(ForestryAllele.Territory fert)
+ {
+ this.template[EnumBeeChromosome.TERRITORY.ordinal()] = fert.getAllele();
+ }
+
+ private void setFlowering(ForestryAllele.Flowering fert)
+ {
+ this.template[EnumBeeChromosome.FLOWERING.ordinal()] = fert.getAllele();
+ }
+
+ private void setHumidityTolerance(Tolerance fert)
+ {
+ this.template[EnumBeeChromosome.HUMIDITY_TOLERANCE.ordinal()] = fert.getAllele();
+ }
+
+ private void setTemperatureTolerance(Tolerance both1)
+ {
+ this.template[EnumBeeChromosome.TEMPERATURE_TOLERANCE.ordinal()] = both1.getAllele();
+ }
+
+ public float getResearchSuitability(ItemStack itemstack)
+ {
+ if (itemstack == null) {
+ return 0.0F;
+ }
+ for (ItemStack stack : this.products.keySet()) {
+ if (stack.isItemEqual(itemstack)) {
+ return 1.0F;
+ }
+ }
+ for (ItemStack stack : this.specialties.keySet()) {
+ if (stack.isItemEqual(itemstack)) {
+ return 1.0F;
+ }
+ }
+ if (itemstack.getItem() == Items.glass_bottle) {
+ return 0.9F;
+ }
+ if (itemstack.getItem() == Mods.Forestry.item("honeyDrop")) {
+ return 0.5F;
+ }
+ if (itemstack.getItem() == Mods.Forestry.item("honeydew")) {
+ return 0.7F;
+ }
+ if (itemstack.getItem() == Mods.Forestry.item("beeComb")) {
+ return 0.4F;
+ }
+ if (AlleleManager.alleleRegistry.isIndividual(itemstack)) {
+ return 1.0F;
+ }
+ for (Map.Entry<ItemStack, Float> entry : getRoot().getResearchCatalysts().entrySet()) {
+ if (((ItemStack)entry.getKey()).isItemEqual(itemstack)) {
+ return ((Float)entry.getValue()).floatValue();
+ }
+ }
+ return 0.0F;
+ }
+
+ public ItemStack[] getResearchBounty(World world, GameProfile researcher, IIndividual individual, int bountyLevel)
+ {
+ ArrayList<ItemStack> bounty = new ArrayList();
+ ItemStack research = null;
+ if (world.rand.nextFloat() < 10.0F / bountyLevel)
+ {
+ Collection<? extends IMutation> combinations = getRoot().getCombinations(this);
+ if (combinations.size() > 0)
+ {
+ IMutation[] candidates = (IMutation[])combinations.toArray(new IMutation[0]);
+ research = AlleleManager.alleleRegistry.getMutationNoteStack(researcher, candidates[world.rand.nextInt(candidates.length)]);
+ }
+ }
+ if (research != null) {
+ bounty.add(research);
+ }
+ if (bountyLevel > 10) {
+ for (ItemStack stack : this.specialties.keySet())
+ {
+ ItemStack stack2 = stack.copy();
+ stack2.stackSize = (world.rand.nextInt((int)(bountyLevel / 2.0F)) + 1);
+ bounty.add(stack2);
+ }
+ }
+ for (ItemStack stack : this.products.keySet())
+ {
+ ItemStack stack2 = stack.copy();
+ stack2.stackSize = (world.rand.nextInt((int)(bountyLevel / 2.0F)) + 1);
+ bounty.add(stack2);
+ }
+ return (ItemStack[])bounty.toArray(new ItemStack[0]);
+ }
+
+ public String getEntityTexture()
+ {
+ return "/gfx/forestry/entities/bees/honeyBee.png";
+ }
+
+ public int getComplexity()
+ {
+ return 1 + getGeneticAdvancement(this, new ArrayList());
+ }
+
+ private int getGeneticAdvancement(IAllele species, ArrayList<IAllele> exclude)
+ {
+ int own = 1;
+ int highest = 0;
+ exclude.add(species);
+ for (IMutation mutation : getRoot().getPaths(species, EnumBeeChromosome.SPECIES))
+ {
+ if (!exclude.contains(mutation.getAllele0()))
+ {
+ int otherAdvance = getGeneticAdvancement(mutation.getAllele0(), exclude);
+ if (otherAdvance > highest) {
+ highest = otherAdvance;
+ }
+ }
+ if (!exclude.contains(mutation.getAllele1()))
+ {
+ int otherAdvance = getGeneticAdvancement(mutation.getAllele1(), exclude);
+ if (otherAdvance > highest) {
+ highest = otherAdvance;
+ }
+ }
+ }
+ return own + (highest < 0 ? 0 : highest);
+ }
+
+ public String getUnlocalizedName()
+ {
+ return getUID();
+ }
+
+ public Map<ItemStack, Float> getProductChances()
+ {
+ return null;
+ }
+
+ public Map<ItemStack, Float> getSpecialtyChances()
+ {
+ return null;
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/ModuleGenetics.java b/src/Java/binnie/extrabees/genetics/ModuleGenetics.java
new file mode 100644
index 0000000000..626796266d
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/ModuleGenetics.java
@@ -0,0 +1,88 @@
+package binnie.extrabees.genetics;
+
+import binnie.Binnie;
+import binnie.core.BinnieCore;
+import binnie.core.IInitializable;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.liquid.ManagerLiquid;
+import binnie.core.proxy.BinnieProxy;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.genetics.effect.BlockEctoplasm;
+import binnie.extrabees.genetics.effect.ExtraBeesEffect;
+import binnie.extrabees.genetics.items.ItemDictionary;
+import cpw.mods.fml.common.registry.GameRegistry;
+import forestry.api.apiculture.EnumBeeType;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IAlleleRegistry;
+import forestry.api.genetics.IGenome;
+import forestry.api.recipes.ICarpenterManager;
+import forestry.api.recipes.RecipeManagers;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class ModuleGenetics
+ implements IInitializable
+{
+ public void preInit()
+ {
+ for (ExtraBeesSpecies species : ) {
+ AlleleManager.alleleRegistry.registerAllele(species);
+ }
+ ExtraBees.dictionary = new ItemDictionary();
+ ExtraBees.ectoplasm = new BlockEctoplasm();
+
+ GameRegistry.registerBlock(ExtraBees.ectoplasm, "ectoplasm");
+ }
+
+ public void init()
+ {
+ ExtraBeesEffect.doInit();
+ ExtraBeesFlowers.doInit();
+ ExtraBeesSpecies.doInit();
+ ExtraBeeMutation.doInit();
+ ExtraBeesBranch.doInit();
+ }
+
+ public void postInit()
+ {
+ int ebSpeciesCount = 0;
+ int ebTotalSpeciesCount = 0;
+ for (ExtraBeesSpecies species : ExtraBeesSpecies.values())
+ {
+ ebTotalSpeciesCount++;
+ if (!AlleleManager.alleleRegistry.isBlacklisted(species.getUID())) {
+ ebSpeciesCount++;
+ }
+ }
+ RecipeManagers.carpenterManager.addRecipe(100, Binnie.Liquid.getLiquidStack("water", 2000), null, new ItemStack(ExtraBees.dictionary), new Object[] { "X#X", "YEY", "RDR", Character.valueOf('#'), Blocks.glass_pane, Character.valueOf('X'), Items.gold_ingot, Character.valueOf('Y'), "ingotTin", Character.valueOf('R'), Items.redstone, Character.valueOf('D'), Items.diamond, Character.valueOf('E'), Items.emerald });
+ }
+
+ public static IGenome getGenome(IAlleleBeeSpecies allele0)
+ {
+ return Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(allele0.getUID()));
+ }
+
+ public static ItemStack getBeeIcon(IAlleleBeeSpecies species)
+ {
+ if (species == null) {
+ return null;
+ }
+ IAllele[] template = Binnie.Genetics.getBeeRoot().getTemplate(species.getUID());
+ if (template == null) {
+ return null;
+ }
+ IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(template);
+
+ IBee bee = Binnie.Genetics.getBeeRoot().getBee(BinnieCore.proxy.getWorld(), genome);
+
+ ItemStack item = Binnie.Genetics.getBeeRoot().getMemberStack(bee, EnumBeeType.PRINCESS.ordinal());
+
+ return item;
+ }
+}
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;
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/items/ItemDictionary.java b/src/Java/binnie/extrabees/genetics/items/ItemDictionary.java
new file mode 100644
index 0000000000..82e5754484
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/items/ItemDictionary.java
@@ -0,0 +1,73 @@
+package binnie.extrabees.genetics.items;
+
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.core.Tabs;
+import java.util.List;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+public class ItemDictionary
+ extends Item
+{
+ IIcon iconMaster;
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.itemIcon = ExtraBees.proxy.getIcon(register, "apiaristDatabase");
+ this.iconMaster = ExtraBees.proxy.getIcon(register, "masterApiaristDatabase");
+ }
+
+ @SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamage(int par1)
+ {
+ return par1 == 0 ? this.itemIcon : this.iconMaster;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
+ {
+ super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4);
+ if (par1ItemStack.getItemDamage() > 0) {
+ par3List.add("Flora-in-a-box");
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List)
+ {
+ super.getSubItems(par1, par2CreativeTabs, par3List);
+ par3List.add(new ItemStack(par1, 1, 1));
+ }
+
+ public ItemDictionary()
+ {
+ setCreativeTab(Tabs.tabApiculture);
+ setUnlocalizedName("dictionary");
+ setMaxStackSize(1);
+ }
+
+ public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player)
+ {
+ if (itemstack.getItemDamage() == 0) {
+ ExtraBees.proxy.openGui(ExtraBeeGUID.Database, player, (int)player.posX, (int)player.posY, (int)player.posZ);
+ } else {
+ ExtraBees.proxy.openGui(ExtraBeeGUID.DatabaseNEI, player, (int)player.posX, (int)player.posY, (int)player.posZ);
+ }
+ return itemstack;
+ }
+
+ public String getItemStackDisplayName(ItemStack i)
+ {
+ return i.getItemDamage() == 0 ? "Apiarist Database" : "Master Apiarist Database";
+ }
+}
diff --git a/src/Java/binnie/extrabees/genetics/items/ItemPunnettSquare.java b/src/Java/binnie/extrabees/genetics/items/ItemPunnettSquare.java
new file mode 100644
index 0000000000..7534802687
--- /dev/null
+++ b/src/Java/binnie/extrabees/genetics/items/ItemPunnettSquare.java
@@ -0,0 +1,41 @@
+package binnie.extrabees.genetics.items;
+
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.core.ExtraBeeGUID;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class ItemPunnettSquare
+ extends Item
+{
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.itemIcon = ExtraBees.proxy.getIcon(register, "");
+ }
+
+ public ItemPunnettSquare()
+ {
+ setCreativeTab(CreativeTabs.tabTools);
+ setMaxStackSize(1);
+ }
+
+ public String getItemStackDisplayName(ItemStack itemstack)
+ {
+ return "Punnett Square";
+ }
+
+ public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player)
+ {
+ ExtraBees.proxy.openGui(ExtraBeeGUID.PunnettSquare, player, (int)player.posX, (int)player.posY, (int)player.posZ);
+
+ return itemstack;
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/WindowAlvearyFrame.java b/src/Java/binnie/extrabees/gui/WindowAlvearyFrame.java
new file mode 100644
index 0000000000..a14d9a0a8f
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/WindowAlvearyFrame.java
@@ -0,0 +1,53 @@
+package binnie.extrabees.gui;
+
+import binnie.core.AbstractMod;
+import binnie.core.machines.Machine;
+import binnie.core.machines.TileEntityMachine;
+import binnie.craftgui.minecraft.Window;
+import binnie.craftgui.minecraft.control.ControlPlayerInventory;
+import binnie.craftgui.minecraft.control.ControlSlot;
+import binnie.extrabees.ExtraBees;
+import cpw.mods.fml.relauncher.Side;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+
+public class WindowAlvearyFrame
+ extends Window
+{
+ Machine machine;
+ ControlPlayerInventory playerInventory;
+
+ public WindowAlvearyFrame(EntityPlayer player, IInventory inventory, Side side)
+ {
+ super(176.0F, 144.0F, player, inventory, side);
+ this.machine = ((TileEntityMachine)inventory).getMachine();
+ }
+
+ public static Window create(EntityPlayer player, IInventory inventory, Side side)
+ {
+ if ((player == null) || (inventory == null)) {
+ return null;
+ }
+ return new WindowAlvearyFrame(player, inventory, side);
+ }
+
+ public void initialiseClient()
+ {
+ setTitle("Frame Housing");
+
+ this.playerInventory = new ControlPlayerInventory(this);
+
+ ControlSlot slot = new ControlSlot(this, 79.0F, 30.0F);
+ slot.assign(0);
+ }
+
+ public AbstractMod getMod()
+ {
+ return ExtraBees.instance;
+ }
+
+ public String getName()
+ {
+ return "AlvearyFrame";
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/WindowAlvearyHatchery.java b/src/Java/binnie/extrabees/gui/WindowAlvearyHatchery.java
new file mode 100644
index 0000000000..081425acf5
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/WindowAlvearyHatchery.java
@@ -0,0 +1,54 @@
+package binnie.extrabees.gui;
+
+import binnie.core.AbstractMod;
+import binnie.core.machines.Machine;
+import binnie.core.machines.TileEntityMachine;
+import binnie.craftgui.minecraft.Window;
+import binnie.craftgui.minecraft.control.ControlPlayerInventory;
+import binnie.craftgui.minecraft.control.ControlSlotArray;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.apiary.machine.AlvearyHatchery;
+import cpw.mods.fml.relauncher.Side;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+
+public class WindowAlvearyHatchery
+ extends Window
+{
+ Machine machine;
+ ControlPlayerInventory playerInventory;
+
+ public WindowAlvearyHatchery(EntityPlayer player, IInventory inventory, Side side)
+ {
+ super(176.0F, 144.0F, player, inventory, side);
+ this.machine = ((TileEntityMachine)inventory).getMachine();
+ }
+
+ public static Window create(EntityPlayer player, IInventory inventory, Side side)
+ {
+ if ((player == null) || (inventory == null)) {
+ return null;
+ }
+ return new WindowAlvearyHatchery(player, inventory, side);
+ }
+
+ public void initialiseClient()
+ {
+ setTitle("Hatchery");
+
+ this.playerInventory = new ControlPlayerInventory(this);
+
+ ControlSlotArray slot = new ControlSlotArray(this, 43, 30, 5, 1);
+ slot.create(AlvearyHatchery.slotLarvae);
+ }
+
+ public AbstractMod getMod()
+ {
+ return ExtraBees.instance;
+ }
+
+ public String getName()
+ {
+ return "AlvearyHatchery";
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java b/src/Java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java
new file mode 100644
index 0000000000..07b47f03c9
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java
@@ -0,0 +1,53 @@
+package binnie.extrabees.gui;
+
+import binnie.core.AbstractMod;
+import binnie.core.machines.Machine;
+import binnie.core.machines.TileEntityMachine;
+import binnie.craftgui.minecraft.Window;
+import binnie.craftgui.minecraft.control.ControlPlayerInventory;
+import binnie.craftgui.minecraft.control.ControlSlot;
+import binnie.extrabees.ExtraBees;
+import cpw.mods.fml.relauncher.Side;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+
+public class WindowAlvearyIndustrialFrame
+ extends Window
+{
+ Machine machine;
+ ControlPlayerInventory playerInventory;
+
+ public WindowAlvearyIndustrialFrame(EntityPlayer player, IInventory inventory, Side side)
+ {
+ super(176.0F, 144.0F, player, inventory, side);
+ this.machine = ((TileEntityMachine)inventory).getMachine();
+ }
+
+ public static Window create(EntityPlayer player, IInventory inventory, Side side)
+ {
+ if ((player == null) || (inventory == null)) {
+ return null;
+ }
+ return new WindowAlvearyIndustrialFrame(player, inventory, side);
+ }
+
+ public void initialiseClient()
+ {
+ setTitle("Industrial Frame Housing");
+
+ this.playerInventory = new ControlPlayerInventory(this);
+
+ ControlSlot slot = new ControlSlot(this, 79.0F, 30.0F);
+ slot.assign(0);
+ }
+
+ public AbstractMod getMod()
+ {
+ return ExtraBees.instance;
+ }
+
+ public String getName()
+ {
+ return "AlvearyIndustrialFrame";
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/WindowAlvearyMutator.java b/src/Java/binnie/extrabees/gui/WindowAlvearyMutator.java
new file mode 100644
index 0000000000..f2cf458145
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/WindowAlvearyMutator.java
@@ -0,0 +1,78 @@
+package binnie.extrabees.gui;
+
+import binnie.core.AbstractMod;
+import binnie.core.machines.Machine;
+import binnie.core.machines.TileEntityMachine;
+import binnie.craftgui.controls.ControlText;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.TextJustification;
+import binnie.craftgui.minecraft.Window;
+import binnie.craftgui.minecraft.control.ControlItemDisplay;
+import binnie.craftgui.minecraft.control.ControlPlayerInventory;
+import binnie.craftgui.minecraft.control.ControlSlot;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.apiary.machine.AlvearyMutator;
+import cpw.mods.fml.relauncher.Side;
+import java.util.Collection;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+
+public class WindowAlvearyMutator
+ extends Window
+{
+ Machine machine;
+ ControlPlayerInventory playerInventory;
+
+ public WindowAlvearyMutator(EntityPlayer player, IInventory inventory, Side side)
+ {
+ super(176.0F, 176.0F, player, inventory, side);
+ this.machine = ((TileEntityMachine)inventory).getMachine();
+ }
+
+ public static Window create(EntityPlayer player, IInventory inventory, Side side)
+ {
+ if ((player == null) || (inventory == null)) {
+ return null;
+ }
+ return new WindowAlvearyMutator(player, inventory, side);
+ }
+
+ public void initialiseClient()
+ {
+ setTitle("Mutator");
+
+ this.playerInventory = new ControlPlayerInventory(this);
+
+ ControlSlot slot = new ControlSlot(this, 79.0F, 30.0F);
+ slot.assign(0);
+
+ new ControlText(this, new IArea(0.0F, 52.0F, w(), 16.0F), "Possible Mutagens:", TextJustification.MiddleCenter).setColour(5592405);
+
+ int size = AlvearyMutator.getMutagens().size();
+
+ int w = size * 18;
+ float x;
+ if (size > 0)
+ {
+ x = (w() - w) / 2.0F;
+ for (ItemStack stack : AlvearyMutator.getMutagens())
+ {
+ ControlItemDisplay display = new ControlItemDisplay(this, x, 66.0F);
+ display.setItemStack(stack);
+ display.hastooltip = true;
+ x += 18.0F;
+ }
+ }
+ }
+
+ public AbstractMod getMod()
+ {
+ return ExtraBees.instance;
+ }
+
+ public String getName()
+ {
+ return "AlvearyMutator";
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/WindowAlvearyStimulator.java b/src/Java/binnie/extrabees/gui/WindowAlvearyStimulator.java
new file mode 100644
index 0000000000..2e3b9736a5
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/WindowAlvearyStimulator.java
@@ -0,0 +1,56 @@
+package binnie.extrabees.gui;
+
+import binnie.core.AbstractMod;
+import binnie.core.machines.Machine;
+import binnie.core.machines.TileEntityMachine;
+import binnie.craftgui.core.geometry.Position;
+import binnie.craftgui.minecraft.Window;
+import binnie.craftgui.minecraft.control.ControlEnergyBar;
+import binnie.craftgui.minecraft.control.ControlPlayerInventory;
+import binnie.craftgui.minecraft.control.ControlSlot;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.apiary.machine.AlvearyStimulator;
+import cpw.mods.fml.relauncher.Side;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+
+public class WindowAlvearyStimulator
+ extends Window
+{
+ Machine machine;
+ ControlPlayerInventory playerInventory;
+
+ public WindowAlvearyStimulator(EntityPlayer player, IInventory inventory, Side side)
+ {
+ super(176.0F, 144.0F, player, inventory, side);
+ this.machine = ((TileEntityMachine)inventory).getMachine();
+ }
+
+ public static Window create(EntityPlayer player, IInventory inventory, Side side)
+ {
+ if ((player == null) || (inventory == null)) {
+ return null;
+ }
+ return new WindowAlvearyStimulator(player, inventory, side);
+ }
+
+ public void initialiseClient()
+ {
+ setTitle("Stimulator");
+ new ControlEnergyBar(this, 75, 29, 60, 16, Position.Left);
+ ControlSlot slot = new ControlSlot(this, 41.0F, 28.0F);
+ slot.assign(AlvearyStimulator.slotCircuit);
+
+ this.playerInventory = new ControlPlayerInventory(this);
+ }
+
+ public AbstractMod getMod()
+ {
+ return ExtraBees.instance;
+ }
+
+ public String getName()
+ {
+ return "AlvearyStimulator";
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/ControlBiomes.java b/src/Java/binnie/extrabees/gui/database/ControlBiomes.java
new file mode 100644
index 0000000000..1299df72ca
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/ControlBiomes.java
@@ -0,0 +1,75 @@
+package binnie.extrabees.gui.database;
+
+import binnie.Binnie;
+import binnie.core.BinnieCore;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.proxy.BinnieProxy;
+import binnie.craftgui.controls.core.Control;
+import binnie.craftgui.core.Attribute;
+import binnie.craftgui.core.CraftGUI;
+import binnie.craftgui.core.ITooltip;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.core.Tooltip;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.IPoint;
+import binnie.craftgui.core.renderer.Renderer;
+import binnie.craftgui.resource.minecraft.CraftGUITexture;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeRoot;
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.world.biome.BiomeGenBase;
+
+public class ControlBiomes
+ extends Control
+ implements ITooltip
+{
+ public ControlBiomes(IWidget parent, int x, int y, int width, int height)
+ {
+ super(parent, x, y, width * 16, height * 16);
+ addAttribute(Attribute.MouseOver);
+ }
+
+ List<Integer> tolerated = new ArrayList();
+
+ public void getTooltip(Tooltip list)
+ {
+ if (this.tolerated.isEmpty()) {
+ return;
+ }
+ int x = (int)(getRelativeMousePosition().x() / 16.0F);
+ int y = (int)(getRelativeMousePosition().y() / 16.0F);
+
+ int i = x + y * 8;
+ if (i < this.tolerated.size()) {
+ list.add(BiomeGenBase.getBiome(((Integer)this.tolerated.get(i)).intValue()).biomeName);
+ }
+ }
+
+ public void onRenderForeground()
+ {
+ for (int i = 0; i < this.tolerated.size(); i++)
+ {
+ int x = i % 8 * 16;
+ int y = i / 8 * 16;
+ if (BiomeGenBase.getBiome(i) != null) {
+ CraftGUI.Render.colour(BiomeGenBase.getBiome(i).color);
+ }
+ CraftGUI.Render.texture(CraftGUITexture.Button, new IArea(x, y, 16.0F, 16.0F));
+ }
+ }
+
+ public void setSpecies(IAlleleBeeSpecies species)
+ {
+ this.tolerated.clear();
+ if (species == null) {
+ return;
+ }
+ IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()));
+
+
+ IBee bee = Binnie.Genetics.getBeeRoot().getBee(BinnieCore.proxy.getWorld(), genome);
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/ControlClimateBar.java b/src/Java/binnie/extrabees/gui/database/ControlClimateBar.java
new file mode 100644
index 0000000000..688bbd40c5
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/ControlClimateBar.java
@@ -0,0 +1,153 @@
+package binnie.extrabees.gui.database;
+
+import binnie.Binnie;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.craftgui.controls.core.Control;
+import binnie.craftgui.core.Attribute;
+import binnie.craftgui.core.CraftGUI;
+import binnie.craftgui.core.ITooltip;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.core.Tooltip;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.IPoint;
+import binnie.craftgui.core.renderer.Renderer;
+import binnie.craftgui.resource.minecraft.CraftGUITexture;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.core.EnumHumidity;
+import forestry.api.core.EnumTemperature;
+import forestry.api.genetics.EnumTolerance;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ControlClimateBar
+ extends Control
+ implements ITooltip
+{
+ public ControlClimateBar(IWidget parent, int x, int y, int width, int height)
+ {
+ super(parent, x, y, width, height);
+ addAttribute(Attribute.MouseOver);
+ }
+
+ public ControlClimateBar(IWidget parent, int x, int y, int width, int height, boolean humidity)
+ {
+ super(parent, x, y, width, height);
+ addAttribute(Attribute.MouseOver);
+ this.isHumidity = true;
+ }
+
+ boolean isHumidity = false;
+ List<Integer> tolerated = new ArrayList();
+
+ public void getTooltip(Tooltip list)
+ {
+ if (this.tolerated.isEmpty()) {
+ return;
+ }
+ int types = this.isHumidity ? 3 : 6;
+
+ int type = (int)((int)(getRelativeMousePosition().x() - 1.0F) / ((getSize().x() - 2.0F) / types));
+ if (!this.tolerated.contains(Integer.valueOf(type))) {
+ return;
+ }
+ if (type < types) {
+ if (this.isHumidity) {
+ list.add(EnumHumidity.values()[type].name);
+ } else {
+ list.add(EnumTemperature.values()[(type + 1)].name);
+ }
+ }
+ }
+
+ int[] tempColours = { 65531, 7912447, 5242672, 16776960, 16753152, 16711680 };
+ int[] humidColours = { 16770979, 1769216, 3177727 };
+
+ public void onRenderBackground()
+ {
+ CraftGUI.Render.texture(CraftGUITexture.EnergyBarBack, getArea());
+
+ int types = this.isHumidity ? 3 : 6;
+ int w = (int)((getSize().x() - 2.0F) / types);
+ for (int i = 0; i < types; i++)
+ {
+ int x = i * w;
+ if (this.tolerated.contains(Integer.valueOf(i)))
+ {
+ int colour = 0;
+ if (this.isHumidity) {
+ colour = this.humidColours[i];
+ } else {
+ colour = this.tempColours[i];
+ }
+ CraftGUI.Render.solid(new IArea(x + 1, 1.0F, w, getSize().y() - 2.0F), colour);
+ }
+ }
+ CraftGUI.Render.texture(CraftGUITexture.EnergyBarGlass, getArea());
+ }
+
+ public void setSpecies(IAlleleBeeSpecies species)
+ {
+ this.tolerated.clear();
+ if (species == null) {
+ return;
+ }
+ EnumTolerance tolerance;
+ int main;
+ EnumTolerance tolerance;
+ if (!this.isHumidity)
+ {
+ int main = species.getTemperature().ordinal() - 1;
+ IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()));
+
+
+ tolerance = genome.getToleranceTemp();
+ }
+ else
+ {
+ main = species.getHumidity().ordinal();
+ IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(Binnie.Genetics.getBeeRoot().getTemplate(species.getUID()));
+
+
+ tolerance = genome.getToleranceHumid();
+ }
+ this.tolerated.add(Integer.valueOf(main));
+ switch (1.$SwitchMap$forestry$api$genetics$EnumTolerance[tolerance.ordinal()])
+ {
+ case 1:
+ case 2:
+ this.tolerated.add(Integer.valueOf(main + 5));
+ case 3:
+ case 4:
+ this.tolerated.add(Integer.valueOf(main + 4));
+ case 5:
+ case 6:
+ this.tolerated.add(Integer.valueOf(main + 3));
+ case 7:
+ case 8:
+ this.tolerated.add(Integer.valueOf(main + 2));
+ case 9:
+ case 10:
+ this.tolerated.add(Integer.valueOf(main + 1));
+ }
+ switch (1.$SwitchMap$forestry$api$genetics$EnumTolerance[tolerance.ordinal()])
+ {
+ case 1:
+ case 11:
+ this.tolerated.add(Integer.valueOf(main - 5));
+ case 3:
+ case 12:
+ this.tolerated.add(Integer.valueOf(main - 4));
+ case 5:
+ case 13:
+ this.tolerated.add(Integer.valueOf(main - 3));
+ case 7:
+ case 14:
+ this.tolerated.add(Integer.valueOf(main - 2));
+ case 9:
+ case 15:
+ this.tolerated.add(Integer.valueOf(main - 1));
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/ControlProductsBox.java b/src/Java/binnie/extrabees/gui/database/ControlProductsBox.java
new file mode 100644
index 0000000000..f6103f9bba
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/ControlProductsBox.java
@@ -0,0 +1,92 @@
+package binnie.extrabees.gui.database;
+
+import binnie.Binnie;
+import binnie.core.BinnieCore;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.proxy.BinnieProxy;
+import binnie.craftgui.controls.listbox.ControlList;
+import binnie.craftgui.controls.listbox.ControlListBox;
+import binnie.craftgui.core.IWidget;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.apiculture.IBeekeepingMode;
+import forestry.api.genetics.IAllele;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import net.minecraft.item.ItemStack;
+
+public class ControlProductsBox
+ extends ControlListBox<Product>
+{
+ private int index;
+ private Type type;
+
+ public IWidget createOption(Product value, int y)
+ {
+ return new ControlProductsItem((ControlList)getContent(), value, y);
+ }
+
+ static enum Type
+ {
+ Products, Specialties;
+
+ private Type() {}
+ }
+
+ class Product
+ {
+ ItemStack item;
+ float chance;
+
+ public Product(ItemStack item, float chance)
+ {
+ this.item = item;
+ this.chance = chance;
+ }
+ }
+
+ public ControlProductsBox(IWidget parent, int x, int y, int width, int height, Type type)
+ {
+ super(parent, x, y, width, height, 12.0F);
+ this.type = type;
+ }
+
+ IAlleleBeeSpecies species = null;
+
+ public void setSpecies(IAlleleBeeSpecies species)
+ {
+ if (species != this.species)
+ {
+ this.species = species;
+ if (species != null)
+ {
+ IAllele[] template = Binnie.Genetics.getBeeRoot().getTemplate(species.getUID());
+ if (template == null) {
+ return;
+ }
+ IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(template);
+
+ float speed = genome.getSpeed();
+
+ float modeSpeed = Binnie.Genetics.getBeeRoot().getBeekeepingMode(BinnieCore.proxy.getWorld()).getProductionModifier(genome, 1.0F);
+
+
+
+ List<Product> strings = new ArrayList();
+ if (this.type == Type.Products) {
+ for (Map.Entry<ItemStack, Integer> entry : species.getProducts().entrySet()) {
+ strings.add(new Product((ItemStack)entry.getKey(), speed * modeSpeed * ((Integer)entry.getValue()).intValue()));
+ }
+ } else {
+ for (Map.Entry<ItemStack, Integer> entry : species.getSpecialty().entrySet()) {
+ strings.add(new Product((ItemStack)entry.getKey(), speed * modeSpeed * ((Integer)entry.getValue()).intValue()));
+ }
+ }
+ setOptions(strings);
+ }
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/ControlProductsItem.java b/src/Java/binnie/extrabees/gui/database/ControlProductsItem.java
new file mode 100644
index 0000000000..4f449e3558
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/ControlProductsItem.java
@@ -0,0 +1,44 @@
+package binnie.extrabees.gui.database;
+
+import binnie.craftgui.controls.ControlText;
+import binnie.craftgui.controls.ControlTextCentered;
+import binnie.craftgui.controls.listbox.ControlList;
+import binnie.craftgui.controls.listbox.ControlOption;
+import binnie.craftgui.core.geometry.CraftGUIUtil;
+import binnie.craftgui.core.geometry.IPoint;
+import binnie.craftgui.minecraft.control.ControlItemDisplay;
+import java.text.DecimalFormat;
+
+public class ControlProductsItem
+ extends ControlOption<ControlProductsBox.Product>
+{
+ ControlItemDisplay item;
+
+ public ControlProductsItem(ControlList<ControlProductsBox.Product> controlList, ControlProductsBox.Product value, int y)
+ {
+ super(controlList, value, y);
+ this.item = new ControlItemDisplay(this, 4.0F, 4.0F);
+ this.item.setTooltip();
+
+ ControlText textWidget = new ControlTextCentered(this, 2.0F, "");
+ CraftGUIUtil.moveWidget(textWidget, new IPoint(12.0F, 0.0F));
+ if (value != null)
+ {
+ this.item.setItemStack(value.item);
+ float time = (int)(55000.0D / value.chance);
+
+ float seconds = time / 20.0F;
+ float minutes = seconds / 60.0F;
+ float hours = minutes / 60.0F;
+
+ DecimalFormat df = new DecimalFormat("#.0");
+ if (hours > 1.0F) {
+ textWidget.setValue("Every " + df.format(hours) + " hours");
+ } else if (minutes > 1.0F) {
+ textWidget.setValue("Every " + df.format(minutes) + " min.");
+ } else {
+ textWidget.setValue("Every " + df.format(seconds) + " sec.");
+ }
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/PageSpeciesClimate.java b/src/Java/binnie/extrabees/gui/database/PageSpeciesClimate.java
new file mode 100644
index 0000000000..3b93ff1b3c
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/PageSpeciesClimate.java
@@ -0,0 +1,36 @@
+package binnie.extrabees.gui.database;
+
+import binnie.craftgui.controls.ControlTextCentered;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.mod.database.DatabaseTab;
+import binnie.craftgui.mod.database.PageSpecies;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.genetics.IAlleleSpecies;
+
+public class PageSpeciesClimate
+ extends PageSpecies
+{
+ ControlClimateBar tempBar;
+ ControlClimateBar humidBar;
+ ControlBiomes biomes;
+
+ public PageSpeciesClimate(IWidget parent, DatabaseTab tab)
+ {
+ super(parent, tab);
+
+ new ControlTextCentered(this, 8.0F, "Climate");
+
+ this.tempBar = new ControlClimateBar(this, 8, 24, 128, 12);
+ this.humidBar = new ControlClimateBar(this, 8, 42, 128, 12, true);
+ new ControlTextCentered(this, 70.0F, "Biomes");
+
+ this.biomes = new ControlBiomes(this, 8, 90, 8, 4);
+ }
+
+ public void onValueChanged(IAlleleSpecies species)
+ {
+ this.tempBar.setSpecies((IAlleleBeeSpecies)species);
+ this.humidBar.setSpecies((IAlleleBeeSpecies)species);
+ this.biomes.setSpecies((IAlleleBeeSpecies)species);
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/PageSpeciesGenome.java b/src/Java/binnie/extrabees/gui/database/PageSpeciesGenome.java
new file mode 100644
index 0000000000..a69e528d51
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/PageSpeciesGenome.java
@@ -0,0 +1,206 @@
+package binnie.extrabees.gui.database;
+
+import binnie.Binnie;
+import binnie.core.BinnieCore;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.core.proxy.BinnieProxy;
+import binnie.craftgui.controls.ControlText;
+import binnie.craftgui.controls.ControlTextCentered;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.TextJustification;
+import binnie.craftgui.mod.database.DatabaseTab;
+import binnie.craftgui.mod.database.PageSpecies;
+import forestry.api.apiculture.IAlleleBeeEffect;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeRoot;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IAlleleSpecies;
+import forestry.api.genetics.IFlowerProvider;
+
+public class PageSpeciesGenome
+ extends PageSpecies
+{
+ ControlText pageSpeciesGenome_Title;
+ ControlText pageSpeciesGenome_SpeedText;
+ ControlText pageSpeciesGenome_LifespanText;
+ ControlText pageSpeciesGenome_FertilityText;
+ ControlText pageSpeciesGenome_FloweringText;
+ ControlText pageSpeciesGenome_TerritoryText;
+ ControlText pageSpeciesGenome_NocturnalText;
+ ControlText pageSpeciesGenome_CaveDwellingText;
+ ControlText pageSpeciesGenome_TolerantFlyerText;
+ ControlText pageSpeciesGenome_FlowerText;
+ ControlText pageSpeciesGenome_EffectText;
+
+ public PageSpeciesGenome(IWidget parent, DatabaseTab tab)
+ {
+ super(parent, tab);
+
+ this.pageSpeciesGenome_Title = new ControlTextCentered(this, 8.0F, "Genome");
+
+ new ControlText(this, new IArea(0.0F, 32.0F, 68.0F, 30.0F), "Speed:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 44.0F, 68.0F, 30.0F), "Lifespan:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 56.0F, 68.0F, 30.0F), "Fertility:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 68.0F, 68.0F, 30.0F), "Flowering:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 80.0F, 68.0F, 30.0F), "Territory:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 97.0F, 68.0F, 30.0F), "Behavior:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 109.0F, 68.0F, 30.0F), "Sunlight:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 121.0F, 68.0F, 30.0F), "Rain:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 138.0F, 68.0F, 30.0F), "Flower:", TextJustification.TopRight);
+ new ControlText(this, new IArea(0.0F, 155.0F, 68.0F, 30.0F), "Effect:", TextJustification.TopRight);
+
+ int x = 72;
+
+ this.pageSpeciesGenome_SpeedText = new ControlText(this, new IArea(x, 32.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_LifespanText = new ControlText(this, new IArea(x, 44.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_FertilityText = new ControlText(this, new IArea(x, 56.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_FloweringText = new ControlText(this, new IArea(x, 68.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_TerritoryText = new ControlText(this, new IArea(x, 80.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_NocturnalText = new ControlText(this, new IArea(x, 97.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_CaveDwellingText = new ControlText(this, new IArea(x, 109.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_TolerantFlyerText = new ControlText(this, new IArea(x, 121.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_FlowerText = new ControlText(this, new IArea(x, 138.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+
+ this.pageSpeciesGenome_EffectText = new ControlText(this, new IArea(x, 155.0F, 72.0F, 30.0F), "", TextJustification.TopLeft);
+ }
+
+ public void onValueChanged(IAlleleSpecies species)
+ {
+ IAllele[] template = Binnie.Genetics.getBeeRoot().getTemplate(species.getUID());
+ if (template != null)
+ {
+ IBeeGenome genome = Binnie.Genetics.getBeeRoot().templateAsGenome(template);
+
+ IBee bee = Binnie.Genetics.getBeeRoot().getBee(BinnieCore.proxy.getWorld(), genome);
+
+
+ this.pageSpeciesGenome_SpeedText.setValue(rateSpeed(genome.getSpeed()));
+ this.pageSpeciesGenome_LifespanText.setValue(rateLifespan(genome.getLifespan()));
+
+ this.pageSpeciesGenome_FertilityText.setValue(genome.getFertility() + " children");
+
+ this.pageSpeciesGenome_FloweringText.setValue(rateFlowering(genome.getFlowering()));
+ int[] area = genome.getTerritory();
+ this.pageSpeciesGenome_TerritoryText.setValue(area[0] + "x" + area[1] + "x" + area[2]);
+
+
+ String behavior = "Daytime";
+ if (genome.getPrimary().isNocturnal()) {
+ behavior = "Nighttime";
+ }
+ if (genome.getNocturnal()) {
+ behavior = "All Day";
+ }
+ this.pageSpeciesGenome_NocturnalText.setValue(behavior);
+ if (genome.getCaveDwelling()) {
+ this.pageSpeciesGenome_CaveDwellingText.setValue("Not Needed");
+ } else {
+ this.pageSpeciesGenome_CaveDwellingText.setValue("Required");
+ }
+ this.pageSpeciesGenome_TolerantFlyerText.setValue(tolerated(genome.getTolerantFlyer()));
+ if (genome.getFlowerProvider() != null) {
+ this.pageSpeciesGenome_FlowerText.setValue(genome.getFlowerProvider().getDescription());
+ } else {
+ this.pageSpeciesGenome_FlowerText.setValue("None");
+ }
+ this.pageSpeciesGenome_EffectText.setValue(genome.getEffect().getName());
+ }
+ }
+
+ public static String rateFlowering(int flowering)
+ {
+ if (flowering >= 99) {
+ return "Maximum";
+ }
+ if (flowering >= 35) {
+ return "Fastest";
+ }
+ if (flowering >= 30) {
+ return "Faster";
+ }
+ if (flowering >= 25) {
+ return "Fast";
+ }
+ if (flowering >= 20) {
+ return "Normal";
+ }
+ if (flowering >= 15) {
+ return "Slow";
+ }
+ if (flowering >= 10) {
+ return "Slower";
+ }
+ return "Slowest";
+ }
+
+ public static String rateSpeed(float speed)
+ {
+ if (speed >= 1.7F) {
+ return "Fastest";
+ }
+ if (speed >= 1.4F) {
+ return "Faster";
+ }
+ if (speed >= 1.2F) {
+ return "Fast";
+ }
+ if (speed >= 1.0F) {
+ return "Normal";
+ }
+ if (speed >= 0.8F) {
+ return "Slow";
+ }
+ if (speed >= 0.6F) {
+ return "Slower";
+ }
+ return "Slowest";
+ }
+
+ public static String rateLifespan(int life)
+ {
+ if (life >= 70) {
+ return "Longest";
+ }
+ if (life >= 60) {
+ return "Longer";
+ }
+ if (life >= 50) {
+ return "Long";
+ }
+ if (life >= 45) {
+ return "Elongated";
+ }
+ if (life >= 40) {
+ return "Normal";
+ }
+ if (life >= 35) {
+ return "Shortened";
+ }
+ if (life >= 30) {
+ return "Short";
+ }
+ if (life >= 20) {
+ return "Shorter";
+ }
+ return "Shortest";
+ }
+
+ public static String tolerated(boolean t)
+ {
+ if (t) {
+ return "Tolerated";
+ }
+ return "Not Tolerated";
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/PageSpeciesProducts.java b/src/Java/binnie/extrabees/gui/database/PageSpeciesProducts.java
new file mode 100644
index 0000000000..f8af0ef3bd
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/PageSpeciesProducts.java
@@ -0,0 +1,38 @@
+package binnie.extrabees.gui.database;
+
+import binnie.craftgui.controls.ControlText;
+import binnie.craftgui.controls.ControlTextCentered;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.mod.database.DatabaseTab;
+import binnie.craftgui.mod.database.PageSpecies;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.genetics.IAlleleSpecies;
+
+public class PageSpeciesProducts
+ extends PageSpecies
+{
+ ControlText pageSpeciesProducts_Title;
+ ControlProductsBox pageSpeciesProducts_Products;
+ ControlText pageSpeciesProducts_Title2;
+ ControlProductsBox pageSpeciesProducts_Specialties;
+
+ public PageSpeciesProducts(IWidget parent, DatabaseTab tab)
+ {
+ super(parent, tab);
+
+ this.pageSpeciesProducts_Title = new ControlTextCentered(this, 8.0F, "Products");
+
+ this.pageSpeciesProducts_Products = new ControlProductsBox(this, 4, 20, 136, 48, ControlProductsBox.Type.Products);
+
+
+ this.pageSpeciesProducts_Title2 = new ControlTextCentered(this, 68.0F, "Specialties");
+
+ this.pageSpeciesProducts_Specialties = new ControlProductsBox(this, 4, 80, 136, 48, ControlProductsBox.Type.Specialties);
+ }
+
+ public void onValueChanged(IAlleleSpecies species)
+ {
+ this.pageSpeciesProducts_Products.setSpecies((IAlleleBeeSpecies)species);
+ this.pageSpeciesProducts_Specialties.setSpecies((IAlleleBeeSpecies)species);
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/database/WindowApiaristDatabase.java b/src/Java/binnie/extrabees/gui/database/WindowApiaristDatabase.java
new file mode 100644
index 0000000000..d77ee87251
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/database/WindowApiaristDatabase.java
@@ -0,0 +1,83 @@
+package binnie.extrabees.gui.database;
+
+import binnie.Binnie;
+import binnie.core.AbstractMod;
+import binnie.core.genetics.ManagerGenetics;
+import binnie.craftgui.minecraft.Window;
+import binnie.craftgui.mod.database.DatabaseTab;
+import binnie.craftgui.mod.database.PageBranchOverview;
+import binnie.craftgui.mod.database.PageBranchSpecies;
+import binnie.craftgui.mod.database.PageBreeder;
+import binnie.craftgui.mod.database.PageSpeciesClassification;
+import binnie.craftgui.mod.database.PageSpeciesMutations;
+import binnie.craftgui.mod.database.PageSpeciesOverview;
+import binnie.craftgui.mod.database.PageSpeciesResultant;
+import binnie.craftgui.mod.database.WindowAbstractDatabase;
+import binnie.craftgui.mod.database.WindowAbstractDatabase.Mode;
+import binnie.extrabees.ExtraBees;
+import cpw.mods.fml.relauncher.Side;
+import net.minecraft.entity.player.EntityPlayer;
+
+public class WindowApiaristDatabase
+ extends WindowAbstractDatabase
+{
+ static enum SpeciesTab
+ {
+ Overview(255), Genome(16776960), Productivity(65535), Climate(16711680), ResultantMutations(16711935), FurtherMutations(65280);
+
+ public int colour;
+
+ private SpeciesTab(int colour)
+ {
+ this.colour = colour;
+ }
+ }
+
+ static enum BranchesTab
+ {
+ Overview(255), Species(16711680);
+
+ public int colour;
+
+ private BranchesTab(int colour)
+ {
+ this.colour = colour;
+ }
+ }
+
+ protected void addTabs()
+ {
+ new PageSpeciesOverview(getInfoPages(WindowAbstractDatabase.Mode.Species), new DatabaseTab(ExtraBees.instance, "species.overview", 0));
+ new PageSpeciesClassification(getInfoPages(WindowAbstractDatabase.Mode.Species), new DatabaseTab(ExtraBees.instance, "species.classification", 0));
+ new PageSpeciesGenome(getInfoPages(WindowAbstractDatabase.Mode.Species), new DatabaseTab(ExtraBees.instance, "species.genome", 0));
+ new PageSpeciesProducts(getInfoPages(WindowAbstractDatabase.Mode.Species), new DatabaseTab(ExtraBees.instance, "species.products", 0));
+ new PageSpeciesClimate(getInfoPages(WindowAbstractDatabase.Mode.Species), new DatabaseTab(ExtraBees.instance, "species.climate", 0));
+ new PageSpeciesResultant(getInfoPages(WindowAbstractDatabase.Mode.Species), new DatabaseTab(ExtraBees.instance, "species.resultant", 0));
+ new PageSpeciesMutations(getInfoPages(WindowAbstractDatabase.Mode.Species), new DatabaseTab(ExtraBees.instance, "species.further", 0));
+
+ new PageBranchOverview(getInfoPages(WindowAbstractDatabase.Mode.Branches), new DatabaseTab(ExtraBees.instance, "branches.overview", 0));
+ new PageBranchSpecies(getInfoPages(WindowAbstractDatabase.Mode.Branches), new DatabaseTab(ExtraBees.instance, "branches.species", 0));
+
+ new PageBreeder(getInfoPages(WindowAbstractDatabase.Mode.Breeder), getUsername(), new DatabaseTab(ExtraBees.instance, "breeder", 0));
+ }
+
+ public WindowApiaristDatabase(EntityPlayer player, Side side, boolean nei)
+ {
+ super(player, side, nei, Binnie.Genetics.beeBreedingSystem, 110.0F);
+ }
+
+ public static Window create(EntityPlayer player, Side side, boolean nei)
+ {
+ return new WindowApiaristDatabase(player, side, nei);
+ }
+
+ public AbstractMod getMod()
+ {
+ return ExtraBees.instance;
+ }
+
+ public String getName()
+ {
+ return "Database";
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/punnett/ControlChromosome.java b/src/Java/binnie/extrabees/gui/punnett/ControlChromosome.java
new file mode 100644
index 0000000000..f4a7ffc507
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/punnett/ControlChromosome.java
@@ -0,0 +1,49 @@
+package binnie.extrabees.gui.punnett;
+
+import binnie.craftgui.controls.core.Control;
+import binnie.craftgui.controls.core.IControlValue;
+import binnie.craftgui.core.Attribute;
+import binnie.craftgui.core.CraftGUI;
+import binnie.craftgui.core.ITooltip;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.core.Tooltip;
+import binnie.craftgui.core.renderer.Renderer;
+import forestry.api.genetics.IChromosomeType;
+
+public class ControlChromosome
+ extends Control
+ implements IControlValue<IChromosomeType>, ITooltip
+{
+ IChromosomeType value;
+
+ protected ControlChromosome(IWidget parent, float x, float y, IChromosomeType type)
+ {
+ super(parent, x, y, 16.0F, 16.0F);
+ setValue(type);
+ addAttribute(Attribute.MouseOver);
+ }
+
+ public IChromosomeType getValue()
+ {
+ return this.value;
+ }
+
+ public void setValue(IChromosomeType value)
+ {
+ this.value = value;
+ }
+
+ public void onRenderBackground()
+ {
+ CraftGUI.Render.texture(ExtraBeeGUITexture.Chromosome, getArea());
+ CraftGUI.Render.colour(16711680);
+ CraftGUI.Render.texture(ExtraBeeGUITexture.Chromosome2, getArea());
+ }
+
+ public void getTooltip(Tooltip tooltip)
+ {
+ if (this.value != null) {
+ tooltip.add(this.value.getName());
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/punnett/ControlPunnett.java b/src/Java/binnie/extrabees/gui/punnett/ControlPunnett.java
new file mode 100644
index 0000000000..56b2f6c916
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/punnett/ControlPunnett.java
@@ -0,0 +1,86 @@
+package binnie.extrabees.gui.punnett;
+
+import binnie.craftgui.controls.ControlText;
+import binnie.craftgui.controls.core.Control;
+import binnie.craftgui.core.CraftGUI;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.core.geometry.IArea;
+import binnie.craftgui.core.geometry.TextJustification;
+import binnie.craftgui.core.renderer.Renderer;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IChromosomeType;
+import forestry.api.genetics.IGenome;
+import forestry.api.genetics.IIndividual;
+import forestry.api.genetics.ISpeciesRoot;
+import java.util.LinkedList;
+import java.util.List;
+
+public class ControlPunnett
+ extends Control
+{
+ protected ControlPunnett(IWidget parent, float x, float y)
+ {
+ super(parent, x, y, boxWidth * 3, boxWidth * 3);
+ }
+
+ static int boxWidth = 80;
+ static int boxHeight = 28;
+
+ public void onRenderBackground()
+ {
+ CraftGUI.Render.solid(new IArea(0.0F, boxHeight, boxWidth * 3, 1.0F), 11184810);
+ CraftGUI.Render.solid(new IArea(boxWidth / 2.0F, boxHeight * 2, boxWidth * 2.5F, 1.0F), 11184810);
+
+ CraftGUI.Render.solid(new IArea(boxWidth, 0.0F, 1.0F, boxHeight * 3), 11184810);
+ CraftGUI.Render.solid(new IArea(boxWidth * 2, boxHeight / 2.0F, 1.0F, boxHeight * 2.5F), 11184810);
+ }
+
+ public void setup(IChromosomeType chromosome, IIndividual ind1, IIndividual ind2, ISpeciesRoot root)
+ {
+ deleteAllChildren();
+ if ((chromosome == null) || (ind1 == null) || (ind2 == null) || (root == null)) {
+ return;
+ }
+ IAllele primary1 = ind1.getGenome().getActiveAllele(chromosome);
+ IAllele primary2 = ind2.getGenome().getActiveAllele(chromosome);
+ IAllele secondary1 = ind1.getGenome().getInactiveAllele(chromosome);
+ IAllele secondary2 = ind2.getGenome().getInactiveAllele(chromosome);
+
+ int x = 1;
+ int y = 1;
+ for (IAllele allele1 : new IAllele[] { primary1, secondary1 })
+ {
+ y = 1;
+ for (IAllele allele2 : new IAllele[] { primary2, secondary2 })
+ {
+ List<IAllele> alleles = new LinkedList();
+ if ((allele1.isDominant()) && (!allele2.isDominant()))
+ {
+ alleles.add(allele1);
+ }
+ else if ((allele2.isDominant()) && (!allele1.isDominant()))
+ {
+ alleles.add(allele2);
+ }
+ else
+ {
+ alleles.add(allele1);
+ if (allele1 != allele2) {
+ alleles.add(allele2);
+ }
+ }
+ String text = "";
+ for (IAllele allele : alleles) {
+ text = text + allele.getName() + ": " + 25.0F / alleles.size() + "%\n";
+ }
+ new ControlText(this, new IArea(x * boxWidth, boxHeight * y, boxWidth, boxHeight), text, TextJustification.TopCenter).setColour(11184810);
+ y++;
+ }
+ x++;
+ }
+ new ControlText(this, new IArea(boxWidth, 0.0F, boxWidth, boxHeight), "\n" + primary1.getName(), TextJustification.TopCenter).setColour(11184810);
+ new ControlText(this, new IArea(boxWidth * 2, 0.0F, boxWidth, boxHeight), "\n" + secondary1.getName(), TextJustification.TopCenter).setColour(11184810);
+ new ControlText(this, new IArea(0.0F, boxHeight, boxWidth, boxHeight), primary2.getName(), TextJustification.TopCenter).setColour(11184810);
+ new ControlText(this, new IArea(0.0F, boxHeight * 2, boxWidth, boxHeight), primary2.getName(), TextJustification.TopCenter).setColour(11184810);
+ }
+}
diff --git a/src/Java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java b/src/Java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java
new file mode 100644
index 0000000000..eac77aabf9
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java
@@ -0,0 +1,8 @@
+package binnie.extrabees.gui.punnett;
+
+public enum ExtraBeeGUITexture
+{
+ Chromosome, Chromosome2;
+
+ private ExtraBeeGUITexture() {}
+}
diff --git a/src/Java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java b/src/Java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java
new file mode 100644
index 0000000000..488f2b6922
--- /dev/null
+++ b/src/Java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java
@@ -0,0 +1,67 @@
+package binnie.extrabees.gui.punnett;
+
+import binnie.core.AbstractMod;
+import binnie.craftgui.core.CraftGUI;
+import binnie.craftgui.core.renderer.Renderer;
+import binnie.craftgui.minecraft.Window;
+import binnie.craftgui.minecraft.control.ControlSlot;
+import binnie.craftgui.resource.StyleSheet;
+import binnie.craftgui.resource.minecraft.CraftGUITexture;
+import binnie.craftgui.resource.minecraft.PaddedTexture;
+import binnie.craftgui.resource.minecraft.StandardTexture;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.core.ExtraBeeTexture;
+import cpw.mods.fml.relauncher.Side;
+import forestry.api.genetics.ISpeciesRoot;
+import java.util.Map;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+
+public class WindowPunnettSquare
+ extends Window
+{
+ ControlSlot bee1;
+ ControlSlot bee2;
+ ControlPunnett punnett;
+
+ public static Window create(EntityPlayer player, IInventory inventory, Side side)
+ {
+ return new WindowPunnettSquare(player, inventory, side);
+ }
+
+ public WindowPunnettSquare(EntityPlayer player, IInventory inventory, Side side)
+ {
+ super(245.0F, 205.0F, player, inventory, side);
+ }
+
+ public AbstractMod getMod()
+ {
+ return ExtraBees.instance;
+ }
+
+ public String getName()
+ {
+ return "Punnett";
+ }
+
+ public void initialiseClient()
+ {
+ setTitle("Punnett Square");
+
+ CraftGUI.Render.stylesheet(new StyleSheetPunnett());
+ }
+
+ ISpeciesRoot root = null;
+
+ static class StyleSheetPunnett
+ extends StyleSheet
+ {
+ public StyleSheetPunnett()
+ {
+ this.textures.put(CraftGUITexture.Window, new PaddedTexture(0, 0, 160, 160, 0, ExtraBeeTexture.GUIPunnett, 32, 32, 32, 32));
+ this.textures.put(CraftGUITexture.Slot, new StandardTexture(160, 0, 18, 18, 0, ExtraBeeTexture.GUIPunnett));
+ this.textures.put(ExtraBeeGUITexture.Chromosome, new StandardTexture(160, 36, 16, 16, 0, ExtraBeeTexture.GUIPunnett));
+ this.textures.put(ExtraBeeGUITexture.Chromosome2, new StandardTexture(160, 52, 16, 16, 0, ExtraBeeTexture.GUIPunnett));
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/liquids/ExtraBeeLiquid.java b/src/Java/binnie/extrabees/liquids/ExtraBeeLiquid.java
new file mode 100644
index 0000000000..a7ed929fb7
--- /dev/null
+++ b/src/Java/binnie/extrabees/liquids/ExtraBeeLiquid.java
@@ -0,0 +1,80 @@
+package binnie.extrabees.liquids;
+
+import binnie.Binnie;
+import binnie.core.liquid.FluidContainer;
+import binnie.core.liquid.ILiquidType;
+import binnie.core.liquid.ManagerLiquid;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.fluids.FluidStack;
+
+public enum ExtraBeeLiquid
+ implements ILiquidType
+{
+ ACID("acid", 11528985), POISON("poison", 15406315), GLACIAL("liquidnitrogen", 9881800);
+
+ String ident;
+ IIcon icon;
+ int colour;
+
+ private ExtraBeeLiquid(String ident, int colour)
+ {
+ this.ident = ident;
+ this.colour = colour;
+ }
+
+ public IIcon getIcon()
+ {
+ return this.icon;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcon(IIconRegister register)
+ {
+ this.icon = ExtraBees.proxy.getIcon(register, "liquids/" + getIdentifier());
+ }
+
+ public String getName()
+ {
+ return ExtraBees.proxy.localise(toString().toLowerCase());
+ }
+
+ public String getIdentifier()
+ {
+ return this.ident;
+ }
+
+ public int getColour()
+ {
+ return 16777215;
+ }
+
+ public FluidStack get(int amount)
+ {
+ return Binnie.Liquid.getLiquidStack(this.ident, amount);
+ }
+
+ public int getTransparency()
+ {
+ return 255;
+ }
+
+ public boolean canPlaceIn(FluidContainer container)
+ {
+ return true;
+ }
+
+ public boolean showInCreative(FluidContainer container)
+ {
+ return (container == FluidContainer.Bucket) || (container == FluidContainer.Can) || (container == FluidContainer.Capsule) || (container == FluidContainer.Refractory);
+ }
+
+ public int getContainerColour()
+ {
+ return this.colour;
+ }
+}
diff --git a/src/Java/binnie/extrabees/liquids/ModuleLiquids.java b/src/Java/binnie/extrabees/liquids/ModuleLiquids.java
new file mode 100644
index 0000000000..5db86e205a
--- /dev/null
+++ b/src/Java/binnie/extrabees/liquids/ModuleLiquids.java
@@ -0,0 +1,19 @@
+package binnie.extrabees.liquids;
+
+import binnie.Binnie;
+import binnie.core.IInitializable;
+import binnie.core.liquid.ItemFluidContainer;
+import binnie.core.liquid.ManagerLiquid;
+
+public class ModuleLiquids
+ implements IInitializable
+{
+ public void preInit()
+ {
+ Binnie.Liquid.createLiquids(ExtraBeeLiquid.values(), ItemFluidContainer.LiquidExtraBee);
+ }
+
+ public void init() {}
+
+ public void postInit() {}
+}
diff --git a/src/Java/binnie/extrabees/products/EnumHoneyComb.java b/src/Java/binnie/extrabees/products/EnumHoneyComb.java
new file mode 100644
index 0000000000..5c480d0a04
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/EnumHoneyComb.java
@@ -0,0 +1,109 @@
+package binnie.extrabees.products;
+
+import binnie.core.item.IItemEnum;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import forestry.api.recipes.ICentrifugeManager;
+import forestry.api.recipes.RecipeManagers;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+public enum EnumHoneyComb
+ implements IItemEnum
+{
+ BARREN(7564356, 12762791), ROTTEN(4084257, 11652233), BONE(12895407, 14606017), OIL(394760, 2894646), COAL(10392696, 3682590), FUEL(10252096, 16761856), WATER(2568911, 7973065), MILK(14145991, 16777215), FRUIT(8202548, 14372706), SEED(3428147, 7457902), ALCOHOL(4293921, 14604622), STONE(9211025, 13027020), REDSTONE(16422550, 15077392), RESIN(16762703, 13208064), IC2ENERGY(15332623, 2143177), IRON(3552564, 11038808), GOLD(3552564, 15125515), COPPER(3552564, 13722376), TIN(3552564, 12431805), SILVER(3552564, 14408667), BRONZE, URANIUM(2031360, 4303667), CLAY(7034426, 11583702), OLD(4535060, 11769444), FUNGAL(7234891, 2856003), CREOSOTE(10256652, 12429911), LATEX(5854529, 11051653), ACIDIC(3441987, 1374014), VENOMOUS(8198269, 16724991), SLIME(3884860, 8442245), BLAZE(16738816, 16763904), COFFEE(5519389, 11763531), GLACIAL(5146503, 13366002), MINT, CITRUS, PEAT, SHADOW(0, 3545141), LEAD(3552564, 10125468), BRASS, ELECTRUM, ZINC(3552564, 15592447), TITANIUM(3552564, 11578083), TUNGSTEN(3552564, 1249812), STEEL, IRIDIUM, PLATINUM(3552564, 10125468), LAPIS(3552564, 4009179), SODALITE, PYRITE, BAUXITE, CINNABAR, SPHALERITE, EMERALD(3552564, 1900291), RUBY(3552564, 14024704), SAPPHIRE(3552564, 673791), OLIVINE, DIAMOND(3552564, 8371706), RED(13388876, 16711680), YELLOW(15066419, 16768256), BLUE(10072818, 8959), GREEN(6717235, 39168), BLACK(1644825, 5723991), WHITE(14079702, 16777215), BROWN(8349260, 6042895), ORANGE(15905331, 16751872), CYAN(5020082, 65509), PURPLE(11691749, 11403519), GRAY(5000268, 12237498), LIGHTBLUE(10072818, 40447), PINK(15905484, 16744671), LIMEGREEN(8375321, 65288), MAGENTA(15040472, 16711884), LIGHTGRAY(10066329, 13224393), NICKEL(3552564, 16768764), INVAR, GLOWSTONE(10919006, 14730249), SALTPETER(10919006, 14730249), PULP, MULCH, COMPOST(4338440, 7036475), SAWDUST(12561009, 15913854), CERTUS(13029631, 3755363), ENDERPEARL(3446662, 206368), YELLORIUM(2564173, 14019840), CYANITE(2564173, 34541), BLUTONIUM(2564173, 1769702);
+
+ int[] colour = new int[0];
+ public Map<ItemStack, Integer> products = new LinkedHashMap();
+ boolean active = true;
+ public boolean deprecated = false;
+
+ private EnumHoneyComb()
+ {
+ this(16777215, 16777215);
+ this.active = false;
+ this.deprecated = true;
+ }
+
+ private EnumHoneyComb(int colour, int colour2)
+ {
+ this.colour = new int[] { colour, colour2 };
+ }
+
+ public void addRecipe()
+ {
+ int[] chancesI = new int[this.products.size()];
+ ItemStack[] productsI = new ItemStack[this.products.size()];
+
+ int i = 0;
+ for (Map.Entry<ItemStack, Integer> entry : this.products.entrySet())
+ {
+ chancesI[i] = ((Integer)entry.getValue()).intValue();
+ productsI[i] = ((ItemStack)entry.getKey());
+ i++;
+ }
+ RecipeManagers.centrifugeManager.addRecipe(20, get(1), productsI, chancesI);
+ }
+
+ public boolean isActive()
+ {
+ return this.active;
+ }
+
+ public static EnumHoneyComb get(ItemStack itemStack)
+ {
+ int i = itemStack.getItemDamage();
+ if ((i >= 0) && (i < values().length)) {
+ return values()[i];
+ }
+ return values()[0];
+ }
+
+ public ItemStack get(int size)
+ {
+ return new ItemStack(ExtraBees.comb, size, ordinal());
+ }
+
+ public String getName(ItemStack stack)
+ {
+ return ExtraBees.proxy.localise("item.comb." + name().toLowerCase());
+ }
+
+ public boolean addProduct(ItemStack item, int chance)
+ {
+ if (item == null) {
+ return false;
+ }
+ this.products.put(item.copy(), Integer.valueOf(chance));
+ return true;
+ }
+
+ public void tryAddProduct(ItemStack item, int chance)
+ {
+ this.active = addProduct(item, chance);
+ }
+
+ public void tryAddProduct(String oreDict, int chance)
+ {
+ if (!OreDictionary.getOres(oreDict).isEmpty()) {
+ tryAddProduct((ItemStack)OreDictionary.getOres(oreDict).get(0), chance);
+ } else {
+ this.active = false;
+ }
+ }
+
+ public void tryAddProduct(IItemEnum type, int chance)
+ {
+ tryAddProduct(type.get(1), chance);
+ this.active = ((this.active) && (type.isActive()));
+ }
+
+ public void copyProducts(EnumHoneyComb comb)
+ {
+ this.products.putAll(comb.products);
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/EnumHoneyDrop.java b/src/Java/binnie/extrabees/products/EnumHoneyDrop.java
new file mode 100644
index 0000000000..c3ea6c2cdd
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/EnumHoneyDrop.java
@@ -0,0 +1,72 @@
+package binnie.extrabees.products;
+
+import binnie.Binnie;
+import binnie.core.item.IItemEnum;
+import binnie.core.liquid.ManagerLiquid;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import forestry.api.recipes.ISqueezerManager;
+import forestry.api.recipes.RecipeManagers;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+public enum EnumHoneyDrop
+ implements IItemEnum
+{
+ ENERGY(10242418, 14905713, ""), ACID(4961601, 4841020, "acid"), POISON(13698745, 16712674, "poison"), APPLE(13062738, 13183530, "juice"), CITRUS, ICE(11462882, 9895925, "liquidnitrogen"), MILK(14737632, 16777215, "milk"), SEED(8176242, 12762791, "seedoil"), ALCOHOL(14411853, 10872909, "short.mead"), FRUIT, VEGETABLE, PUMPKIN, MELON, RED(13388876, 16711680, "for.honey"), YELLOW(15066419, 16768256, "for.honey"), BLUE(10072818, 8959, "for.honey"), GREEN(6717235, 39168, "for.honey"), BLACK(1644825, 5723991, "for.honey"), WHITE(14079702, 16777215, "for.honey"), BROWN(8349260, 6042895, "for.honey"), ORANGE(15905331, 16751872, "for.honey"), CYAN(5020082, 65509, "for.honey"), PURPLE(11691749, 11403519, "for.honey"), GRAY(5000268, 12237498, "for.honey"), LIGHTBLUE(10072818, 40447, "for.honey"), PINK(15905484, 16744671, "for.honey"), LIMEGREEN(8375321, 65288, "for.honey"), MAGENTA(15040472, 16711884, "for.honey"), LIGHTGRAY(10066329, 13224393, "for.honey");
+
+ int[] colour;
+ String liquidName = "";
+ ItemStack remenant = null;
+ public boolean deprecated = false;
+
+ public void addRemenant(ItemStack stack)
+ {
+ this.remenant = stack;
+ this.deprecated = true;
+ }
+
+ private EnumHoneyDrop()
+ {
+ this(16777215, 16777215, "");
+ }
+
+ private EnumHoneyDrop(int colour, int colour2, String liquid)
+ {
+ this.colour = new int[] { colour, colour2 };
+ this.liquidName = liquid;
+ }
+
+ public void addRecipe()
+ {
+ FluidStack liquid = Binnie.Liquid.getLiquidStack(this.liquidName, 200);
+ if (liquid != null) {
+ RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[] { get(1) }, liquid, this.remenant, 100);
+ }
+ }
+
+ public boolean isActive()
+ {
+ return (!this.deprecated) && ((this.liquidName == null) || (FluidRegistry.isFluidRegistered(this.liquidName)));
+ }
+
+ public static EnumHoneyDrop get(ItemStack itemStack)
+ {
+ int i = itemStack.getItemDamage();
+ if ((i >= 0) && (i < values().length)) {
+ return values()[i];
+ }
+ return values()[0];
+ }
+
+ public ItemStack get(int size)
+ {
+ return new ItemStack(ExtraBees.honeyDrop, size, ordinal());
+ }
+
+ public String getName(ItemStack stack)
+ {
+ return ExtraBees.proxy.localise("item.honeydrop." + name().toLowerCase());
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/EnumPropolis.java b/src/Java/binnie/extrabees/products/EnumPropolis.java
new file mode 100644
index 0000000000..0e8a11f18b
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/EnumPropolis.java
@@ -0,0 +1,65 @@
+package binnie.extrabees.products;
+
+import binnie.Binnie;
+import binnie.core.item.IItemEnum;
+import binnie.core.liquid.ManagerLiquid;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import forestry.api.recipes.ISqueezerManager;
+import forestry.api.recipes.RecipeManagers;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public enum EnumPropolis
+ implements IItemEnum
+{
+ WATER(2405321, 12762791, "Water"), OIL(1519411, 12762791, "oil"), FUEL(10718482, 12762791, "fuel"), MILK, FRUIT, SEED, ALCOHOL, CREOSOTE(8877313, 12428819, "creosote"), GLACIAL, PEAT;
+
+ int[] colour = new int[0];
+ String liquidName;
+ boolean active = true;
+
+ private EnumPropolis()
+ {
+ this(16777215, 16777215, "");
+ this.active = false;
+ }
+
+ private EnumPropolis(int colour, int colour2, String liquid)
+ {
+ this.colour = new int[] { colour, colour2 };
+ this.liquidName = liquid;
+ }
+
+ public void addRecipe()
+ {
+ FluidStack liquid = Binnie.Liquid.getLiquidStack(this.liquidName, 500);
+ if (liquid != null) {
+ RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] { get(1) }, liquid, null, 0);
+ }
+ }
+
+ public boolean isActive()
+ {
+ return (this.active) && (Binnie.Liquid.getLiquidStack(this.liquidName, 100) != null);
+ }
+
+ public static EnumPropolis get(ItemStack itemStack)
+ {
+ int i = itemStack.getItemDamage();
+ if ((i >= 0) && (i < values().length)) {
+ return values()[i];
+ }
+ return values()[0];
+ }
+
+ public ItemStack get(int size)
+ {
+ return new ItemStack(ExtraBees.propolis, size, ordinal());
+ }
+
+ public String getName(ItemStack stack)
+ {
+ return ExtraBees.proxy.localise("item.propolis." + name().toLowerCase());
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/ItemHoneyComb.java b/src/Java/binnie/extrabees/products/ItemHoneyComb.java
new file mode 100644
index 0000000000..5cbbf8fe63
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/ItemHoneyComb.java
@@ -0,0 +1,335 @@
+package binnie.extrabees.products;
+
+import binnie.core.BinnieCore;
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.core.proxy.BinnieProxy;
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.core.ExtraBeeItems;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.core.Tabs;
+import java.util.ArrayList;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.oredict.OreDictionary;
+
+public class ItemHoneyComb
+ extends ItemProduct
+{
+ IIcon icon1;
+ IIcon icon2;
+
+ @SideOnly(Side.CLIENT)
+ public boolean requiresMultipleRenderPasses()
+ {
+ return true;
+ }
+
+ public ItemHoneyComb()
+ {
+ super(EnumHoneyComb.values());
+ setCreativeTab(Tabs.tabApiculture);
+ setUnlocalizedName("honeyComb");
+ }
+
+ public static void addSubtypes()
+ {
+ ItemStack beeswax = Mods.Forestry.stack("beeswax");
+ ItemStack honeyDrop = Mods.Forestry.stack("honeyDrop");
+
+ OreDictionary.registerOre("ingotIron", Items.iron_ingot);
+ OreDictionary.registerOre("ingotGold", Items.gold_ingot);
+
+ OreDictionary.registerOre("gemDiamond", Items.diamond);
+ OreDictionary.registerOre("gemEmerald", Items.emerald);
+ OreDictionary.registerOre("gemLapis", new ItemStack(Items.dye, 1, 4));
+
+ EnumHoneyComb.BARREN.addProduct(beeswax, 100);
+ EnumHoneyComb.BARREN.addProduct(honeyDrop, 50);
+
+ EnumHoneyComb.ROTTEN.addProduct(beeswax, 20);
+ EnumHoneyComb.ROTTEN.addProduct(honeyDrop, 20);
+ EnumHoneyComb.ROTTEN.addProduct(new ItemStack(Items.rotten_flesh, 1, 0), 80);
+
+ EnumHoneyComb.BONE.addProduct(beeswax, 20);
+ EnumHoneyComb.BONE.addProduct(honeyDrop, 20);
+ EnumHoneyComb.BONE.addProduct(new ItemStack(Items.dye, 1, 15), 80);
+
+ EnumHoneyComb.OIL.tryAddProduct(EnumPropolis.OIL, 60);
+ EnumHoneyComb.OIL.addProduct(honeyDrop, 75);
+
+ EnumHoneyComb.COAL.addProduct(beeswax, 80);
+ EnumHoneyComb.COAL.addProduct(honeyDrop, 75);
+ EnumHoneyComb.COAL.tryAddProduct(ExtraBeeItems.CoalDust, 100);
+
+ EnumHoneyComb.WATER.tryAddProduct(EnumPropolis.WATER, 100);
+ EnumHoneyComb.WATER.addProduct(honeyDrop, 90);
+
+ EnumHoneyComb.STONE.addProduct(beeswax, 50);
+ EnumHoneyComb.STONE.addProduct(honeyDrop, 25);
+
+ EnumHoneyComb.MILK.tryAddProduct(EnumHoneyDrop.MILK, 100);
+ EnumHoneyComb.MILK.addProduct(honeyDrop, 90);
+
+ EnumHoneyComb.FRUIT.tryAddProduct(EnumHoneyDrop.APPLE, 100);
+ EnumHoneyComb.FRUIT.addProduct(honeyDrop, 90);
+
+ EnumHoneyComb.SEED.tryAddProduct(EnumHoneyDrop.SEED, 100);
+ EnumHoneyComb.SEED.addProduct(honeyDrop, 90);
+
+ EnumHoneyComb.ALCOHOL.tryAddProduct(EnumHoneyDrop.ALCOHOL, 100);
+ EnumHoneyComb.ALCOHOL.addProduct(honeyDrop, 90);
+
+ EnumHoneyComb.FUEL.tryAddProduct(EnumPropolis.FUEL, 60);
+ EnumHoneyComb.FUEL.addProduct(honeyDrop, 50);
+
+ EnumHoneyComb.CREOSOTE.tryAddProduct(EnumPropolis.CREOSOTE, 70);
+ EnumHoneyComb.CREOSOTE.addProduct(honeyDrop, 50);
+
+ EnumHoneyComb.LATEX.addProduct(honeyDrop, 50);
+ EnumHoneyComb.LATEX.addProduct(beeswax, 85);
+ if (!OreDictionary.getOres("itemRubber").isEmpty()) {
+ EnumHoneyComb.LATEX.tryAddProduct((ItemStack)OreDictionary.getOres("itemRubber").get(0), 100);
+ } else {
+ EnumHoneyComb.LATEX.active = false;
+ }
+ EnumHoneyComb.REDSTONE.addProduct(beeswax, 80);
+ EnumHoneyComb.REDSTONE.addProduct(new ItemStack(Items.redstone, 1, 0), 100);
+ EnumHoneyComb.REDSTONE.addProduct(honeyDrop, 50);
+
+ EnumHoneyComb.RESIN.addProduct(beeswax, 100);
+
+ EnumHoneyComb.RESIN.tryAddProduct(Mods.IC2.stack("itemHarz"), 100);
+ EnumHoneyComb.RESIN.tryAddProduct(Mods.IC2.stack("itemHarz"), 50);
+
+ EnumHoneyComb.IC2ENERGY.addProduct(beeswax, 80);
+ EnumHoneyComb.IC2ENERGY.addProduct(new ItemStack(Items.redstone, 1, 0), 75);
+ EnumHoneyComb.IC2ENERGY.tryAddProduct(EnumHoneyDrop.ENERGY, 100);
+
+ EnumHoneyComb.IRON.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.IRON.tryAddProduct(ExtraBeeItems.IronDust, 100);
+
+ EnumHoneyComb.GOLD.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.GOLD.tryAddProduct(ExtraBeeItems.GoldDust, 100);
+
+ EnumHoneyComb.COPPER.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.COPPER.tryAddProduct(ExtraBeeItems.CopperDust, 100);
+
+ EnumHoneyComb.TIN.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.TIN.tryAddProduct(ExtraBeeItems.TinDust, 100);
+
+ EnumHoneyComb.NICKEL.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.NICKEL.tryAddProduct(ExtraBeeItems.NickelDust, 100);
+
+ EnumHoneyComb.SILVER.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.SILVER.tryAddProduct(ExtraBeeItems.SilverDust, 100);
+
+ EnumHoneyComb.URANIUM.copyProducts(EnumHoneyComb.STONE);
+ if (!OreDictionary.getOres("crushedUranium").isEmpty()) {
+ EnumHoneyComb.URANIUM.tryAddProduct((ItemStack)OreDictionary.getOres("crushedUranium").get(0), 50);
+ }
+ EnumHoneyComb.CLAY.addProduct(beeswax, 25);
+ EnumHoneyComb.CLAY.addProduct(honeyDrop, 80);
+ EnumHoneyComb.CLAY.addProduct(new ItemStack(Items.clay_ball), 80);
+
+ EnumHoneyComb.OLD.addProduct(beeswax, 100);
+ EnumHoneyComb.OLD.addProduct(honeyDrop, 90);
+
+ EnumHoneyComb.FUNGAL.addProduct(beeswax, 90);
+ EnumHoneyComb.FUNGAL.addProduct(new ItemStack(Blocks.brown_mushroom_block, 1, 0), 100);
+ EnumHoneyComb.FUNGAL.addProduct(new ItemStack(Blocks.red_mushroom_block, 1, 0), 75);
+
+ EnumHoneyComb.ACIDIC.addProduct(beeswax, 80);
+ EnumHoneyComb.ACIDIC.tryAddProduct(EnumHoneyDrop.ACID, 50);
+ if (!OreDictionary.getOres("dustSulfur").isEmpty()) {
+ EnumHoneyComb.ACIDIC.addProduct((ItemStack)OreDictionary.getOres("dustSulfur").get(0), 75);
+ }
+ EnumHoneyComb.VENOMOUS.addProduct(beeswax, 80);
+ EnumHoneyComb.VENOMOUS.tryAddProduct(EnumHoneyDrop.POISON, 80);
+
+ EnumHoneyComb.SLIME.addProduct(beeswax, 100);
+ EnumHoneyComb.SLIME.addProduct(honeyDrop, 75);
+ EnumHoneyComb.SLIME.addProduct(new ItemStack(Items.slime_ball, 1, 0), 75);
+
+ EnumHoneyComb.BLAZE.addProduct(beeswax, 75);
+ EnumHoneyComb.BLAZE.addProduct(new ItemStack(Items.blaze_powder, 1, 0), 100);
+
+ EnumHoneyComb.COFFEE.addProduct(beeswax, 90);
+ EnumHoneyComb.COFFEE.addProduct(honeyDrop, 75);
+ EnumHoneyComb.COFFEE.tryAddProduct(Mods.IC2.stack("itemCofeePowder"), 75);
+
+ EnumHoneyComb.GLACIAL.tryAddProduct(EnumHoneyDrop.ICE, 80);
+ EnumHoneyComb.GLACIAL.addProduct(honeyDrop, 75);
+
+
+
+
+ EnumHoneyComb.SHADOW.addProduct(honeyDrop, 50);
+ if (!OreDictionary.getOres("dustObsidian").isEmpty()) {
+ EnumHoneyComb.SHADOW.tryAddProduct((ItemStack)OreDictionary.getOres("dustObsidian").get(0), 75);
+ } else {
+ EnumHoneyComb.SHADOW.active = false;
+ }
+ EnumHoneyComb.LEAD.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.LEAD.tryAddProduct(ExtraBeeItems.LeadDust, 100);
+
+ EnumHoneyComb.ZINC.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.ZINC.tryAddProduct(ExtraBeeItems.ZincDust, 100);
+
+ EnumHoneyComb.TITANIUM.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.TITANIUM.tryAddProduct(ExtraBeeItems.TitaniumDust, 100);
+
+ EnumHoneyComb.TUNGSTEN.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.TUNGSTEN.tryAddProduct(ExtraBeeItems.TungstenDust, 100);
+
+ EnumHoneyComb.PLATINUM.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.PLATINUM.tryAddProduct(ExtraBeeItems.PlatinumDust, 100);
+
+ EnumHoneyComb.LAPIS.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.LAPIS.addProduct(new ItemStack(Items.dye, 6, 4), 100);
+
+ EnumHoneyComb.EMERALD.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.EMERALD.tryAddProduct(ExtraBeeItems.EmeraldShard, 100);
+
+ EnumHoneyComb.RUBY.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.RUBY.tryAddProduct(ExtraBeeItems.RubyShard, 100);
+
+ EnumHoneyComb.SAPPHIRE.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.SAPPHIRE.tryAddProduct(ExtraBeeItems.SapphireShard, 100);
+
+ EnumHoneyComb.DIAMOND.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.DIAMOND.tryAddProduct(ExtraBeeItems.DiamondShard, 100);
+
+ EnumHoneyComb.RED.addProduct(honeyDrop, 80);
+ EnumHoneyComb.RED.addProduct(beeswax, 80);
+
+ EnumHoneyComb.GLOWSTONE.addProduct(honeyDrop, 25);
+ EnumHoneyComb.GLOWSTONE.addProduct(new ItemStack(Items.glowstone_dust), 100);
+
+ EnumHoneyComb.SALTPETER.addProduct(honeyDrop, 25);
+ EnumHoneyComb.SALTPETER.tryAddProduct(getOreDictionary("dustSaltpeter"), 100);
+
+ EnumHoneyComb.COMPOST.addProduct(honeyDrop, 25);
+ EnumHoneyComb.COMPOST.tryAddProduct(Mods.Forestry.stack("fertilizerBio"), 100);
+
+ EnumHoneyComb.SAWDUST.addProduct(honeyDrop, 25);
+ if (!OreDictionary.getOres("dustSawdust").isEmpty()) {
+ EnumHoneyComb.SAWDUST.tryAddProduct((ItemStack)OreDictionary.getOres("dustSawdust").get(0), 100);
+ } else if (!OreDictionary.getOres("sawdust").isEmpty()) {
+ EnumHoneyComb.SAWDUST.tryAddProduct((ItemStack)OreDictionary.getOres("sawdust").get(0), 100);
+ }
+ EnumHoneyComb.CERTUS.addProduct(honeyDrop, 25);
+ EnumHoneyComb.CERTUS.addProduct(new ItemStack(Items.quartz), 25);
+ if (!OreDictionary.getOres("dustCertusQuartz").isEmpty()) {
+ EnumHoneyComb.CERTUS.tryAddProduct((ItemStack)OreDictionary.getOres("dustCertusQuartz").get(0), 20);
+ }
+ EnumHoneyComb.ENDERPEARL.addProduct(honeyDrop, 25);
+ if (!OreDictionary.getOres("dustEnderPearl").isEmpty()) {
+ EnumHoneyComb.ENDERPEARL.tryAddProduct((ItemStack)OreDictionary.getOres("dustEnderPearl").get(0), 25);
+ }
+ EnumHoneyComb.YELLORIUM.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.CYANITE.copyProducts(EnumHoneyComb.STONE);
+ EnumHoneyComb.BLUTONIUM.copyProducts(EnumHoneyComb.STONE);
+
+ EnumHoneyComb.YELLORIUM.tryAddProduct(ExtraBeeItems.YelloriumDust, 25);
+ EnumHoneyComb.CYANITE.tryAddProduct(ExtraBeeItems.CyaniteDust, 25);
+ EnumHoneyComb.BLUTONIUM.tryAddProduct(ExtraBeeItems.BlutoniumDust, 25);
+
+
+ OreDictionary.registerOre("beeComb", new ItemStack(ExtraBees.comb, 1, 32767));
+ for (int i = 0; i < 16; i++)
+ {
+ EnumHoneyComb type = EnumHoneyComb.values()[(EnumHoneyComb.RED.ordinal() + i)];
+ if (type != EnumHoneyComb.RED) {
+ type.copyProducts(EnumHoneyComb.RED);
+ }
+ }
+ for (int i = 0; i < 16; i++)
+ {
+ EnumHoneyComb type = EnumHoneyComb.values()[(EnumHoneyComb.RED.ordinal() + i)];
+ EnumHoneyDrop drop = EnumHoneyDrop.values()[(EnumHoneyDrop.RED.ordinal() + i)];
+
+ int[] dyeC = { 1, 11, 4, 2, 0, 15, 3, 14, 6, 5, 8, 12, 9, 10, 13, 7 };
+
+ int k = dyeC[i];
+
+ ItemStack dye = new ItemStack(Items.dye, 1, k);
+ switch (k)
+ {
+ case 0:
+ dye = ExtraBeeItems.BlackDye.get(1);
+ break;
+ case 1:
+ dye = ExtraBeeItems.RedDye.get(1);
+ break;
+ case 2:
+ dye = ExtraBeeItems.GreenDye.get(1);
+ break;
+ case 3:
+ dye = ExtraBeeItems.BrownDye.get(1);
+ break;
+ case 4:
+ dye = ExtraBeeItems.BlueDye.get(1);
+ break;
+ case 11:
+ dye = ExtraBeeItems.YellowDye.get(1);
+ break;
+ case 15:
+ dye = ExtraBeeItems.WhiteDye.get(1);
+ }
+ type.addProduct(drop.get(1), 100);
+ drop.addRemenant(dye);
+ }
+ }
+
+ private static ItemStack getOreDictionary(String string)
+ {
+ if (OreDictionary.getOres(string).size() > 0) {
+ return (ItemStack)OreDictionary.getOres(string).get(0);
+ }
+ return null;
+ }
+
+ public int getColorFromItemStack(ItemStack itemStack, int j)
+ {
+ if (EnumHoneyComb.get(itemStack) == null) {
+ return 16777215;
+ }
+ if (j == 0) {
+ return EnumHoneyComb.get(itemStack).colour[0];
+ }
+ return EnumHoneyComb.get(itemStack).colour[1];
+ }
+
+ public static enum VanillaComb
+ {
+ HONEY, COCOA, SIMMERING, STRINGY, FROZEN, DRIPPING, SILKY, PARCHED, MYSTERIOUS, IRRADIATED, POWDERY, REDDENED, DARKENED, OMEGA, WHEATEN, MOSSY, QUARTZ;
+
+ private VanillaComb() {}
+
+ public ItemStack get()
+ {
+ return new ItemStack(Mods.Forestry.item("beeCombs"), 1, ordinal());
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamageForRenderPass(int i, int j)
+ {
+ if (j > 0) {
+ return this.icon1;
+ }
+ return this.icon2;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.icon1 = BinnieCore.proxy.getIcon(register, "forestry", "beeCombs.0");
+ this.icon2 = BinnieCore.proxy.getIcon(register, "forestry", "beeCombs.1");
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/ItemHoneyCrystal.java b/src/Java/binnie/extrabees/products/ItemHoneyCrystal.java
new file mode 100644
index 0000000000..334342d49a
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/ItemHoneyCrystal.java
@@ -0,0 +1,51 @@
+package binnie.extrabees.products;
+
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.core.Tabs;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class ItemHoneyCrystal
+ extends Item
+{
+ private int maxCharge = 8000;
+ private int transferLimit = 500;
+ private int tier = 1;
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.itemIcon = ExtraBees.proxy.getIcon(register, "honeyCrystal");
+ }
+
+ public ItemHoneyCrystal()
+ {
+ setMaxDamage(27);
+ setMaxStackSize(1);
+
+ setCreativeTab(Tabs.tabApiculture);
+ setUnlocalizedName("honeyCrystal");
+ }
+
+ public String getItemStackDisplayName(ItemStack i)
+ {
+ return ExtraBees.proxy.localise("item.honeycrystal");
+ }
+
+ public static NBTTagCompound getOrCreateNbtData(ItemStack itemStack)
+ {
+ NBTTagCompound ret = itemStack.getTagCompound();
+ if (ret == null)
+ {
+ ret = new NBTTagCompound();
+
+ itemStack.setTagCompound(ret);
+ }
+ return ret;
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/ItemHoneyCrystalEmpty.java b/src/Java/binnie/extrabees/products/ItemHoneyCrystalEmpty.java
new file mode 100644
index 0000000000..03dad2115f
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/ItemHoneyCrystalEmpty.java
@@ -0,0 +1,30 @@
+package binnie.extrabees.products;
+
+import binnie.extrabees.ExtraBees;
+import binnie.extrabees.proxy.ExtraBeesProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.ItemStack;
+
+public class ItemHoneyCrystalEmpty
+ extends ItemHoneyCrystal
+{
+ public ItemHoneyCrystalEmpty()
+ {
+ setMaxDamage(0);
+ setMaxStackSize(64);
+ setUnlocalizedName("honeyCrystalEmpty");
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.itemIcon = ExtraBees.proxy.getIcon(register, "honeyCrystalEmpty");
+ }
+
+ public String getItemStackDisplayName(ItemStack i)
+ {
+ return ExtraBees.proxy.localise("item.honeycrystal.empty");
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/ItemHoneyDrop.java b/src/Java/binnie/extrabees/products/ItemHoneyDrop.java
new file mode 100644
index 0000000000..67abfed7cb
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/ItemHoneyDrop.java
@@ -0,0 +1,55 @@
+package binnie.extrabees.products;
+
+import binnie.core.BinnieCore;
+import binnie.core.proxy.BinnieProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.core.Tabs;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+
+public class ItemHoneyDrop
+ extends ItemProduct
+{
+ IIcon icon1;
+ IIcon icon2;
+
+ @SideOnly(Side.CLIENT)
+ public boolean requiresMultipleRenderPasses()
+ {
+ return true;
+ }
+
+ public ItemHoneyDrop()
+ {
+ super(EnumHoneyDrop.values());
+ setCreativeTab(Tabs.tabApiculture);
+ setUnlocalizedName("honeyDrop");
+ }
+
+ public int getColorFromItemStack(ItemStack itemStack, int j)
+ {
+ int i = itemStack.getItemDamage();
+ if (j == 0) {
+ return EnumHoneyDrop.get(itemStack).colour[0];
+ }
+ return EnumHoneyDrop.get(itemStack).colour[1];
+ }
+
+ @SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamageForRenderPass(int i, int j)
+ {
+ if (j > 0) {
+ return this.icon1;
+ }
+ return this.icon2;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.icon1 = BinnieCore.proxy.getIcon(register, "forestry", "honeyDrop.0");
+ this.icon2 = BinnieCore.proxy.getIcon(register, "forestry", "honeyDrop.1");
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/ItemProduct.java b/src/Java/binnie/extrabees/products/ItemProduct.java
new file mode 100644
index 0000000000..f2d6b16e35
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/ItemProduct.java
@@ -0,0 +1,44 @@
+package binnie.extrabees.products;
+
+import binnie.core.item.IItemEnum;
+import java.util.List;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class ItemProduct
+ extends Item
+{
+ IItemEnum[] types;
+
+ public ItemProduct(IItemEnum[] types)
+ {
+ setMaxStackSize(64);
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ this.types = types;
+ }
+
+ public IItemEnum get(ItemStack stack)
+ {
+ int i = stack.getItemDamage();
+ if ((i >= 0) && (i < this.types.length)) {
+ return this.types[i];
+ }
+ return this.types[0];
+ }
+
+ public String getItemStackDisplayName(ItemStack itemstack)
+ {
+ return get(itemstack).getName(itemstack);
+ }
+
+ public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List itemList)
+ {
+ for (IItemEnum type : this.types) {
+ if (type.isActive()) {
+ itemList.add(new ItemStack(this, 1, type.ordinal()));
+ }
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/ItemPropolis.java b/src/Java/binnie/extrabees/products/ItemPropolis.java
new file mode 100644
index 0000000000..a66c10da46
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/ItemPropolis.java
@@ -0,0 +1,35 @@
+package binnie.extrabees.products;
+
+import binnie.core.BinnieCore;
+import binnie.core.proxy.BinnieProxy;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.core.Tabs;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.ItemStack;
+
+public class ItemPropolis
+ extends ItemProduct
+{
+ public ItemPropolis()
+ {
+ super(EnumPropolis.values());
+ setCreativeTab(Tabs.tabApiculture);
+ setUnlocalizedName("propolis");
+ }
+
+ public int getColorFromItemStack(ItemStack itemStack, int j)
+ {
+ int i = itemStack.getItemDamage();
+ if (j == 0) {
+ return EnumPropolis.get(itemStack).colour[0];
+ }
+ return EnumPropolis.get(itemStack).colour[1];
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register)
+ {
+ this.itemIcon = BinnieCore.proxy.getIcon(register, "forestry", "propolis.0");
+ }
+}
diff --git a/src/Java/binnie/extrabees/products/ModuleProducts.java b/src/Java/binnie/extrabees/products/ModuleProducts.java
new file mode 100644
index 0000000000..7d2386872a
--- /dev/null
+++ b/src/Java/binnie/extrabees/products/ModuleProducts.java
@@ -0,0 +1,43 @@
+package binnie.extrabees.products;
+
+import binnie.core.IInitializable;
+import binnie.core.Mods;
+import binnie.core.Mods.Mod;
+import binnie.extrabees.ExtraBees;
+import cpw.mods.fml.common.registry.GameRegistry;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+public class ModuleProducts
+ implements IInitializable
+{
+ public void preInit()
+ {
+ ExtraBees.honeyCrystal = new ItemHoneyCrystal();
+ ExtraBees.honeyCrystalEmpty = new ItemHoneyCrystalEmpty();
+ ExtraBees.honeyDrop = new ItemHoneyDrop();
+ ExtraBees.comb = new ItemHoneyComb();
+ ExtraBees.propolis = new ItemPropolis();
+
+ OreDictionary.registerOre("ingotIron", Items.iron_ingot);
+ OreDictionary.registerOre("ingotGold", Items.gold_ingot);
+ OreDictionary.registerOre("gemDiamond", Items.diamond);
+ }
+
+ public void init() {}
+
+ public void postInit()
+ {
+ GameRegistry.addRecipe(new ItemStack(ExtraBees.honeyCrystalEmpty), new Object[] { "#@#", "@#@", "#@#", Character.valueOf('@'), Mods.Forestry.stack("honeyDrop"), Character.valueOf('#'), EnumHoneyDrop.ENERGY.get(1) });
+ for (EnumHoneyComb info : EnumHoneyComb.values()) {
+ info.addRecipe();
+ }
+ for (EnumHoneyDrop info : EnumHoneyDrop.values()) {
+ info.addRecipe();
+ }
+ for (EnumPropolis info : EnumPropolis.values()) {
+ info.addRecipe();
+ }
+ }
+}
diff --git a/src/Java/binnie/extrabees/proxy/ExtraBeesProxy.java b/src/Java/binnie/extrabees/proxy/ExtraBeesProxy.java
new file mode 100644
index 0000000000..2b7499f94a
--- /dev/null
+++ b/src/Java/binnie/extrabees/proxy/ExtraBeesProxy.java
@@ -0,0 +1,13 @@
+package binnie.extrabees.proxy;
+
+import binnie.core.proxy.BinnieModProxy;
+import binnie.extrabees.ExtraBees;
+
+public class ExtraBeesProxy
+ extends BinnieModProxy
+{
+ public ExtraBeesProxy()
+ {
+ super(ExtraBees.instance);
+ }
+}
diff --git a/src/Java/binnie/extrabees/proxy/ExtraBeesProxyClient.java b/src/Java/binnie/extrabees/proxy/ExtraBeesProxyClient.java
new file mode 100644
index 0000000000..87198021d2
--- /dev/null
+++ b/src/Java/binnie/extrabees/proxy/ExtraBeesProxyClient.java
@@ -0,0 +1,5 @@
+package binnie.extrabees.proxy;
+
+public class ExtraBeesProxyClient
+ extends ExtraBeesProxy
+{}
diff --git a/src/Java/binnie/extrabees/proxy/ExtraBeesProxyServer.java b/src/Java/binnie/extrabees/proxy/ExtraBeesProxyServer.java
new file mode 100644
index 0000000000..f8aae382a5
--- /dev/null
+++ b/src/Java/binnie/extrabees/proxy/ExtraBeesProxyServer.java
@@ -0,0 +1,5 @@
+package binnie.extrabees.proxy;
+
+public class ExtraBeesProxyServer
+ extends ExtraBeesProxy
+{}
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;
+ }
+}