Fixed cable functionality

This commit is contained in:
Aidan C. Brady 2014-08-09 13:28:40 -04:00
parent ed919fa19a
commit a3c6b9dac2
2 changed files with 23 additions and 25 deletions

View file

@ -143,7 +143,7 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
tryAgain = false; tryAgain = false;
double prev = sent; double prev = sent;
sent += doEmit(energyToSend-sent); sent += doEmit(energyToSend-sent, tryAgain);
if(energyToSend-sent > 0 && sent-prev > 0) if(energyToSend-sent > 0 && sent-prev > 0)
{ {
@ -165,7 +165,7 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
/** /**
* @return sent * @return sent
*/ */
public synchronized double doEmit(double energyToSend) public synchronized double doEmit(double energyToSend, boolean tryAgain)
{ {
double sent = 0; double sent = 0;
@ -210,7 +210,7 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
toSend = Math.min(toSend, ((IEnergySink)acceptor).getDemandedEnergy()*Mekanism.FROM_IC2); toSend = Math.min(toSend, ((IEnergySink)acceptor).getDemandedEnergy()*Mekanism.FROM_IC2);
sent += (toSend - (((IEnergySink)acceptor).injectEnergy(side.getOpposite(), toSend*Mekanism.TO_IC2, 0)*Mekanism.FROM_IC2)); sent += (toSend - (((IEnergySink)acceptor).injectEnergy(side.getOpposite(), toSend*Mekanism.TO_IC2, 0)*Mekanism.FROM_IC2));
} }
else if(MekanismUtils.useBuildCraft() && MjAPI.getMjBattery(acceptor, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite()) != null) else if(MekanismUtils.useBuildCraft() && MjAPI.getMjBattery(acceptor, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite()) != null && !tryAgain)
{ {
IBatteryObject battery = MjAPI.getMjBattery(acceptor, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite()); IBatteryObject battery = MjAPI.getMjBattery(acceptor, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite());
double toSend = battery.addEnergy(Math.min(battery.getEnergyRequested(), currentSending*Mekanism.TO_BC)); double toSend = battery.addEnergy(Math.min(battery.getEnergyRequested(), currentSending*Mekanism.TO_BC));

View file

@ -218,9 +218,9 @@ public final class CableUtils
{ {
if(!emitter.getWorldObj().isRemote && MekanismUtils.canFunction(emitter)) if(!emitter.getWorldObj().isRemote && MekanismUtils.canFunction(emitter))
{ {
double sendingEnergy = Math.min(emitter.getEnergy(), emitter.getMaxOutput()); double energyToSend = Math.min(emitter.getEnergy(), emitter.getMaxOutput());
if(sendingEnergy > 0) if(energyToSend > 0)
{ {
List<ForgeDirection> outputtingSides = new ArrayList<ForgeDirection>(); List<ForgeDirection> outputtingSides = new ArrayList<ForgeDirection>();
boolean[] connectable = getConnections(emitter, emitter.getOutputtingSides()); boolean[] connectable = getConnections(emitter, emitter.getOutputtingSides());
@ -236,19 +236,19 @@ public final class CableUtils
if(outputtingSides.size() > 0) if(outputtingSides.size() > 0)
{ {
double sent = 0; double sent = 0;
boolean tryAgain = false;
boolean cont = false;
do { do {
cont = false; tryAgain = false;
double prev = sent; double prev = sent;
sent += emit_do(emitter, outputtingSides, sendingEnergy-sent); sent += emit_do(emitter, outputtingSides, energyToSend-sent, tryAgain);
if(sendingEnergy-sent > 0 && sent-prev > 0) if(energyToSend-sent > 0 && sent-prev > 0)
{ {
cont = true; tryAgain = true;
} }
} while(cont); } while(tryAgain);
emitter.setEnergy(emitter.getEnergy() - sent); emitter.setEnergy(emitter.getEnergy() - sent);
} }
@ -256,7 +256,7 @@ public final class CableUtils
} }
} }
private static double emit_do(TileEntityElectricBlock emitter, List<ForgeDirection> outputtingSides, double totalToSend) private static double emit_do(TileEntityElectricBlock emitter, List<ForgeDirection> outputtingSides, double totalToSend, boolean tryAgain)
{ {
double remains = totalToSend%outputtingSides.size(); double remains = totalToSend%outputtingSides.size();
double splitSend = (totalToSend-remains)/outputtingSides.size(); double splitSend = (totalToSend-remains)/outputtingSides.size();
@ -271,7 +271,7 @@ public final class CableUtils
remains = 0; remains = 0;
double prev = sent; double prev = sent;
sent += emit_do_do(emitter, tileEntity, side, toSend); sent += emit_do_do(emitter, tileEntity, side, toSend, tryAgain);
if(sent-prev == 0) if(sent-prev == 0)
{ {
@ -287,7 +287,7 @@ public final class CableUtils
return sent; return sent;
} }
private static double emit_do_do(TileEntityElectricBlock from, TileEntity tileEntity, ForgeDirection side, double sendingEnergy) private static double emit_do_do(TileEntityElectricBlock from, TileEntity tileEntity, ForgeDirection side, double currentSending, boolean tryAgain)
{ {
double sent = 0; double sent = 0;
@ -297,8 +297,7 @@ public final class CableUtils
if(acceptor.canReceiveEnergy(side.getOpposite())) if(acceptor.canReceiveEnergy(side.getOpposite()))
{ {
double prev = sent; sent += acceptor.transferEnergyToAcceptor(side.getOpposite(), currentSending);
sent += acceptor.transferEnergyToAcceptor(side.getOpposite(), sendingEnergy);
} }
} }
else if(MekanismUtils.useRF() && tileEntity instanceof IEnergyHandler) else if(MekanismUtils.useRF() && tileEntity instanceof IEnergyHandler)
@ -307,7 +306,7 @@ public final class CableUtils
if(handler.canConnectEnergy(side.getOpposite())) if(handler.canConnectEnergy(side.getOpposite()))
{ {
int used = handler.receiveEnergy(side.getOpposite(), (int)Math.round(sendingEnergy*Mekanism.TO_TE), false); int used = handler.receiveEnergy(side.getOpposite(), (int)Math.round(currentSending*Mekanism.TO_TE), false);
sent += used*Mekanism.FROM_TE; sent += used*Mekanism.FROM_TE;
} }
} }
@ -315,17 +314,16 @@ public final class CableUtils
{ {
if(((IEnergySink)tileEntity).acceptsEnergyFrom(from, side.getOpposite())) if(((IEnergySink)tileEntity).acceptsEnergyFrom(from, side.getOpposite()))
{ {
double toSend = Math.min(sendingEnergy, Math.min(EnergyNet.instance.getPowerFromTier(((IEnergySink) tileEntity).getSinkTier()), ((IEnergySink)tileEntity).getDemandedEnergy())*Mekanism.FROM_IC2); double toSend = Math.min(currentSending, EnergyNet.instance.getPowerFromTier(((IEnergySink)tileEntity).getSinkTier())*Mekanism.FROM_IC2);
double rejects = ((IEnergySink)tileEntity).injectEnergy(side.getOpposite(), toSend*Mekanism.TO_IC2, 0)*Mekanism.FROM_IC2; toSend = Math.min(toSend, ((IEnergySink)tileEntity).getDemandedEnergy()*Mekanism.FROM_IC2);
sent += (toSend - rejects); sent += (toSend - (((IEnergySink)tileEntity).injectEnergy(side.getOpposite(), toSend*Mekanism.TO_IC2, 0)*Mekanism.FROM_IC2));
} }
} }
else if(MekanismUtils.useBuildCraft() && MjAPI.getMjBattery(tileEntity, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite()) != null) else if(MekanismUtils.useBuildCraft() && MjAPI.getMjBattery(tileEntity, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite()) != null && !tryAgain)
{ {
IBatteryObject battery = MjAPI.getMjBattery(tileEntity, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite()); IBatteryObject battery = MjAPI.getMjBattery(tileEntity, MjAPI.DEFAULT_POWER_FRAMEWORK, side.getOpposite());
double transferEnergy = Math.min(sendingEnergy, battery.getEnergyRequested()*Mekanism.FROM_BC); double toSend = battery.addEnergy(Math.min(battery.getEnergyRequested(), currentSending*Mekanism.TO_BC));
double used = battery.addEnergy(transferEnergy*Mekanism.TO_BC); sent += toSend*Mekanism.FROM_BC;
sent += used*Mekanism.FROM_BC;
} }
return sent; return sent;