Fixes and enhancements for TE
This commit is contained in:
parent
e17d290531
commit
17d36cad4d
6 changed files with 46 additions and 24 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue