internal void ReScanBlockGroups() { if (TerminalSystem == null) { TerminalSystem = MyAPIGateway.TerminalActionsHelper.GetTerminalSystemForGrid(MyGrid); } if (TerminalSystem != null) { TerminalSystem.GetBlockGroups(null, group => { GroupInfo groupInfo = null; if (BlockGroups.TryGetValue(group.Name, out groupInfo)) { groupInfo.ChangeState = GroupInfo.ChangeStates.None; groupInfo.Name = group.Name; } group.GetBlocks(null, block => { var cube = (MyCubeBlock)block; WeaponComponent comp; if (cube.Components.TryGet(out comp) && SubGrids.Contains(cube.CubeGrid)) { if (groupInfo == null) { groupInfo = Session.GroupInfoPool.Get(); groupInfo.Name = group.Name; groupInfo.ChangeState = GroupInfo.ChangeStates.Add; BlockGroups.Add(group.Name, groupInfo); } groupInfo.Comps.Add(comp); if (groupInfo.ChangeState == GroupInfo.ChangeStates.None) { groupInfo.ChangeState = GroupInfo.ChangeStates.Modify; } } return(false); }); return(false); }); BlockGroups.ApplyAdditionsAndModifications(); foreach (var group in BlockGroups) { if (group.Value.ChangeState == GroupInfo.ChangeStates.None) { group.Value.Comps.Clear(); Session.GroupInfoPool.Return(group.Value); BlockGroups.Remove(group.Key); } else { group.Value.ChangeState = GroupInfo.ChangeStates.None; } if (Session.MpActive && group.Value.Comps != null) { foreach (var comp in group.Value.Comps) { if (comp.Set?.Value?.Overrides != null) { SyncGridOverrides(this, group.Key, comp.Set.Value.Overrides); } break; } } } BlockGroups.ApplyRemovals(); ScanBlockGroups = false; } }