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() { public static boolean hasJei() {
return Loader.isModLoaded("JEI"); 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.EnergyStorage;
import cofh.api.energy.IEnergyReceiver; import cofh.api.energy.IEnergyReceiver;
import ic2.api.energy.prefab.BasicSink;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.darkhax.tesla.api.ITeslaConsumer; import net.darkhax.tesla.api.ITeslaConsumer;
import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaHolder;
@@ -18,6 +17,7 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fml.common.Optional;
import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
@@ -53,9 +53,10 @@ import refinedstorage.tile.config.RedstoneMode;
import java.util.*; import java.util.*;
import static refinedstorage.RefinedStorageUtils.convertIC2ToRF; @Optional.InterfaceList({
import static refinedstorage.RefinedStorageUtils.convertRFToIC2; @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 class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ITeslaHolder, ITeslaConsumer, ISynchronizedContainer, IRedstoneModeConfig {
public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY = "Energy";
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; 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 List<ICraftingTask> craftingTasksToCancel = new ArrayList<ICraftingTask>();
private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controller); private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controller);
private BasicSink IC2Energy = new BasicSink(this, (int) convertRFToIC2(energy.getMaxEnergyStored()), Integer.MAX_VALUE) { private IC2Energy IC2Energy;
@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 int energyUsage; private int energyUsage;
private int lastEnergyDisplay; private int lastEnergyDisplay;
@@ -127,6 +116,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
private List<ClientNode> clientNodes = new ArrayList<ClientNode>(); private List<ClientNode> clientNodes = new ArrayList<ClientNode>();
public TileController() {
if (RefinedStorage.hasIC2()) {
this.IC2Energy = new IC2Energy(this);
}
}
@Override @Override
public BlockPos getPosition() { public BlockPos getPosition() {
return pos; return pos;
@@ -145,7 +140,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
@Override @Override
public void update() { public void update() {
if (!worldObj.isRemote) { if (!worldObj.isRemote) {
if (IC2Energy != null) {
IC2Energy.update(); IC2Energy.update();
}
for (INetworkNode node : nodesToAdd) { for (INetworkNode node : nodesToAdd) {
nodes.add(node); nodes.add(node);
@@ -245,8 +242,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
public void invalidate() { public void invalidate() {
super.invalidate(); super.invalidate();
if (IC2Energy != null) {
IC2Energy.invalidate(); IC2Energy.invalidate();
} }
}
@Override @Override
public List<INetworkNode> getNodes() { public List<INetworkNode> getNodes() {
@@ -289,8 +288,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
public void onChunkUnload() { public void onChunkUnload() {
disconnectNodes(); disconnectNodes();
if (IC2Energy != null) {
IC2Energy.invalidate(); IC2Energy.invalidate();
} }
}
public IGroupedStorage getStorage() { public IGroupedStorage getStorage() {
return storage; return storage;
@@ -590,16 +591,19 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
return energy.getEnergyStored(); return energy.getEnergyStored();
} }
@Optional.Method(modid = "Tesla")
@Override @Override
public long getStoredPower() { public long getStoredPower() {
return energy.getEnergyStored(); return energy.getEnergyStored();
} }
@Optional.Method(modid = "Tesla")
@Override @Override
public long getCapacity() { public long getCapacity() {
return energy.getMaxEnergyStored(); return energy.getMaxEnergyStored();
} }
@Optional.Method(modid = "Tesla")
@Override @Override
public long givePower(long power, boolean simulated) { public long givePower(long power, boolean simulated) {
return energy.receiveEnergy((int) power, simulated); return energy.receiveEnergy((int) power, simulated);