internal static void RemoveFromFilter(IMyTerminalBlock block) { FilteredContainer component = block?.GameLogic?.GetAs <FilteredContainer>(); if (component.FilterController.ListToRemove.Count == 0) { return; } Filterdata filterdata = new Filterdata { id = component.Entity.EntityId, FilterMode = component.FilterController.FilterMode, FilterItems = component.FilterController.ListToRemove.ToArray(), }; var metaData = MyAPIGateway.Utilities.SerializeToBinary <Filterdata>(filterdata); var SendPacket = new MetaPacket { EntityId = component.Entity.EntityId, PacketType = PacketType.FILTER_REMOVE, MetaData = metaData, }; MyAPIGateway.Multiplayer.SendMessageToServer(31875, MyAPIGateway.Utilities.SerializeToBinary <MetaPacket>(SendPacket)); component.RemoveFromFilter(filterdata); component.FilterController.ListToRemove.Clear(); ContainerControls.updateVisual("CurrentList"); }
internal void LoadData() { if (Entity.Storage == null) { // DebugLog.Write("storage is null, exiting loadData()."); return; } string Data; if (Entity.Storage.TryGetValue(FilterStateGUID, out Data)) { // DebugLog.Write(Data); Filterdata loadedfilterdata = new Filterdata(); var base64 = Convert.FromBase64String(Data); loadedfilterdata = MyAPIGateway.Utilities.SerializeFromBinary <Filterdata>(base64); // DebugLog.Write($"loaded id: {loadedfilterdata.id}"); if (loadedfilterdata.id == MyCargoContainer.EntityId) { // DebugLog.Write($"Saved state found (id: {loadedfilterdata.id})"); MyInventory inventory = (MyInventory)MyCargoContainer.GetInventory(); if (loadedfilterdata.FilterItems != null) { for (int i = 0; i < loadedfilterdata.FilterItems.Count(); i++) { // DebugLog.Write($"{loadedfilterdata.FilterItems[i].DisplayName}"); FilterController.FilterList.Add(loadedfilterdata.FilterItems[i]); if (loadedfilterdata.FilterItems[i].Type == FilterType.FILTER_TYPE) { MyObjectBuilderType type; if (MyObjectBuilderType.TryParse(loadedfilterdata.FilterItems[i].ParseItem, out type) == true) { inventory.Constraint.AddObjectBuilderType(type); } } else if (loadedfilterdata.FilterItems[i].Type == FilterType.FILTER_ITEM) { MyDefinitionId Id; if (MyDefinitionId.TryParse(loadedfilterdata.FilterItems[i].ParseItem, out Id) == true) { inventory.Constraint.Add(Id); } } } } inventory.Constraint.IsWhitelist = loadedfilterdata.FilterMode; FilterController.FilterMode = loadedfilterdata.FilterMode; inventory.Constraint.Icon = null; } else { // DebugLog.Write($"Id mismatch - Entity Id: {Entity.EntityId} MyCargoContainerId: {MyCargoContainer.EntityId}"); } } }
internal void SaveData() { if (Entity.Storage != null && MyCargoContainer.EntityId != 0) { Filterdata filterdata = new Filterdata { id = MyCargoContainer.EntityId, FilterMode = FilterController.FilterMode, FilterItems = FilterController.FilterList.ToArray(), }; // DebugLog.Write($"SaveData() called for id {filterdata.id}"); var data = MyAPIGateway.Utilities.SerializeToBinary <Filterdata>(filterdata); var save = Convert.ToBase64String(data); DebugLog.Write(save); Entity.Storage[FilterStateGUID] = save; } }
internal void AddToFilter(Filterdata filterdata) { if (filterdata.FilterItems.Length == 0) { // DebugLog.Write("AddToFilter called with 0 items to add. ignoring..."); return; } var inventory = (MyInventory)MyCargoContainer.GetInventory(); for (int i = 0; i < filterdata.FilterItems.Length; i++) { if (filterdata.FilterItems[i].Type == FilterType.FILTER_TYPE) { MyObjectBuilderType type; if (MyObjectBuilderType.TryParse(filterdata.FilterItems[i].ParseItem, out type) == true) { if (!inventory.Constraint.ConstrainedTypes.Contains(type)) { inventory.Constraint.AddObjectBuilderType(type); } } } if (filterdata.FilterItems[i].Type == FilterType.FILTER_ITEM) { MyDefinitionId Id; if (MyDefinitionId.TryParse(filterdata.FilterItems[i].ParseItem, out Id) == true) { if (!inventory.Constraint.ConstrainedIds.Contains(Id)) { inventory.Constraint.Add(Id); } } } if (!FilterController.FilterList.Contains(filterdata.FilterItems[i])) { FilterController.FilterList.Add(filterdata.FilterItems[i]); } } inventory.Constraint.Icon = null; SaveData(); }
internal static void SetFilterMode(IMyTerminalBlock block, long value) { FilteredContainer component = block?.GameLogic?.GetAs <FilteredContainer>(); var filterdata = new Filterdata(); if (value == 0) { filterdata.FilterMode = true; } if (value == 1) { filterdata.FilterMode = false; } var Sendpacket = new MetaPacket { EntityId = component.Entity.EntityId, PacketType = PacketType.FILTER_MODE, MetaData = MyAPIGateway.Utilities.SerializeToBinary <Filterdata>(filterdata), }; MyAPIGateway.Multiplayer.SendMessageToServer(31875, MyAPIGateway.Utilities.SerializeToBinary <MetaPacket>(Sendpacket)); component.SetFilterMode(filterdata.FilterMode); }