aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/extrabees/apiary/machine
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/binnie/extrabees/apiary/machine')
-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
8 files changed, 1015 insertions, 0 deletions
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;
+ }
+ }
+ }
+ }
+}