2015-04-01 03:42:36 +02:00
|
|
|
package mekanism.api.energy;
|
|
|
|
|
2015-04-02 04:22:53 +02:00
|
|
|
import mekanism.api.Coord4D;
|
2015-04-01 03:42:36 +02:00
|
|
|
import mekanism.api.MekanismConfig.general;
|
|
|
|
import mekanism.common.util.MekanismUtils;
|
|
|
|
|
|
|
|
import net.minecraft.tileentity.TileEntity;
|
|
|
|
|
|
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
|
|
|
|
import cofh.api.energy.IEnergyReceiver;
|
|
|
|
import ic2.api.energy.tile.IEnergySink;
|
|
|
|
|
|
|
|
public abstract class EnergyAcceptorWrapper implements IStrictEnergyAcceptor
|
|
|
|
{
|
2015-04-02 04:22:53 +02:00
|
|
|
public Coord4D coord;
|
|
|
|
|
2015-04-01 03:42:36 +02:00
|
|
|
public static EnergyAcceptorWrapper get(TileEntity tileEntity)
|
|
|
|
{
|
2015-04-02 04:22:53 +02:00
|
|
|
EnergyAcceptorWrapper wrapper = null;
|
2015-04-01 03:42:36 +02:00
|
|
|
if(tileEntity instanceof IStrictEnergyAcceptor)
|
|
|
|
{
|
2015-04-02 04:22:53 +02:00
|
|
|
wrapper = new MekanismAcceptor((IStrictEnergyAcceptor)tileEntity);
|
2015-04-01 03:42:36 +02:00
|
|
|
}
|
|
|
|
else if(MekanismUtils.useRF() && tileEntity instanceof IEnergyReceiver)
|
|
|
|
{
|
2015-04-02 04:22:53 +02:00
|
|
|
wrapper = new RFAcceptor((IEnergyReceiver)tileEntity);
|
2015-04-01 03:42:36 +02:00
|
|
|
}
|
|
|
|
else if(MekanismUtils.useIC2() && tileEntity instanceof IEnergySink)
|
|
|
|
{
|
2015-04-02 04:22:53 +02:00
|
|
|
wrapper = new IC2Acceptor((IEnergySink)tileEntity);
|
|
|
|
}
|
|
|
|
if(wrapper != null)
|
|
|
|
{
|
|
|
|
wrapper.coord = Coord4D.get(tileEntity);
|
2015-04-01 03:42:36 +02:00
|
|
|
}
|
2015-04-02 04:22:53 +02:00
|
|
|
return wrapper;
|
2015-04-01 03:42:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public abstract double getNeeded();
|
|
|
|
|
|
|
|
public static class MekanismAcceptor extends EnergyAcceptorWrapper
|
|
|
|
{
|
|
|
|
private IStrictEnergyAcceptor acceptor;
|
|
|
|
|
|
|
|
public MekanismAcceptor(IStrictEnergyAcceptor mekAcceptor)
|
|
|
|
{
|
|
|
|
acceptor = mekAcceptor;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double transferEnergyToAcceptor(ForgeDirection side, double amount)
|
|
|
|
{
|
|
|
|
return acceptor.transferEnergyToAcceptor(side, amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canReceiveEnergy(ForgeDirection side)
|
|
|
|
{
|
|
|
|
return acceptor.canReceiveEnergy(side);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getEnergy()
|
|
|
|
{
|
|
|
|
return acceptor.getEnergy();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setEnergy(double energy)
|
|
|
|
{
|
|
|
|
acceptor.setEnergy(energy);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getMaxEnergy()
|
|
|
|
{
|
|
|
|
return acceptor.getMaxEnergy();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getNeeded()
|
|
|
|
{
|
|
|
|
return acceptor.getMaxEnergy() - acceptor.getEnergy();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class RFAcceptor extends EnergyAcceptorWrapper
|
|
|
|
{
|
|
|
|
private IEnergyReceiver acceptor;
|
|
|
|
|
|
|
|
public RFAcceptor(IEnergyReceiver rfAcceptor)
|
|
|
|
{
|
|
|
|
acceptor = rfAcceptor;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double transferEnergyToAcceptor(ForgeDirection side, double amount)
|
|
|
|
{
|
|
|
|
return fromRF(acceptor.receiveEnergy(side, toRF(amount), false));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canReceiveEnergy(ForgeDirection side)
|
|
|
|
{
|
|
|
|
return acceptor.canConnectEnergy(side);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getEnergy()
|
|
|
|
{
|
|
|
|
return fromRF(acceptor.getEnergyStored(ForgeDirection.UNKNOWN));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setEnergy(double energy)
|
|
|
|
{
|
|
|
|
int rfToSet = toRF(energy);
|
|
|
|
int amountToReceive = rfToSet - acceptor.getEnergyStored(ForgeDirection.UNKNOWN);
|
|
|
|
acceptor.receiveEnergy(ForgeDirection.UNKNOWN, amountToReceive, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getMaxEnergy()
|
|
|
|
{
|
|
|
|
return fromRF(acceptor.getMaxEnergyStored(ForgeDirection.UNKNOWN));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getNeeded()
|
|
|
|
{
|
|
|
|
return fromRF(acceptor.getMaxEnergyStored(ForgeDirection.UNKNOWN) - acceptor.getEnergyStored(ForgeDirection.UNKNOWN));
|
|
|
|
}
|
|
|
|
|
|
|
|
public int toRF(double joules)
|
|
|
|
{
|
|
|
|
return (int)Math.round(joules * general.TO_TE);
|
|
|
|
}
|
|
|
|
|
|
|
|
public double fromRF(int rf)
|
|
|
|
{
|
|
|
|
return rf * general.FROM_TE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class IC2Acceptor extends EnergyAcceptorWrapper
|
|
|
|
{
|
|
|
|
private IEnergySink acceptor;
|
|
|
|
|
|
|
|
public IC2Acceptor(IEnergySink ic2Acceptor)
|
|
|
|
{
|
|
|
|
acceptor = ic2Acceptor;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double transferEnergyToAcceptor(ForgeDirection side, double amount)
|
|
|
|
{
|
|
|
|
return acceptor.injectEnergy(side, toEU(amount), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canReceiveEnergy(ForgeDirection side)
|
|
|
|
{
|
|
|
|
return acceptor.acceptsEnergyFrom(null, side);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getEnergy()
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setEnergy(double energy)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getMaxEnergy()
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getNeeded()
|
|
|
|
{
|
|
|
|
return fromEU(acceptor.getDemandedEnergy());
|
|
|
|
}
|
|
|
|
|
|
|
|
public double toEU(double joules)
|
|
|
|
{
|
|
|
|
return joules * general.TO_IC2;
|
|
|
|
}
|
|
|
|
|
|
|
|
public double fromEU(double eu)
|
|
|
|
{
|
|
|
|
return eu * general.FROM_IC2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|