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