package crazypants.enderio.trigger;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.gates.ActionManager;
import buildcraft.api.gates.ITrigger;
import buildcraft.api.gates.ITriggerParameter;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.machine.power.TileCapacitorBank;
public class TriggerEnderIO implements ITrigger {
public static IIcon[] triggerIcons = new IIcon[5];
public static String[] descriptions = new String[] { "Capacitor Bank has no energy stored", "Capacitor Bank has energy stored",
"Capacitor Bank is full with energy", "Capacitor Bank is charging items", "Capacitor Bank finished charging items" };
public String uniqueTag;
public int triggerID;
public TriggerEnderIO(String uniqueTag, int triggerID) {
this.uniqueTag = uniqueTag;
this.triggerID = triggerID;
ActionManager.registerTrigger(this);
}
@Override
public String getDescription() {
return descriptions[triggerID];
}
//@Override
public boolean isTriggerActive(ForgeDirection side, TileEntity tile, ITriggerParameter parameter) {
if(tile instanceof TileCapacitorBank) {
TileCapacitorBank capacitorBank = (TileCapacitorBank) tile;
if(triggerID == 0) {
return capacitorBank.getEnergyStored() == 0;
}
if(triggerID == 1) {
return capacitorBank.getEnergyStored() != 0;
}
if(triggerID == 2) {
return capacitorBank.getMaxEnergyStored() - capacitorBank.getEnergyStored() < 5;
}
if(triggerID == 3 || triggerID == 4) {
ItemStack[] items = new ItemStack[capacitorBank.getSizeInventory()];
for (int i = 0; i < items.length; i++) {
items[i] = capacitorBank.getStackInSlot(i);
}
boolean capacitorBankEmpty = true;
for (int i = 0; i < items.length; i++) {
if(items[i] != null && items[i].getItem() instanceof IChargeableItem) {
capacitorBankEmpty = false;
}
}
if(capacitorBankEmpty) {
return false;
}
boolean hasUnchargedItems = false;
for (int i = 0; i < items.length; i++) {
if(items[i] != null && items[i].getItem() instanceof IChargeableItem) {
IChargeableItem item = (IChargeableItem) items[i].getItem();
if(item.getEnergyStored(items[i]) < item.getMaxEnergyStored(items[i])) {
hasUnchargedItems = true;
}
}
}
if(hasUnchargedItems && triggerID == 3) {
return true;
}
if(!hasUnchargedItems && triggerID == 4) {
return true;
}
}
}
return false;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon() {
return triggerIcons[triggerID];
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconRegistry) {
triggerIcons[0] = iconRegistry.registerIcon("enderio:triggers/noEnergy");
triggerIcons[1] = iconRegistry.registerIcon("enderio:triggers/hasEnergy");
triggerIcons[2] = iconRegistry.registerIcon("enderio:triggers/fullEnergy");
triggerIcons[3] = iconRegistry.registerIcon("enderio:triggers/charging");
triggerIcons[4] = iconRegistry.registerIcon("enderio:triggers/chargingDone");
}
// @Override
// public int getLegacyId() {
// return 0;
// }
@Override
public String getUniqueTag() {
return this.uniqueTag;
}
@Override
public boolean hasParameter() {
return false;
}
@Override
public ITriggerParameter createParameter() {
return null;
}
@Override
public boolean requiresParameter() {
return false;
}
}