package mekanism.common.integration; import mekanism.api.MekanismConfig.general; import mekanism.api.energy.IEnergizedItem; import mekanism.common.capabilities.Capabilities; import mekanism.common.capabilities.ItemCapabilityWrapper.ItemCapability; import net.darkhax.tesla.api.ITeslaConsumer; import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaProducer; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fml.common.Optional.Interface; import net.minecraftforge.fml.common.Optional.InterfaceList; import net.minecraftforge.fml.common.Optional.Method; @InterfaceList({ @Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "tesla"), @Interface(iface = "net.darkhax.tesla.api.ITeslaProducer", modid = "tesla"), @Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "tesla") }) public class TeslaItemWrapper extends ItemCapability implements ITeslaHolder, ITeslaConsumer, ITeslaProducer { @Override public boolean canProcess(Capability capability) { return capability == Capabilities.TESLA_HOLDER_CAPABILITY || capability == Capabilities.TESLA_CONSUMER_CAPABILITY && getItem().canReceive(getStack()) || capability == Capabilities.TESLA_PRODUCER_CAPABILITY && getItem().canSend(getStack()); } public IEnergizedItem getItem() { return (IEnergizedItem)getStack().getItem(); } @Override @Method(modid = "tesla") public long takePower(long power, boolean simulated) { if(getItem().canSend(getStack())) { long energyRemaining = getStoredPower(); long toSend = Math.min(power, energyRemaining); if(!simulated) { getItem().setEnergy(getStack(), getItem().getEnergy(getStack()) - toSend*general.FROM_TESLA); } return toSend; } return 0; } @Override @Method(modid = "tesla") public long givePower(long power, boolean simulated) { if(getItem().canReceive(getStack())) { long energyNeeded = getCapacity()-getStoredPower(); long toReceive = Math.min(power, energyNeeded); if(!simulated) { getItem().setEnergy(getStack(), getItem().getEnergy(getStack()) + toReceive*general.FROM_TESLA); } return toReceive; } return 0; } @Override @Method(modid = "tesla") public long getStoredPower() { return (long)Math.round(getItem().getEnergy(getStack())*general.TO_TESLA); } @Override @Method(modid = "tesla") public long getCapacity() { return (long)Math.round(getItem().getEnergy(getStack())*general.TO_TESLA); } }