Fixes and enhancements for TE

This commit is contained in:
Aidan Brady 2013-11-17 10:55:20 -05:00
parent e17d290531
commit 17d36cad4d
6 changed files with 46 additions and 24 deletions

View file

@ -101,6 +101,35 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
}
public synchronized double emit(double energyToSend, ArrayList<TileEntity> ignored)
{
double prevEnergy = energyToSend;
double sent;
energyToSend = doEmit(energyToSend, ignored);
sent = prevEnergy-energyToSend;
boolean tryAgain = energyToSend > 0 && sent > 0;
while(tryAgain)
{
tryAgain = false;
prevEnergy = energyToSend;
sent = 0;
energyToSend = doEmit(energyToSend, ignored);
sent = prevEnergy-energyToSend;
if(energyToSend > 0 && sent > 0)
{
tryAgain = true;
}
}
return energyToSend;
}
public synchronized double doEmit(double energyToSend, ArrayList<TileEntity> ignored)
{
double energyAvailable = energyToSend;
double sent;
@ -132,7 +161,7 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
else if(acceptor instanceof IEnergyHandler)
{
IEnergyHandler handler = (IEnergyHandler)acceptor;
int used = handler.receiveEnergy(side.getOpposite(), (int)(currentSending*Mekanism.TO_TE), false);
int used = handler.receiveEnergy(side.getOpposite(), (int)Math.round(currentSending*Mekanism.TO_TE), false);
energyToSend -= used*Mekanism.FROM_TE;
}
else if(acceptor instanceof IEnergySink)

View file

@ -182,11 +182,10 @@ public class EntityRobit extends EntityCreature implements IInventory, ISustaine
ItemStack itemStack = inventory[27];
IEnergyContainerItem item = (IEnergyContainerItem)inventory[27].getItem();
int itemEnergy = (int)Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getEnergyStored(itemStack));
int toTransfer = (int)Math.min(itemEnergy, ((MAX_ELECTRICITY - getEnergy())*Mekanism.TO_TE));
int itemEnergy = (int)Math.round(Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getEnergyStored(itemStack)));
int toTransfer = (int)Math.round(Math.min(itemEnergy, ((MAX_ELECTRICITY - getEnergy())*Mekanism.TO_TE)));
item.extractEnergy(itemStack, toTransfer, false);
setEnergy(getEnergy() + (toTransfer*Mekanism.FROM_TE));
setEnergy(getEnergy() + (item.extractEnergy(itemStack, toTransfer, false)*Mekanism.FROM_TE));
}
else if(inventory[27].itemID == Item.redstone.itemID && getEnergy()+Mekanism.ENERGY_PER_REDSTONE <= MAX_ELECTRICITY)
{

View file

@ -145,11 +145,10 @@ public class TileEntityChargepad extends TileEntityElectricBlock implements IAct
{
IEnergyContainerItem item = (IEnergyContainerItem)itemstack.getItem();
int itemEnergy = (int)Math.min(Math.sqrt(item.getMaxEnergyStored(itemstack)), item.getMaxEnergyStored(itemstack) - item.getEnergyStored(itemstack));
int toTransfer = (int)Math.min(itemEnergy, (getEnergy()*Mekanism.TO_TE));
int itemEnergy = (int)Math.round(Math.min(Math.sqrt(item.getMaxEnergyStored(itemstack)), item.getMaxEnergyStored(itemstack) - item.getEnergyStored(itemstack)));
int toTransfer = (int)Math.round(Math.min(itemEnergy, (getEnergy()*Mekanism.TO_TE)));
item.receiveEnergy(itemstack, toTransfer, false);
setEnergy(getEnergy() - (toTransfer*Mekanism.FROM_TE));
setEnergy(getEnergy() - (item.receiveEnergy(itemstack, toTransfer, false)*Mekanism.FROM_TE));
}
}
}

View file

@ -318,10 +318,7 @@ public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwor
}
@Override
public void refresh()
{
refreshTransmitterNetwork();
}
public void refresh() {}
@Override
public boolean canConnect(ForgeDirection direction)
@ -357,7 +354,7 @@ public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwor
{
ArrayList list = new ArrayList();
list.add(Object3D.get(this).getFromSide(from).getTileEntity(worldObj));
return maxReceive - (int)(getTransmitterNetwork().emit(maxReceive*Mekanism.FROM_TE, list)*Mekanism.TO_TE);
return maxReceive - (int)Math.round(getTransmitterNetwork().emit(maxReceive*Mekanism.FROM_TE, list)*Mekanism.TO_TE);
}
return 0;
@ -386,7 +383,7 @@ public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwor
{
ArrayList list = new ArrayList();
list.add(Object3D.get(this).getFromSide(from).getTileEntity(worldObj));
return (int)(getTransmitterNetwork().getEnergyNeeded(list)*Mekanism.TO_TE);
return (int)Math.round(getTransmitterNetwork().getEnergyNeeded(list)*Mekanism.TO_TE);
}
public class FakeUENetwork implements IElectricityNetwork

View file

@ -292,7 +292,7 @@ public final class CableUtils
{
IEnergyHandler handler = (IEnergyHandler)tileEntity;
double toSend = Math.min(emitter.getEnergy(), emitter.getMaxOutput());
int used = handler.receiveEnergy(emitter.getOutputtingSide().getOpposite(), (int)(toSend*Mekanism.TO_TE), false);
int used = handler.receiveEnergy(emitter.getOutputtingSide().getOpposite(), (int)Math.round(toSend*Mekanism.TO_TE), false);
emitter.setEnergy(emitter.getEnergy() - used*Mekanism.FROM_TE);
}
else if(tileEntity instanceof IEnergySink)

View file

@ -46,11 +46,10 @@ public final class ChargeUtils
ItemStack itemStack = storer.inventory[slotID];
IEnergyContainerItem item = (IEnergyContainerItem)storer.inventory[slotID].getItem();
int itemEnergy = (int)Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getEnergyStored(itemStack));
int toTransfer = (int)Math.min(itemEnergy, ((storer.getMaxEnergy() - storer.getEnergy())*Mekanism.TO_TE));
int itemEnergy = (int)Math.round(Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getEnergyStored(itemStack)));
int toTransfer = (int)Math.round(Math.min(itemEnergy, ((storer.getMaxEnergy() - storer.getEnergy())*Mekanism.TO_TE)));
item.extractEnergy(itemStack, toTransfer, false);
storer.setEnergy(storer.getEnergy() + (toTransfer*Mekanism.FROM_TE));
storer.setEnergy(storer.getEnergy() + (item.extractEnergy(itemStack, toTransfer, false)*Mekanism.FROM_TE));
}
else if(storer.inventory[slotID].itemID == Item.redstone.itemID && storer.getEnergy()+Mekanism.ENERGY_PER_REDSTONE <= storer.getMaxEnergy())
{
@ -92,11 +91,10 @@ public final class ChargeUtils
ItemStack itemStack = storer.inventory[slotID];
IEnergyContainerItem item = (IEnergyContainerItem)storer.inventory[slotID].getItem();
int itemEnergy = (int)Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getMaxEnergyStored(itemStack) - item.getEnergyStored(itemStack));
int toTransfer = (int)Math.min(itemEnergy, (storer.getEnergy()*Mekanism.TO_TE));
int itemEnergy = (int)Math.round(Math.min(Math.sqrt(item.getMaxEnergyStored(itemStack)), item.getMaxEnergyStored(itemStack) - item.getEnergyStored(itemStack)));
int toTransfer = (int)Math.round(Math.min(itemEnergy, (storer.getEnergy()*Mekanism.TO_TE)));
item.extractEnergy(itemStack, toTransfer, false);
storer.setEnergy(storer.getEnergy() - (toTransfer*Mekanism.FROM_TE));
storer.setEnergy(storer.getEnergy() - (item.extractEnergy(itemStack, toTransfer, false)*Mekanism.FROM_TE));
}
}
}