public void Join(ModuleReactorHolder holder)
 {
     if (holder.sharedEnergyNet != null) //MERGE
     {
         if (holder.sharedEnergyNet == this)
         {
             return;
         }
         var otherNet = holder.sharedEnergyNet;
         foreach (var block in otherNet.holders)
         {
             holders.Add(block);
             block.sharedEnergyNet = this;
         }
         NetMaxCap += otherNet.NetMaxCap;
         NetCharge += otherNet.NetCharge;
         otherNet.holders.Clear(); // Another one bites the dust
     }
     else
     {
         holders.Add(holder);
         NetMaxCap             += holder.ThisCapacity;
         NetCharge             += holder.ThisCharge;
         holder.ThisCharge      = 0f;
         holder.sharedEnergyNet = this;
     }
 }
                static void AttemptJoin(ModuleReactorHolder subject, TankBlock other)
                {
                    if (other == null)
                    {
                        return;
                    }
                    var moduleHolder = other.GetComponent <ModuleReactorHolder>();

                    if (moduleHolder == null || moduleHolder.sharedEnergyNet == null)
                    {
                        return;
                    }
                    if (!moduleHolder.UseAPIDs)
                    {
                        moduleHolder.sharedEnergyNet.Join(subject);
                        return;
                    }
                    else
                    {
                        for (int i = 0; i < moduleHolder.APIDs.Length; i++)
                        {
                            var check = moduleHolder.block.ConnectedBlocksByAP[moduleHolder.APIDs[i]];
                            if (check == subject.block)
                            {
                                moduleHolder.sharedEnergyNet.Join(subject);
                                return;
                            }
                        }
                    }
                }
 public void Leave(ModuleReactorHolder holder)
 {
     holder.sharedEnergyNet = null;
     if (holders.Remove(holder))
     {
         NetMaxCap -= holder.ThisCapacity;
         if (NetCharge > NetMaxCap)
         {
             holder.ThisCharge = NetCharge - NetMaxCap;
             NetCharge         = NetMaxCap;
         }
         Revalidate();
     }
 }
 public static SharedEnergyNet Validate(ModuleReactorHolder holder)
 {
     if (holder.UseAPIDs)
     {
         for (int i = 0; i < holder.APIDs.Length; i++)
         {
             var other = holder.block.ConnectedBlocksByAP[holder.APIDs[i]];
             AttemptJoin(holder, other);
         }
     }
     else
     {
         for (int i = 0; i < holder.block.attachPoints.Length; i++)
         {
             var other = holder.block.ConnectedBlocksByAP[i];
             AttemptJoin(holder, other);
         }
     }
     if (holder.sharedEnergyNet == null)
     {
         new SharedEnergyNet().Join(holder);
     }
     return(holder.sharedEnergyNet);
 }