diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 37e18d9e4..e3893e8af 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -135,4 +135,8 @@ public final class RefinedStorage { public static boolean hasJei() { return Loader.isModLoaded("JEI"); } + + public static boolean hasIC2() { + return Loader.isModLoaded("IC2"); + } } diff --git a/src/main/java/refinedstorage/tile/controller/IC2Energy.java b/src/main/java/refinedstorage/tile/controller/IC2Energy.java new file mode 100755 index 000000000..aaf7e8a8b --- /dev/null +++ b/src/main/java/refinedstorage/tile/controller/IC2Energy.java @@ -0,0 +1,35 @@ +package refinedstorage.tile.controller; + +import ic2.api.energy.prefab.BasicSink; +import net.minecraft.util.EnumFacing; + +import static refinedstorage.RefinedStorageUtils.convertIC2ToRF; +import static refinedstorage.RefinedStorageUtils.convertRFToIC2; + +public class IC2Energy { + private BasicSink sink; + + public IC2Energy(final TileController controller) { + this.sink = new BasicSink(controller, (int) convertRFToIC2(controller.getEnergy().getMaxEnergyStored()), Integer.MAX_VALUE) { + @Override + public double getDemandedEnergy() { + return Math.max(0.0D, convertRFToIC2(controller.getEnergy().getMaxEnergyStored()) - convertRFToIC2(controller.getEnergy().getEnergyStored())); + } + + @Override + public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) { + controller.getEnergy().setEnergyStored(controller.getEnergy().getEnergyStored() + convertIC2ToRF(amount)); + + return 0.0D; + } + }; + } + + public void invalidate() { + sink.invalidate(); + } + + public void update() { + sink.update(); + } +} diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index a57bcc206..f74229e20 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -2,7 +2,6 @@ package refinedstorage.tile.controller; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import ic2.api.energy.prefab.BasicSink; import io.netty.buffer.ByteBuf; import net.darkhax.tesla.api.ITeslaConsumer; import net.darkhax.tesla.api.ITeslaHolder; @@ -18,6 +17,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; +import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; @@ -53,9 +53,10 @@ import refinedstorage.tile.config.RedstoneMode; import java.util.*; -import static refinedstorage.RefinedStorageUtils.convertIC2ToRF; -import static refinedstorage.RefinedStorageUtils.convertRFToIC2; - +@Optional.InterfaceList({ + @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "Tesla"), + @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "Tesla") +}) public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ITeslaHolder, ITeslaConsumer, ISynchronizedContainer, IRedstoneModeConfig { public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; @@ -101,19 +102,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List craftingTasksToCancel = new ArrayList(); private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controller); - private BasicSink IC2Energy = new BasicSink(this, (int) convertRFToIC2(energy.getMaxEnergyStored()), Integer.MAX_VALUE) { - @Override - public double getDemandedEnergy() { - return Math.max(0.0D, convertRFToIC2(energy.getMaxEnergyStored()) - convertRFToIC2(energy.getEnergyStored())); - } - - @Override - public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) { - energy.setEnergyStored(energy.getEnergyStored() + convertIC2ToRF(amount)); - - return 0.0D; - } - }; + private IC2Energy IC2Energy; private int energyUsage; private int lastEnergyDisplay; @@ -127,6 +116,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List clientNodes = new ArrayList(); + public TileController() { + if (RefinedStorage.hasIC2()) { + this.IC2Energy = new IC2Energy(this); + } + } + @Override public BlockPos getPosition() { return pos; @@ -145,7 +140,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void update() { if (!worldObj.isRemote) { - IC2Energy.update(); + if (IC2Energy != null) { + IC2Energy.update(); + } for (INetworkNode node : nodesToAdd) { nodes.add(node); @@ -245,7 +242,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public void invalidate() { super.invalidate(); - IC2Energy.invalidate(); + if (IC2Energy != null) { + IC2Energy.invalidate(); + } } @Override @@ -289,7 +288,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public void onChunkUnload() { disconnectNodes(); - IC2Energy.invalidate(); + if (IC2Energy != null) { + IC2Energy.invalidate(); + } } public IGroupedStorage getStorage() { @@ -590,16 +591,19 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return energy.getEnergyStored(); } + @Optional.Method(modid = "Tesla") @Override public long getStoredPower() { return energy.getEnergyStored(); } + @Optional.Method(modid = "Tesla") @Override public long getCapacity() { return energy.getMaxEnergyStored(); } + @Optional.Method(modid = "Tesla") @Override public long givePower(long power, boolean simulated) { return energy.receiveEnergy((int) power, simulated);