diff --git a/src/main/java/mekanism/api/gas/GasNetwork.java b/src/main/java/mekanism/api/gas/GasNetwork.java index 8848cd28c..106e30883 100644 --- a/src/main/java/mekanism/api/gas/GasNetwork.java +++ b/src/main/java/mekanism/api/gas/GasNetwork.java @@ -68,15 +68,18 @@ public class GasNetwork extends DynamicNetwork { if(buffer == null) { - buffer = net.buffer; + buffer = net.buffer.copy(); } else { - if(buffer.getGas() != net.buffer.getGas()) + if(buffer.getGas() == net.buffer.getGas()) { - throw new RuntimeException("Gas types did not match when merging networks: " + buffer.getGas() + " vs. " + net.buffer.getGas()); + buffer.amount += net.buffer.amount; + } + else if(net.buffer.amount > buffer.amount) + { + buffer = net.buffer.copy(); } - buffer.amount += net.buffer.amount; } net.buffer = null; @@ -106,12 +109,10 @@ public class GasNetwork extends DynamicNetwork if(buffer == null || buffer.getGas() == null || buffer.amount == 0) { - buffer = gas; + buffer = gas.copy(); return; } - if(gas.getGas() != buffer.getGas())throw new RuntimeException("Gas Type " + gas.getGas().getName() + " of buffer does not match gas type " + buffer.getGas().getName() + " of Network"); - buffer.amount += gas.amount; gas.amount = 0; } diff --git a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java index fc0546a34..efedabffc 100644 --- a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java +++ b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java @@ -46,6 +46,7 @@ public abstract class DynamicNetwork> implemen protected boolean needsUpdate = false; protected int updateDelay = 0; + protected boolean firstUpdate = true; protected World worldObj = null; public void addNewTransmitters(Collection> newTransmitters) @@ -175,6 +176,7 @@ public abstract class DynamicNetwork> implemen { transmitter.setTransmitterNetwork((N)this); transmitters.add(transmitter); + transmittersAdded.add(transmitter); } possibleAcceptors.putAll(net.possibleAcceptors); for(Entry> entry : net.acceptorDirections.entrySet()) @@ -338,7 +340,8 @@ public abstract class DynamicNetwork> implemen if(updateDelay == 0) { - MinecraftForge.EVENT_BUS.post(new TransmittersAddedEvent(this, (Collection)transmittersAdded)); + MinecraftForge.EVENT_BUS.post(new TransmittersAddedEvent(this, firstUpdate, (Collection)transmittersAdded)); + firstUpdate = false; transmittersAdded.clear(); needsUpdate = true; } @@ -367,17 +370,19 @@ public abstract class DynamicNetwork> implemen public void queueClientUpdate(Collection> newTransmitters) { transmittersAdded.addAll(newTransmitters); - updateDelay = 2; + updateDelay = 3; } public static class TransmittersAddedEvent extends Event { public DynamicNetwork network; + public boolean newNetwork; public Collection newTransmitters; - public TransmittersAddedEvent(DynamicNetwork net, Collection added) + public TransmittersAddedEvent(DynamicNetwork net, boolean newNet, Collection added) { network = net; + newNetwork = newNet; newTransmitters = added; } } diff --git a/src/main/java/mekanism/common/FluidNetwork.java b/src/main/java/mekanism/common/FluidNetwork.java index 720f06147..74c75dacd 100644 --- a/src/main/java/mekanism/common/FluidNetwork.java +++ b/src/main/java/mekanism/common/FluidNetwork.java @@ -47,37 +47,25 @@ public class FluidNetwork extends DynamicNetwork { if(net != null) { - if(FMLCommonHandler.instance().getEffectiveSide().isClient()) + if(net.buffer != null) { - if(net.refFluid != null && net.fluidScale > fluidScale) + if(buffer == null) { - refFluid = net.refFluid; - fluidScale = net.fluidScale; - buffer = net.buffer; - - net.fluidScale = 0; - net.refFluid = null; - net.buffer = null; + buffer = net.buffer.copy(); } - } - else { - if(net.buffer != null) - { - if(buffer == null) + else { + if(buffer.getFluid() == net.buffer.getFluid()) { - buffer = net.buffer; - } - else { - if(buffer.getFluid() != net.buffer.getFluid()) - { - throw new RuntimeException("Fluid types did not match when merging networks: " + buffer.getFluid().getName() + " vs. " + net.buffer.getFluid().getName()); - } - buffer.amount += net.buffer.amount; } + else if(net.buffer.amount > buffer.amount) + { + buffer = net.buffer.copy(); + } - net.buffer = null; } + + net.buffer = null; } adoptTransmittersAndAcceptorsFrom(net); @@ -103,12 +91,10 @@ public class FluidNetwork extends DynamicNetwork if(buffer == null || buffer.getFluid() == null || buffer.amount == 0) { - buffer = fluid; + buffer = fluid.copy(); return; } - if(fluid.getFluid() != buffer.getFluid()) throw new RuntimeException("Fluid Type " + fluid.getFluid().getName() + " of buffer does not match fluid type " + buffer.getFluid().getName() + " of Network"); - buffer.amount += fluid.amount; fluid.amount = 0; } diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index b5d4d74ab..e6f937bf8 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -1280,7 +1280,7 @@ public class Mekanism public void onTransmittersAddedEvent(TransmittersAddedEvent event) { try { - packetHandler.sendToReceivers(new TransmitterUpdateMessage(PacketType.UPDATE, event.network.transmitters.iterator().next().coord(), event.newTransmitters), event.network.getPacketRange()); + packetHandler.sendToReceivers(new TransmitterUpdateMessage(PacketType.UPDATE, event.network.transmitters.iterator().next().coord(), event.newNetwork, event.newTransmitters), event.network.getPacketRange()); } catch(Exception e) {} } diff --git a/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java b/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java index 14fc0fc46..207e2e8b3 100644 --- a/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java +++ b/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java @@ -234,7 +234,11 @@ public class PartMechanicalPipe extends PartTransmitter transmittersAdded; public Collection transmitterCoords; @@ -149,7 +150,8 @@ public class PacketTransmitterUpdate implements IMessageHandler)data[0]; + newNetwork = (Boolean)data[0]; + transmittersAdded = (Collection)data[1]; break; case ENERGY: power = (Double)data[0]; @@ -181,6 +183,7 @@ public class PacketTransmitterUpdate implements IMessageHandler(); int numTransmitters = dataStream.readInt();