static void CalculateAntennaRecievers(this IMyRadioAntenna antenna, IMyRadioAntenna source, HashSet <IMyEntity> alreadyChecked, HashSet <IMyEntity> result, bool allowEnemy) { if (!antenna.IsWorking || !antenna.IsBroadcasting) { return; } var sp = new BoundingSphereD(antenna.GetPosition(), antenna.Radius); var entities = MyAPIGateway.Entities.GetEntitiesInSphere(ref sp); var lst = new List <IMySlimBlock>(); foreach (var ent in entities) { if (!alreadyChecked.Add(ent)) { continue; } ; if (ent is IMyCharacter) { if (!allowEnemy) { var pl = MyAPIGateway.Players.GetPlayerControllingEntity(ent); if (pl != null && source.GetUserRelationToOwner(pl.IdentityId) != MyRelationsBetweenPlayerAndBlock.Enemies) { result.Add(ent); } } else { result.Add(ent); } } else { var grid = ent as IMyCubeGrid; if (grid != null) { lst.Clear(); grid.GetBlocks(lst, b => b.FatBlock is IMyRadioAntenna); foreach (var ant in lst.Select(c => c.FatBlock as IMyRadioAntenna)) { ant.CalculateAntennaRecievers(source, alreadyChecked, result, allowEnemy); } } } } }