From cd62f593fae232e9254f3e19575b1c142b2f16f6 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Fri, 29 Nov 2013 17:37:00 -0500 Subject: [PATCH] Fix possible infinite loop --- common/mekanism/common/util/CableUtils.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/common/mekanism/common/util/CableUtils.java b/common/mekanism/common/util/CableUtils.java index e8b12b252..22ac25b60 100644 --- a/common/mekanism/common/util/CableUtils.java +++ b/common/mekanism/common/util/CableUtils.java @@ -269,21 +269,31 @@ public final class CableUtils double remains = totalToSend%outputtingSides.size(); double splitSend = (totalToSend-remains)/outputtingSides.size(); + List toRemove = new ArrayList(); + for(ForgeDirection side : outputtingSides) { TileEntity tileEntity = Object3D.get(emitter).getFromSide(side).getTileEntity(emitter.worldObj); double toSend = splitSend+remains; remains = 0; + double prev = totalToSend; totalToSend -= (toSend - emit_do_do(emitter, tileEntity, side, toSend)); + + if(prev-totalToSend == 0) + { + toRemove.add(side); + } } + for(ForgeDirection side : toRemove) + { + outputtingSides.remove(side); + } + return totalToSend; } - /** - * @return rejects - */ private static double emit_do_do(TileEntityElectricBlock from, TileEntity tileEntity, ForgeDirection side, double sendingEnergy) { if(TransmissionType.checkTransmissionType(tileEntity, TransmissionType.ENERGY))