static bool CanMergeCubes(IMyCubeBlock padA, IMyCubeBlock padB, Vector3I gridOffset, List <IMySlimBlock> blocksOverlapping, List <IMySlimBlock> weldPadsOverlapping) { blocksOverlapping.Clear(); try { IMyCubeGrid gridA = padA.CubeGrid; IMyCubeGrid gridB = padB.CubeGrid; MyCubeGrid internalGridB = (MyCubeGrid)gridB; MatrixI transform = gridA.CalculateMergeTransform(gridB, gridOffset); bool result = true; // check gridToMerge's blocks against grid's blocks foreach (IMySlimBlock slimGridB in internalGridB.GetBlocks()) // get blocks without intermediary lists { if (slimGridB.FatBlock == padB) { continue; } // ignore all pads //if(IsWeldPad(slimGridB.BlockDefinition.Id)) // continue; Vector3I pos = Vector3I.Transform(slimGridB.Position, transform); IMySlimBlock slimGridA = gridA.GetCubeBlock(pos); if (slimGridA != null) { if (slimGridA.FatBlock == padA) { continue; } // ignore all pads //if(IsWeldPad(slimGridA.BlockDefinition.Id)) // continue; //MyAPIGateway.Utilities.ShowNotification($"{(master ? "master" : "slavetest")} :: {slimGrid1.BlockDefinition.ToString()} OVERLAPS {slimGrid2.BlockDefinition.ToString()}", 16); //DebugDraw(slimGrid1.CubeGrid, slimGrid1.Min, slimGrid1.Max, Color.Red, master); //DebugDraw(slimGrid2.CubeGrid, slimGrid2.Min, slimGrid2.Max, Color.Yellow, master); //result = false; //continue; bool isWeldPadA = (slimGridA?.FatBlock?.GameLogic?.GetAs <WeldPad>() != null); bool isWeldPadB = (slimGridB?.FatBlock?.GameLogic?.GetAs <WeldPad>() != null); if (isWeldPadA || isWeldPadB) { if (isWeldPadA) { weldPadsOverlapping.Add(slimGridA); } if (isWeldPadB) { weldPadsOverlapping.Add(slimGridB); } } else { blocksOverlapping.Add(slimGridA); blocksOverlapping.Add(slimGridB); result = false; } // allow more blocks to be found } //DebugDraw(grid1, pos, pos, Color.Blue, master); } return(result); } catch (Exception e) { Log.Error(e); } return(false); }