diff --git a/common/mekanism/api/transmitters/DynamicNetwork.java b/common/mekanism/api/transmitters/DynamicNetwork.java
index 76fbc5ef7..0282ffa30 100644
--- a/common/mekanism/api/transmitters/DynamicNetwork.java
+++ b/common/mekanism/api/transmitters/DynamicNetwork.java
@@ -120,7 +120,7 @@ public abstract class DynamicNetwork> implemen
{
if(!fixed)
{
- ++ticksSinceCreate;
+ ticksSinceCreate++;
if(ticksSinceCreate > 1200)
{
@@ -187,7 +187,7 @@ public abstract class DynamicNetwork> implemen
TileEntity[] connectedBlocks = new TileEntity[6];
boolean[] dealtWith = {false, false, false, false, false, false};
- List newNetworks = new ArrayList();
+ List> newNetworks = new ArrayList>();
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
{
@@ -226,16 +226,6 @@ public abstract class DynamicNetwork> implemen
}
}
- newNetworks.add(finder);
- }
- }
-
- if(newNetworks.size() > 0)
- {
- Object[] metaArray = getMetaArray(newNetworks);
-
- for(NetworkFinder finder : newNetworks)
- {
Set> newNetCables = new HashSet>();
for(Object3D node : finder.iterated)
@@ -251,9 +241,17 @@ public abstract class DynamicNetwork> implemen
}
}
- ITransmitterNetwork newNetwork = create(newNetCables);
- newNetwork.onNewFromSplit(newNetworks.indexOf(finder), metaArray);
- newNetwork.refresh();
+ newNetworks.add(create(newNetCables));
+ }
+ }
+
+ if(newNetworks.size() > 0)
+ {
+ onNetworksCreated((List)newNetworks);
+
+ for(ITransmitterNetwork network : newNetworks)
+ {
+ network.refresh();
}
}
@@ -262,13 +260,7 @@ public abstract class DynamicNetwork> implemen
}
@Override
- public Object[] getMetaArray(List networks)
- {
- return null;
- }
-
- @Override
- public void onNewFromSplit(int netIndex, Object[] metaArray) {}
+ public void onNetworksCreated(List networks) {}
@Override
public void setFixed(boolean value)
diff --git a/common/mekanism/api/transmitters/ITransmitterNetwork.java b/common/mekanism/api/transmitters/ITransmitterNetwork.java
index 4d463d513..8b4a58e89 100644
--- a/common/mekanism/api/transmitters/ITransmitterNetwork.java
+++ b/common/mekanism/api/transmitters/ITransmitterNetwork.java
@@ -43,14 +43,5 @@ public interface ITransmitterNetwork>
* @param size - the amount of new networks that are being created
* @return meta obj
*/
- public Object[] getMetaArray(List networks);
-
- /**
- * Called right after a new network is created after being split, before it is refreshed. Passes in it's index
- * in the amount of networks being created, as well as the meta value that was retrieved on the original network
- * by getMetaObj().
- * @param netIndex - the index of the network being created
- * @param meta - meta obj
- */
- public void onNewFromSplit(int netIndex, Object[] metaArray);
+ public void onNetworksCreated(List networks);
}
diff --git a/common/mekanism/common/EnergyNetwork.java b/common/mekanism/common/EnergyNetwork.java
index 07aea0fdb..d6502552d 100644
--- a/common/mekanism/common/EnergyNetwork.java
+++ b/common/mekanism/common/EnergyNetwork.java
@@ -15,6 +15,7 @@ import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.ITransmitter;
import mekanism.api.transmitters.TransmissionType;
import mekanism.common.util.CableUtils;
+import mekanism.common.util.ListUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
@@ -66,6 +67,8 @@ public class EnergyNetwork extends DynamicNetwork
lastPowerScale = net.lastPowerScale;
}
+ electricityStored += net.electricityStored;
+
addAllTransmitters(net.transmitters);
net.deregister();
}
@@ -81,12 +84,36 @@ public class EnergyNetwork extends DynamicNetwork
//Use the harmonic mean. Because we're mean.
int numCables = transmitters.size();
double reciprocalSum = 0;
+
for(ITransmitter cable : transmitters)
{
reciprocalSum += 1.0/(double)cable.getCapacity();
}
+
return (double)numCables / reciprocalSum;
}
+
+ @Override
+ public void onNetworksCreated(List networks)
+ {
+ double[] caps = new double[networks.size()];
+ double cap = 0;
+
+ for(EnergyNetwork network : networks)
+ {
+ caps[networks.indexOf(network)] = network.getCapacity();
+ cap += network.getCapacity();
+ }
+
+ electricityStored = Math.min(cap, electricityStored);
+
+ double[] percent = ListUtils.percent(caps);
+
+ for(EnergyNetwork network : networks)
+ {
+ network.electricityStored = percent[networks.indexOf(network)]*electricityStored;
+ }
+ }
public synchronized double getEnergyNeeded()
{
@@ -427,6 +454,7 @@ public class EnergyNetwork extends DynamicNetwork
network.joulesLastTick = joulesLastTick;
network.joulesTransmitted = joulesTransmitted;
network.lastPowerScale = lastPowerScale;
+ network.electricityStored += electricityStored;
return network;
}
@@ -438,23 +466,14 @@ public class EnergyNetwork extends DynamicNetwork
network.joulesLastTick = joulesLastTick;
network.joulesTransmitted = joulesTransmitted;
network.lastPowerScale = lastPowerScale;
+ network.electricityStored += electricityStored;
return network;
}
@Override
protected EnergyNetwork create(Set networks)
{
- EnergyNetwork network = new EnergyNetwork(networks);
-
- if(joulesLastTick > network.joulesLastTick || clientEnergyScale > network.clientEnergyScale)
- {
- network.clientEnergyScale = clientEnergyScale;
- network.joulesLastTick = joulesLastTick;
- network.joulesTransmitted = joulesTransmitted;
- network.lastPowerScale = lastPowerScale;
- }
-
- return network;
+ return new EnergyNetwork(networks);
}
@Override
@@ -472,6 +491,7 @@ public class EnergyNetwork extends DynamicNetwork
@Override
public String getFlow()
{
- return MekanismUtils.getPowerDisplay(20*electricityStored);
+ return "" + electricityStored;
+ //TODO return MekanismUtils.getPowerDisplay(20*electricityStored);
}
}
diff --git a/common/mekanism/common/multipart/PartTransmitter.java b/common/mekanism/common/multipart/PartTransmitter.java
index bbe75aa66..5ddef1123 100644
--- a/common/mekanism/common/multipart/PartTransmitter.java
+++ b/common/mekanism/common/multipart/PartTransmitter.java
@@ -187,8 +187,11 @@ public abstract class PartTransmitter> extends Pa
}
else if(connectedNets.size() == 1)
{
- theNetwork = connectedNets.iterator().next();
+ N network = connectedNets.iterator().next();
+ preSingleMerge(network);
+ theNetwork = network;
theNetwork.transmitters.add((ITransmitter)tile());
+ theNetwork.refresh();
}
else {
theNetwork = createNetworkByMergingSet(connectedNets);
@@ -199,6 +202,8 @@ public abstract class PartTransmitter> extends Pa
return theNetwork;
}
+ public void preSingleMerge(N network) {}
+
@Override
public void removeFromTransmitterNetwork()
{
diff --git a/common/mekanism/common/multipart/PartUniversalCable.java b/common/mekanism/common/multipart/PartUniversalCable.java
index 6cc3ee7a0..af096d240 100644
--- a/common/mekanism/common/multipart/PartUniversalCable.java
+++ b/common/mekanism/common/multipart/PartUniversalCable.java
@@ -52,6 +52,7 @@ public class PartUniversalCable extends PartTransmitter implement
if(cacheEnergy > 0)
{
getTransmitterNetwork().electricityStored += cacheEnergy;
+ cacheEnergy = 0;
}
}
@@ -91,6 +92,13 @@ public class PartUniversalCable extends PartTransmitter implement
cableIcons.registerCenterIcons(register, new String[] {"UniversalCable"});
cableIcons.registerSideIcon(register, "TransmitterSideSmall");
}
+
+ @Override
+ public void preSingleMerge(EnergyNetwork network)
+ {
+ network.electricityStored += cacheEnergy;
+ cacheEnergy = 0;
+ }
@Override
public Icon getCenterIcon()
diff --git a/common/mekanism/common/util/ListUtils.java b/common/mekanism/common/util/ListUtils.java
index c8e003572..ab1a0e001 100644
--- a/common/mekanism/common/util/ListUtils.java
+++ b/common/mekanism/common/util/ListUtils.java
@@ -187,6 +187,21 @@ public class ListUtils
return split;
}
+ public static double[] percent(double[] values)
+ {
+ double[] ret = new double[values.length];
+ double total = 0;
+
+ for(double d : values) total += d;
+
+ for(int i = 0; i < values.length; i++)
+ {
+ ret[i] = values[i]/total;
+ }
+
+ return ret;
+ }
+
public static int[] splitInt(int size, int num)
{
int[] split = new int[size];