diff --git a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java
index d0320988a..ee4e8a2b7 100644
--- a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java
+++ b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java
@@ -1,18 +1,10 @@
package mekanism.api.transmitters;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.Map.Entry;
-import java.util.Set;
-
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-
+import cpw.mods.fml.common.FMLCommonHandler;
+import cpw.mods.fml.common.eventhandler.Event;
import mekanism.api.Coord4D;
import mekanism.api.IClientTicker;
import mekanism.api.Range4D;
@@ -21,8 +13,9 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.ForgeDirection;
-import cpw.mods.fml.common.FMLCommonHandler;
-import cpw.mods.fml.common.eventhandler.Event;
+
+import java.util.*;
+import java.util.Map.Entry;
public abstract class DynamicNetwork> implements IClientTicker, INetworkDataHandler
{
@@ -146,6 +139,28 @@ public abstract class DynamicNetwork> implemen
public void invalidate()
{
+ //Remove invalid transmitters first for share calculations
+ for(Iterator> iter = transmitters.iterator(); iter.hasNext();)
+ {
+ IGridTransmitter transmitter = iter.next();
+
+ if(!transmitter.isValid())
+ {
+ iter.remove();
+ continue;
+ }
+ }
+
+ //Clamp the new buffer
+ clampBuffer();
+
+ //Update all shares
+ for(IGridTransmitter transmitter : transmitters)
+ {
+ transmitter.updateShare();
+ }
+
+ //Now invalidate the transmitters
for(IGridTransmitter transmitter : transmitters)
{
invalidateTransmitter(transmitter);
diff --git a/src/main/java/mekanism/api/transmitters/IGridTransmitter.java b/src/main/java/mekanism/api/transmitters/IGridTransmitter.java
index 254b4bb5d..9d82d486b 100644
--- a/src/main/java/mekanism/api/transmitters/IGridTransmitter.java
+++ b/src/main/java/mekanism/api/transmitters/IGridTransmitter.java
@@ -1,12 +1,11 @@
package mekanism.api.transmitters;
-import java.util.Collection;
-
import mekanism.api.Coord4D;
-
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
+import java.util.Collection;
+
public interface IGridTransmitter> extends ITransmitter
{
public boolean hasTransmitterNetwork();
@@ -59,5 +58,7 @@ public interface IGridTransmitter> extends ITr
public void takeShare();
+ public void updateShare();
+
public Object getBuffer();
}
diff --git a/src/main/java/mekanism/common/EnergyNetwork.java b/src/main/java/mekanism/common/EnergyNetwork.java
index 9eeb2ff22..c2c9918ca 100644
--- a/src/main/java/mekanism/common/EnergyNetwork.java
+++ b/src/main/java/mekanism/common/EnergyNetwork.java
@@ -76,6 +76,7 @@ public class EnergyNetwork extends DynamicNetwork> extends Transmitter
{
public PartTransmitter containingPart;
@@ -107,6 +106,12 @@ public class MultipartTransmitter> extends Tran
containingPart.takeShare();
}
+ @Override
+ public void updateShare()
+ {
+ containingPart.updateShare();
+ }
+
@Override
public Object getBuffer()
{
diff --git a/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java b/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java
index 8333d7cd3..8ca7678ff 100644
--- a/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java
+++ b/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java
@@ -1,28 +1,23 @@
package mekanism.common.multipart;
-import java.util.Collection;
-
-import mekanism.api.Coord4D;
-import mekanism.api.IHeatTransfer;
-import mekanism.api.transmitters.TransmissionType;
-import mekanism.client.render.RenderPartTransmitter;
-import mekanism.common.HeatNetwork;
-import mekanism.common.util.HeatUtils;
-
-import net.minecraft.client.renderer.texture.IIconRegister;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.tileentity.TileEntity;
-import net.minecraft.util.IIcon;
-
-import net.minecraftforge.common.util.ForgeDirection;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-
import codechicken.lib.colour.ColourRGBA;
import codechicken.lib.data.MCDataInput;
import codechicken.lib.data.MCDataOutput;
import codechicken.lib.vec.Vector3;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import mekanism.api.IHeatTransfer;
+import mekanism.api.transmitters.TransmissionType;
+import mekanism.client.render.RenderPartTransmitter;
+import mekanism.common.HeatNetwork;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import java.util.Collection;
public class PartHeatTransmitter extends PartTransmitter
{
@@ -60,6 +55,9 @@ public class PartHeatTransmitter extends PartTransmitter implements ITransporterTile
{
@@ -435,6 +435,9 @@ public class PartLogisticalTransporter extends PartTransmitter 0)
- {
- FluidStack last = getSaveShare();
-
- if((last != null && !(lastWrite != null && lastWrite.amount == last.amount && lastWrite.getFluid() == last.getFluid())) || (last == null && lastWrite != null))
- {
- lastWrite = last;
- MekanismUtils.saveChunk(tile());
- }
- }
-
+ updateShare();
+
IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tile());
for(ForgeDirection side : getConnections(ConnectionType.PULL))
@@ -77,6 +68,21 @@ public class PartMechanicalPipe extends PartTransmitter 0)
+ {
+ FluidStack last = getSaveShare();
+
+ if((last != null && !(lastWrite != null && lastWrite.amount == last.amount && lastWrite.getFluid() == last.getFluid())) || (last == null && lastWrite != null))
+ {
+ lastWrite = last;
+ MekanismUtils.saveChunk(tile());
+ }
+ }
+ }
+
private FluidStack getSaveShare()
{
if(getTransmitter().hasTransmitterNetwork() && getTransmitter().getTransmitterNetwork().buffer != null)
diff --git a/src/main/java/mekanism/common/multipart/PartPressurizedTube.java b/src/main/java/mekanism/common/multipart/PartPressurizedTube.java
index a493f23c1..80237cd0d 100644
--- a/src/main/java/mekanism/common/multipart/PartPressurizedTube.java
+++ b/src/main/java/mekanism/common/multipart/PartPressurizedTube.java
@@ -39,17 +39,8 @@ public class PartPressurizedTube extends PartTransmitter 0)
- {
- GasStack last = getSaveShare();
-
- if((last != null && !(lastWrite != null && lastWrite.amount == last.amount && lastWrite.getGas() == last.getGas())) || (last == null && lastWrite != null))
- {
- lastWrite = last;
- MekanismUtils.saveChunk(tile());
- }
- }
+ {
+ updateShare();
IGasHandler[] connectedAcceptors = GasTransmission.getConnectedAcceptors(tile());
@@ -84,6 +75,21 @@ public class PartPressurizedTube extends PartTransmitter 0)
+ {
+ GasStack last = getSaveShare();
+
+ if((last != null && !(lastWrite != null && lastWrite.amount == last.amount && lastWrite.getGas() == last.getGas())) || (last == null && lastWrite != null))
+ {
+ lastWrite = last;
+ MekanismUtils.saveChunk(tile());
+ }
+ }
+ }
+
private GasStack getSaveShare()
{
if(getTransmitter().hasTransmitterNetwork() && getTransmitter().getTransmitterNetwork().buffer != null)
diff --git a/src/main/java/mekanism/common/multipart/PartTransmitter.java b/src/main/java/mekanism/common/multipart/PartTransmitter.java
index 5772a1375..f9d75c7c6 100644
--- a/src/main/java/mekanism/common/multipart/PartTransmitter.java
+++ b/src/main/java/mekanism/common/multipart/PartTransmitter.java
@@ -122,4 +122,6 @@ public abstract class PartTransmitter> extends
public abstract Object getBuffer();
public abstract void takeShare();
+
+ public abstract void updateShare();
}
diff --git a/src/main/java/mekanism/common/multipart/PartUniversalCable.java b/src/main/java/mekanism/common/multipart/PartUniversalCable.java
index 749828eea..7d49be3ef 100644
--- a/src/main/java/mekanism/common/multipart/PartUniversalCable.java
+++ b/src/main/java/mekanism/common/multipart/PartUniversalCable.java
@@ -1,11 +1,16 @@
package mekanism.common.multipart;
-import java.util.Collection;
-import java.util.List;
-
+import codechicken.lib.vec.Vector3;
+import cofh.api.energy.IEnergyHandler;
+import cofh.api.energy.IEnergyProvider;
+import cpw.mods.fml.common.Optional.Interface;
+import cpw.mods.fml.common.Optional.InterfaceList;
+import cpw.mods.fml.common.Optional.Method;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import ic2.api.energy.tile.IEnergySource;
import mekanism.api.MekanismConfig.client;
import mekanism.api.MekanismConfig.general;
-import mekanism.common.base.EnergyAcceptorWrapper;
import mekanism.api.energy.EnergyStack;
import mekanism.api.energy.ICableOutputter;
import mekanism.api.energy.IStrictEnergyAcceptor;
@@ -14,6 +19,7 @@ import mekanism.api.transmitters.TransmissionType;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.common.EnergyNetwork;
import mekanism.common.Tier;
+import mekanism.common.base.EnergyAcceptorWrapper;
import mekanism.common.util.CableUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.client.renderer.texture.IIconRegister;
@@ -21,15 +27,9 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
-import cpw.mods.fml.common.Optional.Interface;
-import cpw.mods.fml.common.Optional.InterfaceList;
-import cpw.mods.fml.common.Optional.Method;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import codechicken.lib.vec.Vector3;
-import cofh.api.energy.IEnergyHandler;
-import cofh.api.energy.IEnergyProvider;
-import ic2.api.energy.tile.IEnergySource;
+
+import java.util.Collection;
+import java.util.List;
@InterfaceList({
@Interface(iface = "cofh.api.energy.IEnergyHandler", modid = "CoFHCore"),
@@ -64,16 +64,7 @@ public class PartUniversalCable extends PartTransmitter 0)
- {
- double last = getSaveShare();
-
- if(last != lastWrite)
- {
- lastWrite = last;
- MekanismUtils.saveChunk(tile());
- }
- }
+ updateShare();
List sides = getConnections(ConnectionType.PULL);
@@ -135,6 +126,21 @@ public class PartUniversalCable extends PartTransmitter 0)
+ {
+ double last = getSaveShare();
+
+ if(last != lastWrite)
+ {
+ lastWrite = last;
+ MekanismUtils.saveChunk(tile());
+ }
+ }
+ }
+
private double getSaveShare()
{
if(getTransmitter().hasTransmitterNetwork())