Move IC2 stuff out of controller to avoid loading issues

This commit is contained in:
Raoul Van den Berge
2016-07-04 20:44:35 +02:00
parent 96cb48acdd
commit ffc105325d
3 changed files with 63 additions and 20 deletions

View File

@@ -135,4 +135,8 @@ public final class RefinedStorage {
public static boolean hasJei() {
return Loader.isModLoaded("JEI");
}
public static boolean hasIC2() {
return Loader.isModLoaded("IC2");
}
}

View File

@@ -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();
}
}

View File

@@ -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<ICraftingTask> craftingTasksToCancel = new ArrayList<ICraftingTask>();
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<ClientNode> clientNodes = new ArrayList<ClientNode>();
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);